如何禁用除面板之外的所有表单
How to disable all on the forms except for the panel
除了下面显示的面板,我想禁用所有面板
这个面板的触发是当我点击我的数据网格视图上的编辑按钮时,面板将是可见的。所以基本上面板在默认情况下是不可见的(下面是数据网格中编辑按钮的代码)
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
}
}
foreach (Control child in this.Controls)
{
if (child != panel1)
child.Enabled = false;
}
确保您的 panel1
是表格中的直系子级。打开文档大纲 window。你应该看到这样的东西:
或者,制作一个新表格并用ShowDialog()
显示。如果你愿意,你可以让它无边界...
要禁用除您的面板 panel1
之外的表单的所有子控件,试试这个:
foreach (var control in Controls.Cast<Control>().Where(ctrl => ctrl.Name != "panel1"))
{
control.Enabled = false;
}
我对此进行了测试,它禁用了所有其他控件,同时保留 panel1 和其中的控件仍然启用。这是从
修改的代码
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 禁用表单中的所有控件,但不禁用表单本身。然后,它启用面板的父项的父项,也就是选项卡控件本身,然后禁用选项卡控件中的所有内容。
然后启用面板所在的标签页,并禁用标签页中的所有其他内容。
最后,它启用面板本身。这不是一段非常优化的代码,但它可以工作。
也就是说,按照上图,tabControl1本身是开启的,但是除了panel1所在的tabPage1之外,tabPage1里面除了panel1之外的其他都是关闭的。
编辑:
要撤销所有其他控件的禁用,只需执行以下操作:
foreach (Control c in this.Controls)
{
c.Enabled = true;
}
panel1.Enabled = false;
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;
}
除了下面显示的面板,我想禁用所有面板
这个面板的触发是当我点击我的数据网格视图上的编辑按钮时,面板将是可见的。所以基本上面板在默认情况下是不可见的(下面是数据网格中编辑按钮的代码)
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
}
}
foreach (Control child in this.Controls)
{
if (child != panel1)
child.Enabled = false;
}
确保您的 panel1
是表格中的直系子级。打开文档大纲 window。你应该看到这样的东西:
或者,制作一个新表格并用ShowDialog()
显示。如果你愿意,你可以让它无边界...
要禁用除您的面板 panel1
之外的表单的所有子控件,试试这个:
foreach (var control in Controls.Cast<Control>().Where(ctrl => ctrl.Name != "panel1"))
{
control.Enabled = false;
}
我对此进行了测试,它禁用了所有其他控件,同时保留 panel1 和其中的控件仍然启用。这是从
修改的代码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 禁用表单中的所有控件,但不禁用表单本身。然后,它启用面板的父项的父项,也就是选项卡控件本身,然后禁用选项卡控件中的所有内容。
然后启用面板所在的标签页,并禁用标签页中的所有其他内容。
最后,它启用面板本身。这不是一段非常优化的代码,但它可以工作。
也就是说,按照上图,tabControl1本身是开启的,但是除了panel1所在的tabPage1之外,tabPage1里面除了panel1之外的其他都是关闭的。
编辑:
要撤销所有其他控件的禁用,只需执行以下操作:
foreach (Control c in this.Controls)
{
c.Enabled = true;
}
panel1.Enabled = false;
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;
}