我想禁用除下面显示的面板以外的所有内容
这个面板的触发是当我点击我的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
}
}
答案 0 :(得分:2)
foreach (Control child in this.Controls)
{
if (child != panel1)
child.Enabled = false;
}
确保您的panel1
是表单上的直接孩子。打开“文档大纲”窗口。你应该看到这样的东西:
或者,创建一个新表单并使用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本身),然后禁用选项卡控件中的所有内容。
然后启用面板所在的标签页,并禁用标签页中的所有其他内容。
最后,它启用了面板本身。这不是一个非常优化的代码,但它可以工作。
这意味着,根据上图,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;
}