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

本文关键字:另一个 访问 组件 Winform UI | 更新日期: 2023-09-27 17:49:44

我有WinForm,这是一个标签为基础,包括所有的标签,它有大约60个UI组件。根据在一些UI组件中选择的值,我自动填充其余的UI组件。对于这个,我想写一个助手类。但问题是,如果我传递Winform对象到该类,我无法访问该窗体上的值,因为所有成员都声明为私有。

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

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

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

然而,我认为通过属性公开必要的组件比公开/内部公开它们是更好的设计。我承认它包含了相当数量的类型,但是它更安全,因为您可以以特定于您的用例的方式干净地公开它们。

话虽如此,我还是会考虑以下几点:

  1. 可以重构成一个更小的类,使用更少的组件使用UserControls吗?这可能使其更易于管理,并促进重用。对于一个屏幕来说,60个UI元素是相当多的。
  2. 你能重构这传递数据,而不是试图与控制直接工作?例如,您可以通过共享接口自动填充数据,并将控件绑定到数据,或者类似的东西。

您可以将WinForm的成员声明为public protected, protected internal和internal。您可以在特定组件的属性窗口中(转到Modifiers属性)或在窗体的设计器中更改它们(它们在"Windows窗体设计器生成代码"之后声明)。

如果您不想将成员设为public,也不想设置属性或方法来获取该信息,那么您只能尝试通过反射来获取值,这可能是所有三种选择中最糟糕的一种。

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

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

然后在WinForm和其他类之间共享这个实例。瞧!