猿问

在Windows窗体中访问另一个窗体上的控件的最佳方法?

首先,这是一个关于使用Windows窗体的桌面应用程序的问题,而不是ASP.NET问题。


我需要与其他表单上的控件进行交互。我试图通过使用,例如,以下来访问控件...


otherForm.Controls["nameOfControl"].Visible = false;

它不像我期望的那样工作。我最终抛出了一个例外Main。但是,如果我public而不是制作控件private,我可以直接访问它们,因为......


otherForm.nameOfControl.Visible = false;

但这是最好的方法吗?是否public将其他形式的控件视为“最佳实践”?是否有“更好”的方式访问另一种形式的控件?


进一步说明:


这实际上是我提出的另一个问题的后续问题,在C#中创建“树视图首选项对话框”类型的界面的最佳方法?。我得到的答案非常好,解决了许多很多组织问题,这些问题在保持用户界面简单易用的同时兼顾了运行时和设计时。然而,它确实提出了一个轻松控制界面其他方面的问题。


基本上,我有一个根表单,它实例化了根表单中面板中的许多其他表单。因此,例如,其中一个子表单上的单选按钮可能需要更改主,根表单上的状态条图标的状态。在这种情况下,我需要子表单与父(根)表单的状态条中的控件进行通信。(我希望这是有道理的,而不是在“谁是第一个”的方式。)


一只名叫tom的猫
浏览 651回答 3
3回答

富国沪深

您可以创建一个控制其可见性的属性,而不是将控件公开:public bool ControlIsVisible{     get { return control.Visible; }     set { control.Visible = value; }}这将为该控件创建一个合适的访问器,不会公开控件的整个属性集。

慕的地6264312

第一个当然不起作用。表单上的控件是私有的,仅在设计时可见。让它全部公开也不是最好的方式。如果我想向外界揭示某些东西(也可能意味着另一种形式),我会为它制作一个公共财产。public Boolean nameOfControlVisible{    get { return this.nameOfControl.Visible; }    set { this.nameOfControl.Visible = value; }}您可以使用此公共属性隐藏或显示控件或询问控件当前可见性属性:otherForm.nameOfControlVisible = true;您还可以公开完整控件,但我认为它太多了,您应该只在当前表单之外显示您真正想要使用的属性。public ControlType nameOfControlP{    get { return this.nameOfControl; }    set { this.nameOfControl = value; }}
随时随地看视频慕课网APP
我要回答