请问如何对所有窗体做一些相同的操作?

leon51 2017-12-12 10:17:44
我做了一个WinForm程序练手,大概20多个窗体。由于没有经验,所有窗体直接继承自Form类。现在我想对所有的窗体做一些操作,比如换肤。

可能正确的做法是应该是创建自己的基类窗体,然后所有窗体派生自此窗体。(不知道有没有说错)。
请问现在能怎么做呢?
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon51 2017-12-14
  • 打赏
  • 举报
回复
引用
你自己的“所有窗体”,这当然可以很轻松地说“基类窗体”,你想要弄一个基类就随时可以弄一个基类。 但是回到“对所有窗口做一些相同的操作”来说,其实抽象或者暂时不抽象,都是可以的,要看你要做的各种操作的复杂程度而定,而且可以随时重构。抽象对于不熟练抽象的人,理解和使用起来更慢。因此通常首先不考虑抽象,然后当过了几个月之后才重构“基类窗口”出来,这是常有的事情。换肤工具通常都是注入式的,因此假设原来你有基类窗口则直接在基类窗口执行操作,如果没有基类窗口则写一个 static 方法然后在每一个窗口类的实例化方法中调用它也是快速解决问题的做法。 通常遇到“请问现在能怎么做呢?”这个问题时,应该首先考虑快速实践,而非理论。然后当有功夫时,再考虑理论,进行重构。
非常感谢你的回复,使用静态方法勉强能够理解,可是“重构“基类窗口””还得花点心思琢磨下
  • 打赏
  • 举报
回复
你自己的“所有窗体”,这当然可以很轻松地说“基类窗体”,你想要弄一个基类就随时可以弄一个基类。 但是回到“对所有窗口做一些相同的操作”来说,其实抽象或者暂时不抽象,都是可以的,要看你要做的各种操作的复杂程度而定,而且可以随时重构。抽象对于不熟练抽象的人,理解和使用起来更慢。因此通常首先不考虑抽象,然后当过了几个月之后才重构“基类窗口”出来,这是常有的事情。换肤工具通常都是注入式的,因此假设原来你有基类窗口则直接在基类窗口执行操作,如果没有基类窗口则写一个 static 方法然后在每一个窗口类的实例化方法中调用它也是快速解决问题的做法。 通常遇到“请问现在能怎么做呢?”这个问题时,应该首先考虑快速实践,而非理论。然后当有功夫时,再考虑理论,进行重构。
  • 打赏
  • 举报
回复
没有基础的抽象设计都是标题党,所以“做一些相同的操作”其实也不应该是标题党,必须是有多个基础、做过基础才知道该如何设计。
  • 打赏
  • 举报
回复
这取决于你的“换肤”是什么真正的机制,才可能知道“可以如何”开发。假设它的机制是捕获事件的 Adapter 机制,那么你当然可以不写什么“父类Form”啦;假设只是 override 方式,那么你当然必须写父类Form啦。
threenewbee 2017-12-12
  • 打赏
  • 举报
回复
可以写在基类,也可以用application.openforms遍历

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧