如何禁用除面板之外的所有表单

时间:2015-09-04 07:02:55

标签: c# visual-studio visual-studio-2010 c#-4.0 datagridview

我想禁用除下面显示的面板以外的所有内容

enter image description here

这个面板的触发是当我点击我的datagridview上的编辑按钮并且面板可见时..所以基本上面板在默认情况下是不可见的(这里是数据网格中编辑按钮的下面的代码)

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        var senderGrid = (DataGridView)sender;

        if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
            e.RowIndex >= 0)
        {

            panel1.Visible = true;
            selectedItenOutputOrderTabGrid.Rows.RemoveAt(selectedItenOutputOrderTabGrid.CurrentRow.Index);

              // HERE I WANT TO ADD A FUNCTION THAT WOULD DISABLE ALL IN THE FORM EXCEPT THE PANEL
        }

    }

4 个答案:

答案 0 :(得分:2)

foreach (Control child in this.Controls)
{
    if (child != panel1)
        child.Enabled = false;
}

确保您的panel1是表单上的直接孩子。打开“文档大纲”窗口。你应该看到这样的东西:

Document outline

或者,创建一个新表单并使用ShowDialog()显示它。如果你愿意,你可以让它无边界......

答案 1 :(得分:2)

要禁用除面板panel1以外的所有表单子控件,请尝试以下操作:

foreach (var control in Controls.Cast<Control>().Where(ctrl => ctrl.Name != "panel1"))
{
    control.Enabled = false;
}

答案 2 :(得分:2)

我对此进行了测试,并禁用了所有其他控件,同时仍然启用了panel1和控件。这是从https://stackoverflow.com/a/13446223/3472690

修改的代码
foreach (Control c in this.Controls)
{
    c.Enabled = false;
}


panel1.Parent.Parent.Enabled = true;
foreach (Control c in panel1.Parent.Parent.Controls)
{
     c.Enabled = false;
}

panel1.Parent.Enabled = true;
foreach (Control c in panel1.Parent.Controls)
{
     c.Enabled = false;
}

panel1.Enabled = true;

这段代码的作用非常简单:

首先,第一个foreach禁用表单中的所有控件,但不禁用表单本身。然后,它启用面板的父级(即tabcontrol本身),然后禁用选项卡控件中的所有内容。

然后启用面板所在的标签页,并禁用标签页中的所有其他内容。

最后,它启用了面板本身。这不是一个非常优化的代码,但它可以工作。

enter image description here

这意味着,根据上图,tabControl1本身已启用,但其中的所有内容都被禁用,除了panel1所在的tabPage1,而tabPage1中除panel1之外的所有内容都被禁用。

修改

要反转禁用所有其他控件,只需执行以下操作:

foreach (Control c in this.Controls)
{
    c.Enabled = true;
}

panel1.Enabled = false;

答案 3 :(得分:0)

private void ShowFilter(Control parentControl, Control childControl, bool enable)
    {
        foreach (Control control in parentControl.Controls.Cast<Control>().Where(ctrl => ctrl.Name != childControl.Name))
        {
            control.Enabled = !enable;
        }
        childControl.Visible = enable;
    }