为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
一只名叫tom的猫 2019-09-03 16:03:22
首先,这是一个关于使用Windows窗体的桌面应用程序的问题,而不是ASP.NET问题。我需要与其他表单上的控件进行交互。我试图通过使用,例如,以下来访问控件...otherForm.Controls["nameOfControl"].Visible = false;它不像我期望的那样工作。我最终抛出了一个例外Main。但是,如果我public而不是制作控件private,我可以直接访问它们,因为......otherForm.nameOfControl.Visible = false;但这是最好的方法吗?是否public将其他形式的控件视为“最佳实践”?是否有“更好”的方式访问另一种形式的控件?进一步说明:这实际上是我提出的另一个问题的后续问题,在C#中创建“树视图首选项对话框”类型的界面的最佳方法?。我得到的答案非常好,解决了许多很多组织问题,这些问题在保持用户界面简单易用的同时兼顾了运行时和设计时。然而,它确实提出了一个轻松控制界面其他方面的问题。基本上,我有一个根表单,它实例化了根表单中面板中的许多其他表单。因此,例如,其中一个子表单上的单选按钮可能需要更改主,根表单上的状态条图标的状态。在这种情况下,我需要子表单与父(根)表单的状态条中的控件进行通信。(我希望这是有道理的,而不是在“谁是第一个”的方式。)
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以创建一个控制其可见性的属性,而不是将控件公开:


public bool ControlIsVisible

{

     get { return control.Visible; }

     set { control.Visible = value; }

}

这将为该控件创建一个合适的访问器,不会公开控件的整个属性集。


查看完整回答
反对 回复 2019-09-03
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

第一个当然不起作用。表单上的控件是私有的,仅在设计时可见。


让它全部公开也不是最好的方式。


如果我想向外界揭示某些东西(也可能意味着另一种形式),我会为它制作一个公共财产。


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; }

}


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 626 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信