c# 不同窗体 同功能按钮
比如窗体A有一个按钮执行一个功能,这个功能我是在A中写了一个函数,里面包括程序执行之前的初始化,设置timer之类的东西.然后现在在另一个Anew出来的窗口B中,点击一个...
比如窗体A有一个按钮执行一个功能,这个功能我是在A中写了一个函数,里面包括程序执行之前的初始化,设置timer之类的东西.然后现在在另一个A new出来的窗口B中,点击一个按钮,也要执行那个功能(而且那个功能使用的空间在窗口A中.)......我知道这个貌似画蛇添足.但是人家需要,我没办法.....我试着把函数public 了一下,但是不对,估计是里面存在timer之类的. 用代理之类的只能传值,这个是一个命令(我看到现在是这样,如果可以实现,请告诉我). 是不是可以设置什么东西,使得窗体A中的按钮自己执行一下点击功能?
展开
2个回答
展开全部
十分不理解你的意思!我可能老了,真看不懂你说些什么了!
根据面向设计的特点,如果两个窗体中的两个按钮要执行相同的事件,那么可以将这两个相同的事件提升为父对象中即可!
比如A中某一按钮实现一个特殊功能,而B中按钮实现相同功能。那么应该将这个功能提升到两个对象的共同父对象中即可!
比如你可以先写一个抽象对象abstractForm继承于Form,如果两者均有计时器,就在这个对象中添加计时器,写相关的代码即可!
可能会在父对象中声明相同的事件
public void Common_Click(object sender, EventArgs e)
{
//do something in here;
}
然后由A继承于AbstractForm,某个按钮,比如BtnOK,则在设计器中或是构造函数中添加
this.BtnOK.Click += New EventHandler(Common_Click)即可。
如果两个界面中按钮其他设计也一样,——干脆把按钮也提到父对象中。
当然这种写事件的方式还是会造成高度耦合的——继承本来就是一种强耦合关系。那么你可以在父对象中声明一个委托,然后调用——听起来比较熟悉是吧?其实这就是WPF开始中命令体系所使用的模式,只不过命令模式还要复杂一些,以实现更强大的功能。
如果是一个非常小的问题:这样解决显然有点大材小用。那么使用关联对象或是依赖注入也是一种好事。
public static class Common
{
public static void Comm_Click(object sender, EventArgs e)
{
//do something in here;
}
}
在A窗体中可以使用BTN.Click += new EventHandler(Common.Comm_Click);这种将对象注入的方式其实也只是解决继承中强耦合关系的脱耦处理而已。
所以,一般这种情况下,你必须想到提升代码到父类进行重构——友元的方式是会破坏封装的!
根据面向设计的特点,如果两个窗体中的两个按钮要执行相同的事件,那么可以将这两个相同的事件提升为父对象中即可!
比如A中某一按钮实现一个特殊功能,而B中按钮实现相同功能。那么应该将这个功能提升到两个对象的共同父对象中即可!
比如你可以先写一个抽象对象abstractForm继承于Form,如果两者均有计时器,就在这个对象中添加计时器,写相关的代码即可!
可能会在父对象中声明相同的事件
public void Common_Click(object sender, EventArgs e)
{
//do something in here;
}
然后由A继承于AbstractForm,某个按钮,比如BtnOK,则在设计器中或是构造函数中添加
this.BtnOK.Click += New EventHandler(Common_Click)即可。
如果两个界面中按钮其他设计也一样,——干脆把按钮也提到父对象中。
当然这种写事件的方式还是会造成高度耦合的——继承本来就是一种强耦合关系。那么你可以在父对象中声明一个委托,然后调用——听起来比较熟悉是吧?其实这就是WPF开始中命令体系所使用的模式,只不过命令模式还要复杂一些,以实现更强大的功能。
如果是一个非常小的问题:这样解决显然有点大材小用。那么使用关联对象或是依赖注入也是一种好事。
public static class Common
{
public static void Comm_Click(object sender, EventArgs e)
{
//do something in here;
}
}
在A窗体中可以使用BTN.Click += new EventHandler(Common.Comm_Click);这种将对象注入的方式其实也只是解决继承中强耦合关系的脱耦处理而已。
所以,一般这种情况下,你必须想到提升代码到父类进行重构——友元的方式是会破坏封装的!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |