在 Form1 上,我想制作一个按钮来打开/关闭 Form2 的标签的可见性(可见真或假)。非常感谢,我是初学者!
问问题
144 次
2 回答
1
首先,在 Form2 上,将标签更改Modifiers
为public
.
此代码假定同时打开的只有 Form1 和 Form2。该Application.OpenForms[]
数组包含当前打开的表单,因此您可以从其他表单对象访问它们。
如果您想要一个开关按钮,则创建一个按钮单击事件处理程序,例如:
public partial class Form1 : Form
{
Namespace.Form2 form2 = (Namespace.Form2)Application.OpenForms[1];
//Single Button event handler
private void onOffClick(object sender, EventArgs e)
{
form2.LableName.Visible = !form2.LabelName.Visibility;
}
}
现在,如果您想要一个开和一个关按钮,那么为每个按钮创建一个事件处理程序。
public partial class Form1 : Form
{
Namespace.Form2 form2 = (Namespace.Form2)Application.OpenForms[1];
//On Button event handler
private void onClick(object sender, EventArgs e)
{
form2.LableName.Visible = true;
}
//off Button event handler
private void offClick(object sender, EventArgs e)
{
form2.LableName.Visible = false;
}
}
于 2012-10-25T21:54:45.877 回答
0
那么这就是你应该做的。更简单但不推荐的解决方案。我写它只是为了展示它是多么简单:
public partial class Form1 : Form
{
Form2 form2;
public Form1()
{
InitializeComponent();
form2 = new Form2();
form2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
bool labelVisible = form2.ToggleLabelVisibility();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public bool ToggleLabelVisibility()
{
label1.Visible = !label1.Visible;
return label1.Visible;
}
}
更好的解决方案应该在 Form2 上调用委托:在 Form1 中仅更改此:
private void button1_Click(object sender, EventArgs e)
{
bool labelVisible = (bool)form2.Invoke(form2.ToggleVisibility);
}
表格2:
public partial class Form2 : Form
{
public delegate bool visibilityToggler();
public visibilityToggler ToggleVisibility;
public Form2()
{
InitializeComponent();
ToggleVisibility = new visibilityToggler(ToggleLabelVisibility);
}
public bool ToggleLabelVisibility()
{
label1.Visible = !label1.Visible;
return label1.Visible;
}
}
我必须说这是老派,我相信还有很多其他方法可以做到这一点,特别是从 C# 4.0 开始,但这就是我多年来的做法。
于 2012-10-25T21:55:38.033 回答