当前位置: 代码迷 >> C# >> C# winform, 如果在一个窗口中改写另一个窗口中按钮的效能
  详细解决方案

C# winform, 如果在一个窗口中改写另一个窗口中按钮的效能

热度:402   发布时间:2016-05-05 02:54:37.0
C# winform, 如果在一个窗口中改写另一个窗口中按钮的功能?
假设两个窗口,窗口B上有一个按钮1.
我想要实现的是在窗口A上实例化调用窗口B,并且第一次调用B时按钮1的单击功能是关闭窗口B,第二次调用时B按钮1的单击功能是弹出一个对话框,第三次调用B时是按钮1又是不同于前两种的其他功能。请问有这个有可能实现吗?谢谢。
------解决思路----------------------
完全可以,B里面设一个私有变量x,重写或加一个构造函数,A实例化B的时候在构造函数中传一个值,值可以是枚举,你不用枚举也无所谓,用数字也行,B实例化时通过构造函数将A传来的值赋值给变量x,然后B里的按钮根据该变量判断到底是干什么,这样就行了。
在A里面传入到B构造函数的变量,应该是在B每实例化一次就变化一次,这个你设计起来很简单的。
------解决思路----------------------
你可以在B窗体上公开一个委托EventHandler ClickHandler
然后B的点击事件
if(this.ClickHandler != null)
{
         this.ClickHandler(this.btnB, null);
}

A窗体中,注册一下事件处理就好 frmB.ClickHandler = (obj, evt) => MsgBox(来自A窗体); frmB.Show();
------解决思路----------------------

public partial class A : Form
{
    private void button_Click(object sender, EventArgs e)
    {
        //下面你可以根据你的要求将委托事件传给B的按钮
B b = new B(new EventHandler((a, b) => ((Button)a).FindForm().Close()));//关闭窗体
//B b = new B(new EventHandler((a, b) => MessageBox.Show(""))); 弹出对话框
        b.show();
    }
}
 
public partial class B : Form
{
    public B(EventHandler clickEvent)
    {
        InitializeComponent();
        button.Click += clickEvent; //传入代理方法
    }
}

------解决思路----------------------
不管你怎么设计前端界面,在核心的骨架架构部分(也就是最基本的“哪一个部分应该承担哪些职责”部分)你可能都需要自己心里有点“准儿”。因为这个部分容易南辕北辙,这个东西才会因为小错而浪费几十倍的力气。

你在问题中写“如何在一个窗口中改写另一个窗口中按钮的功能”,立刻就会误导一些人去生硬地拼凑代码,而不能理解你的深层次的困扰。因此提问题的方式,很重要。
  相关解决方案