我想从form2
或form3
问题是菜单条是私有的。我无法从可以更改值的其他表单访问它。我怎么能这样做?
答案 0 :(得分:0)
请勿尝试从外部访问表单的私人控件,而不要制作您的菜单public
- 它不是您问题的正确解决方案。如果您将控件公开,则允许其他组件访问这些控件而无法进行干预 - 外部调用者可以在不知道表单的情况下更改表单的状态。这可能适用于非常小的程序,但由于各种UI元素相互依赖,因此会导致代码在增长时无法维护:当您更改一个时,您必须更新代码其他组件,以保持建设没有错误。如果不破坏功能,这很难做到。
如果您需要从另一个表单影响一个表单,正确的方法是获取目标表单的临时引用(最好只是一个接口),然后告诉目标表单停用它自己的菜单。
这使菜单成为私有组件(应该如此),但仍然可以告诉目标表单更新菜单的状态。
例如:
// Form1.Designer.cs
partial class Form1
{
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
// ...
}
// Form with menu
public partial class Form1 : Form
{
public void UpdateMenuStatus ( bool bEnable )
{
// update menu status here
}
}
// Form that wants to update the menu on Form1
public partial class Form2 : Form
{
private void SomeFunc ()
{
Form1 form1 = GetForm1Reference ();
form1.UpdateMenuStatus ( true );
}
}
函数GetForm1Reference ()
应该在您维护的全局列表/地图中查找请求的Form1
引用 - 这样您就不会在其他表单中对表单的特定实例进行硬编码 - 你希望保持这些不同的形式尽可能彼此分开,以便改变一种形式并不会迫使你改变其他形式。