c# mdi主窗体的工具栏按钮 如何在不同的子窗体中使用

.Net技术 码拜 9年前 (2015-08-15) 1543次浏览
 

如题,
问题2,如何在子窗体中设置主窗体按钮的有效性,能做到吗?

#1

5分

可以,只要当前应用程序没有退出
#2

10分

1、C# MDI窗体工具栏合并子窗体工具栏
http://hi.baidu.com/helmsman88/item/fc0a3f0cfeb45ae3f55ba679
2、将主窗体按钮(或主窗体)作为子窗体构造函数的参数传进来,就可以控制了。
#3
因为都是对数据的操作(新增、修改、删除),所有子窗体都是用到这几个按钮,
所以子窗体我本身没添加工具栏,所有子窗体都共有MDI窗体的工具栏!
不存在合并的问题,这又要怎样处理?
#4

20分

通过焦点判断,获取当前sender
#5

40分

回复2楼:

很遗憾,我认为你没有理解面向对象的程序设计原则。如果是各种东西都耦合在一起可以不可以拼凑出代码来呢?当然能。但是如果你想与架构设计师在一起工作,那么还需要学习基本的原则。

#6

回复2楼:

这是非常基本的面向对象设计模式。我给你举个例子:

public interface IDrawFlowDiagrams
{
    void SetDatas(ObservableCollection<MyOrg> datas); //通知子窗体用此数据初始化界面
    void UpdateLayout();  //通知子窗体必须刷新一次

    event EventHandler HideButton1;  //子窗体告诉主窗体禁用按钮
    event EventHandler HideButton2;
    event EventHandler HideButton3;

    event EventHandler DisplayButton1;   //子窗体告诉主窗体启用按钮
    event EventHandler DisplayButton2;

    event EventHandler DatasChanged;  //子窗体告诉主窗体数据datas集合已经被它更新了

}

当你设计主窗体时,你不知道将来要设计哪些子窗体,但是你知道要跟子窗体按照这个接口来通讯!这就是设计!

上面的接口只是我随便编的。真正应该包括什么内容,你自己设计。但是关键是基于接口来进行设计的概念和意识要有!

#7

回复5楼:

我也想和架构设计师一起工作啊,但是又有多少真正的架构师呢,这种机会难遇啊。

#8
设计上在csdn我们在90%的时间里是跟各种错误的思路“周旋着”。浪费自己的时间是为了什么呢?因为不想看到招聘时越来越多的.net程序员连点概念都没学到就四处找工作。而更多的人看不起csdn,觉得它水平太低,不值得花时间在这里。

所以这个相互的,如果你看到有不到10%的帖子里有些正规的软件工程知识,应该把自己的变成习惯暂时忘掉,研究一下简洁实用的工程知识。

#9
lz的问题之所以提出,你仔细琢磨,那是因为他意识到工程上的困境,他一定是实际经验的。可惜没有软件工程设计基本知识,不知道基本的原则。

而当你回答说“将主窗体按钮(或主窗体)作为子窗体构造函数的参数传进来,就可以控制了”的时候,其实就是你没有意识这一点。

#10
在一个比较重要的项目中,如果你对设计师大叫“将主窗体按钮(或主窗体)作为子窗体构造函数的参数传进来啊!”的时候,我想对方想杀了你的心都有。不仅仅是技术上的问题,更主要地是,这种人往往就是暗中用代码毁坏产品的罪魁祸首。这种事情每出现一次就会加剧一次恶性循环,很快这个产品就成了高度耦合、诡异地相互牵制、无法复用的东西了。

你的子窗口就应该实现规定的接口,子窗口无需并且甚至也没有权利去纠结宿主调用者是监听 HideButton1 或者其它任何事件之后做什么,它应该为了产品架构做一份贡献——就是做好自己的事件通知工作而不是去操作人家调用者内部的什么控件。事实上,这也是给所谓子窗口免除了责任。

#11

5分

回复9楼:

确实是这样,在回答这个问题时,我确实没考虑到这么多。

#12

回复10楼:

能否给出一个稍微详细的例子的代码,我也正好需要实现类似功能,多谢!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c# mdi主窗体的工具栏按钮 如何在不同的子窗体中使用
喜欢 (0)
[1034331897@qq.com]
分享 (0)