我是整个winforms编程的新手。在一开始,似乎所有代码都结束了我是主要的表单类。所以我搜索了你如何在winforms应用程序中组织代码。
我现在正在尝试的一个解决方案是用户控件的界面的单独部分。
问题是我不确定控件和主窗体之间通信的最佳方式。例如。可以说我有一个形状绘图类型编辑应用程序。有一个主窗体和一个用户控件来绘制对象。主窗体包含对象。并且用户能够选择要编辑的对象,并且需要突出显示所选对象。因此,每次选择更改时,主窗体必须告诉显示控件现在选择了哪个对象。想象一下,如果我有几个用户控件需要知道主窗体中的状态信息。每次发生变化时,我都必须调用所有控件中的函数来让它们更新。因此,除了必须存储对所选对象的引用的主表单之外,所有控件也存储它。我必须确保它们全部更新。
我遇到的另一个问题是,我有一个用户控件,可以让你设置对象的属性,如大小或颜色。为了让主窗体知道属性发生了变化,我需要为每个可更改设置创建一个自定义事件,然后在文本框或复选框发生更改并将值传回时提升这些事件。这似乎是很多额外的工作。如果一切都在主表单上,那就容易多了。但那时主要的表格类将是一百万行。
我是否以错误的方式处理这一切?
答案 0 :(得分:3)
Rewinder是正确的,你应该使用事件和INotifyPropertyChanged来处理你所描述的场景中的所有通信。
此外,对于第二段中问题的部分,为什么要为每个设置烦恼?使用具有您自己的自定义参数的单个事件,以使事件的订阅者确切知道更改的内容。您仍然需要处理事件处理程序中的各种情况,但它肯定会简化事情。
答案 1 :(得分:1)
您可以将控件绑定到主窗体上的事件。然后,您可以从主窗体中提升该事件,并通知所有控件。
如果要使主表单知道更改对象中的属性,可以在对象上实现INotifyPropertyChanged接口。请参阅here。