繁体   English   中英

在C#中将Winform的私有UI组件访问到另一个类中

[英]accessing Winform`s private UI Component into another class in C#

我有WinForm,它是基于选项卡的,包括所有选项卡,它具有大约60个UI组件。 根据某些UI组件中选择的值,我会自动填充其余UI组件。为此, 我想编写一个帮助器类。但是问题是如果我将Winform对象传递给该类,则无法访问该类上的值表单,因为所有成员都被宣布为私有。

一种可能的解决方案是,我可以在Winform中编写大约60个属性,但是我认为这不是最好的方法。 我想知道处理此类问题的最佳方法是什么?

您可以将UI组件的修饰符从private更改为internal 这将允许同一项目中的所有类直接访问组件。

但是,我认为通过属性公开必要的组件比公开/内部公开它们是一种更好的设计。 我承认它包含相当多的键入内容,但是这样做更安全,因为您可以使用特定于您的用例的方式清晰地公开它们。

话虽这么说-我会考虑几件事:

  1. 是否可以通过使用UserControls使用更少的组件将其重构为较小的类? 这可能使其更易于管理,并促进重用。 60个UI元素对于单个屏幕来说是相当可观的。
  2. 您可以重构它来传递数据,而不是尝试直接使用控件吗? 例如,您可以通过共享界面自动填充数据,然后数据将控件绑定到数据或类似的东西。

您可以将WinForm的成员声明为受公共保护的,受保护的内部和内部成员。 您可以在特定组件的属性窗口中执行此操作(转到“修饰符”属性),也可以在表单的设计器中更改它们(它们在“ Windows表单设计器生成的代码”之后声明)。

如果您不想公开成员,也不希望提供属性或方法来获取该信息,那么您剩下的就是尝试通过反射来获取值,这可能是所有这三种方法中最糟糕的选择。

最好的解决方案是为每个私有成员设置属性并以这种方式公开它们。

一种解决方法是创建一个包含要绑定到的所有数据的类(例如,实现INotifyPropertyChanged的类)。

然后在WinForm和另一个类之间共享此实例。 瞧!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM