如何防止控件绑定到面板
How prevent Controls binding to Panel
我的表单顶部有一排按钮,底部有一排按钮。为了美观,我在两行后面各放了一个Panel。这给了我一个问题,我不能再有一个可以引用任何按钮的例程。这是因为我现在需要在引用中包含面板的名称。
例如,我有一个例程,它在获得焦点时使按钮的前景色变为红色。
Internal void ButtonGotFocus()
{
CurrentFieldName = this.ActiveControl.Name;
this.Controls[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
}
此例程现在为位于面板内的按钮生成空引用错误。我只是想让面板让我的表格看起来更像样。我不想将它们用作容器。我可以禁用此功能吗?
如果是两个面板,那么您必须检查每个面板:
if (Panel1.Controls.ContainsKey(CurrentFieldName)) {
Panel1.Controls[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
} else if (Panel2.Controls.ContainsKey(CurrentFieldName)) {
Panel2.Controls[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
}
或者您可以创建字典并以这种方式引用控件:
Dictionary<string, RadioButton> rboxes = new Dictionary<string, RadioButton>();
rboxes.Add(radioButton1.Name, radioButton1);
rboxes.Add(radioButton2.Name, radioButton2);
rboxes.Add(radioButton3.Name, radioButton3);
rboxes.Add(radioButton4.Name, radioButton4);
if (rboxes.ContainsKey(CurrentFieldName)) {
rboxes[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
}
我的表单顶部有一排按钮,底部有一排按钮。为了美观,我在两行后面各放了一个Panel。这给了我一个问题,我不能再有一个可以引用任何按钮的例程。这是因为我现在需要在引用中包含面板的名称。
例如,我有一个例程,它在获得焦点时使按钮的前景色变为红色。
Internal void ButtonGotFocus()
{
CurrentFieldName = this.ActiveControl.Name;
this.Controls[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
}
此例程现在为位于面板内的按钮生成空引用错误。我只是想让面板让我的表格看起来更像样。我不想将它们用作容器。我可以禁用此功能吗?
如果是两个面板,那么您必须检查每个面板:
if (Panel1.Controls.ContainsKey(CurrentFieldName)) {
Panel1.Controls[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
} else if (Panel2.Controls.ContainsKey(CurrentFieldName)) {
Panel2.Controls[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
}
或者您可以创建字典并以这种方式引用控件:
Dictionary<string, RadioButton> rboxes = new Dictionary<string, RadioButton>();
rboxes.Add(radioButton1.Name, radioButton1);
rboxes.Add(radioButton2.Name, radioButton2);
rboxes.Add(radioButton3.Name, radioButton3);
rboxes.Add(radioButton4.Name, radioButton4);
if (rboxes.ContainsKey(CurrentFieldName)) {
rboxes[CurrentFieldName].ForeColor = Color.FromArgb(192, 0, 0);
}