当前位置: 代码迷 >> C# >> 两个按钮打开同一窗体,回到不同值写法
  详细解决方案

两个按钮打开同一窗体,回到不同值写法

热度:77   发布时间:2016-05-05 05:02:48.0
两个按钮打开同一窗体,返回不同值写法
菜鸟 刚开始 学习C# 有个问题,是关于 一个页面 有两个按钮, 打开同一个窗口,返回不同的值的问题。
如果这样写:
  //供应商选择——采购单
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            gys1 = new GGCT_XZGYS();
            gys1.Closed += new EventHandler(gys_Closed);
            gys1.ShowDialog();
        }
        //供应商选择——采购明细
        private void button12_Click(object sender, RoutedEventArgs e)
        {
            gys2 = new GGCT_XZGYS();
            gys2.Closed += new EventHandler(gys_Closed);
            gys2.ShowDialog();//dialog作用 该页不关闭 不能操作上一级页面。
        }

        //关闭供应商选择,获取供应商信息
        private void gys_Closed(object sender, EventArgs e)//供应商
        {
            if (gys1.DialogResult == true)
            {
                this.textBlock2.Text = gys1.gysbh;
                this.textBlock1.Text = gys1.gysmc;

            }
            else if (gys2.DialogResult == true)
            {
                this.textBlock12.Text = gys2.gysbh;
                this.textBlock11.Text = gys2.gysmc;

            }
        }

当 点击button12 时,返回的 信息 就会报错;

如果这样写:
         //供应商选择——采购单
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            gys1 = new GGCT_XZGYS();
            gys1.Closed += new EventHandler(gys_Closed);
            gys1.ShowDialog();
        }
        //供应商选择——采购明细
        private void button12_Click(object sender, RoutedEventArgs e)
        {
            gys2 = new GGCT_XZGYS();
            gys2.Closed += new EventHandler(gys_Closed1);
            gys2.ShowDialog();//dialog作用 该页不关闭 不能操作上一级页面。
        }

        //关闭供应商选择,获取供应商信息
        private void gys_Closed(object sender, EventArgs e)//供应商
        {
            if (gys1.DialogResult == true)
            {
                this.textBlock2.Text = gys1.gysbh;
                this.textBlock1.Text = gys1.gysmc;

            }
            //else if (gys2.DialogResult == true)
            //{
            //    this.textBlock12.Text = gys2.gysbh;
            //    this.textBlock11.Text = gys2.gysmc;

            //}
        }

        private void gys_Closed1(object sender, EventArgs e)//供应商明细
        {
            if (gys2.DialogResult == true)
            {
                this.textBlock12.Text = gys2.gysbh;
                this.textBlock11.Text = gys2.gysmc;
            }
        }

分开了, 就正常,不会出现返回值报错的情况,,请问 问题出在哪里?
可以写在一起么?如果可以应该怎么改?
谢谢!
------解决思路----------------------
引用:
这样写一个switch,case分支语句就行了
否则2个按钮还好说,如果有100个按钮,你得写100个if,else


怎么能被楼主的代码误导呢~~
private void gys_Closed(object sender, EventArgs e)//供应商
{
    GGCT_XZGYS gys = sender as GGCT_XZGYS;
    if (gys!= null && gys.DialogResult == true)
    {
        this.textBlock2.Text = gys.gysbh;
        this.textBlock1.Text = gys.gysmc;
    }
}
------解决思路----------------------

        //供应商选择——采购单
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            gys1 = new GGCT_XZGYS();
            gys1.ShowDialog();
            this.textBlock2.Text = gys1.gysbh;
            this.textBlock1.Text = gys1.gysmc;
        }
        //供应商选择——采购明细
        private void button12_Click(object sender, RoutedEventArgs e)
        {
            gys2 = new GGCT_XZGYS();
            gys2.ShowDialog();//dialog作用 该页不关闭 不能操作上一级页面。
            this.textBlock12.Text = gys2.gysbh;
            this.textBlock11.Text = gys2.gysmc;
        }

这样写不是更简单,而且不会出错?
------解决思路----------------------
哦,明白了
看来你还是需要在弹出的窗体里定义一个public int型的变量,比如叫public int ButtonNumber=0;
然后button2里

private void button2_Click(object sender, RoutedEventArgs e)
        {
            GGCT_XZGYS gys = new GGCT_XZGYS();
            gys.ButtonNumber=2;
            gys.Closed += new EventHandler(gys_Closed);
            gys.ShowDialog();
        }

button12里把它设置成12.
取值:

private void gys_Closed(object sender, EventArgs e)//供应商
{
    GGCT_XZGYS gys = sender as GGCT_XZGYS;
    if (gys!= null && gys.DialogResult == true)
    {
       switch(gys.ButtonNumber)
{
case 2:
        this.textBlock2.Text = gys.gysbh;
        this.textBlock1.Text = gys.gysmc;
break;
case 12:
        this.textBlock12.Text = gys.gysbh;
        this.textBlock11.Text = gys.gysmc;
break;
}
    }
}
  相关解决方案