菜鸟 刚开始 学习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;
}
}
分开了, 就正常,不会出现返回值报错的情况,,请问 问题出在哪里?
可以写在一起么?如果可以应该怎么改?
谢谢!
------解决思路----------------------

怎么能被楼主的代码误导呢~~
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;
}
}
}