Dyl*_*ett 47 c# controls winforms
首先,这是一个关于使用Windows窗体的桌面应用程序的问题,而不是ASP.NET问题.
我需要与其他表单上的控件进行交互.我试图通过使用,例如,以下来访问控件...
otherForm.Controls["nameOfControl"].Visible = false;
Run Code Online (Sandbox Code Playgroud)
它不像我期望的那样工作.我最终抛出了一个例外Main.但是,如果我public而不是制作控件private,我可以直接访问它们,因为......
otherForm.nameOfControl.Visible = false;
Run Code Online (Sandbox Code Playgroud)
但这是最好的方法吗?是否public将其他形式的控件视为"最佳实践"?是否有"更好"的方式访问另一种形式的控件?
进一步说明:
这实际上是我提出的另一个问题的后续问题,在C#中创建"树视图首选项对话框"类型的界面的最佳方法?.我得到的答案非常好,解决了许多很多组织问题,这些问题在保持用户界面简单易用的同时兼顾了运行时和设计时.然而,它确实提出了一个轻松控制界面其他方面的问题.
基本上,我有一个根表单,它实例化了根表单中面板中的许多其他表单.因此,例如,其中一个子表单上的单选按钮可能需要更改主,根表单上的状态条图标的状态.在这种情况下,我需要子表单与父(根)表单的状态条中的控件进行通信.(我希望这是有道理的,而不是在"谁是第一个"的方式.)
Jon*_*jap 37
您可以创建一个控制其可见性的属性,而不是将控件公开:
public bool ControlIsVisible
{
get { return control.Visible; }
set { control.Visible = value; }
}
Run Code Online (Sandbox Code Playgroud)
这将为该控件创建一个合适的访问器,不会公开控件的整个属性集.
Rob*_*per 20
我个人会建议不要这样做......如果它正在响应某种行为并且需要改变它的外观,我宁愿提出一个事件并让它自行解决......
形式之间的这种耦合总是让我感到紧张.我总是尽量保持用户界面尽可能轻松独立.
我希望这有帮助.也许你可以扩展这个场景,如果没有?
第一个当然不起作用.表单上的控件是私有的,仅在设计时可见.
让它全部公开也不是最好的方式.
如果我想向外界揭示某些东西(也可能意味着另一种形式),我会为它制作一个公共财产.
public Boolean nameOfControlVisible
{
get { return this.nameOfControl.Visible; }
set { this.nameOfControl.Visible = value; }
}
Run Code Online (Sandbox Code Playgroud)
您可以使用此公共属性隐藏或显示控件或询问控件当前可见性属性:
otherForm.nameOfControlVisible = true;
Run Code Online (Sandbox Code Playgroud)
您还可以公开完整控件,但我认为它太多了,您应该只在当前表单之外显示您真正想要使用的属性.
public ControlType nameOfControlP
{
get { return this.nameOfControl; }
set { this.nameOfControl = value; }
}
Run Code Online (Sandbox Code Playgroud)