1,创建一个父窗口,添加一个button(为了弹出子窗口),一个label(内容能够被子窗口修改)
2,创建一个子窗口一个button按钮(修改父窗口label)
3,现在想要打开副对话框之后点击button,弹出子对话框,点击子对话框上的button副对话框上的Lalbel值被修改。
请问能不能使用委托来做,请看看我做了之后为什么点击了子窗口的button之后,父窗口label值没有立即显示出来。使用调试看是被修改了:父窗口代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Delegate_09_7_10
{
public partial class Form1 : Form
{
public delegate double mutilpydelegate(double p1, double p2);
public double m1(double p1, double p2)
{
return p1 * p2;
}
public double m2(double p1, double p2)
{
return p1 / p2;
}
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
mutilpydelegate mdele1 = new mutilpydelegate(m1);
mutilpydelegate mdele2 = new mutilpydelegate(m2);
label1.Text = mdele1(10,20).ToString();
}
public void changelable1Text()
{
mutilpydelegate mdele1 = new mutilpydelegate(m1);
mutilpydelegate mdele2 = new mutilpydelegate(m2);
label1.Text = mdele1(10, 20).ToString();
} private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
} private void button3_Click(object sender, EventArgs e)
{
changelable1Text();
}
}
}
子窗口代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Delegate_09_7_10
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.changelable1Text();
}
}
}
为什么调试模式能看到label值发生了变化却没有立即显示出?
2,创建一个子窗口一个button按钮(修改父窗口label)
3,现在想要打开副对话框之后点击button,弹出子对话框,点击子对话框上的button副对话框上的Lalbel值被修改。
请问能不能使用委托来做,请看看我做了之后为什么点击了子窗口的button之后,父窗口label值没有立即显示出来。使用调试看是被修改了:父窗口代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Delegate_09_7_10
{
public partial class Form1 : Form
{
public delegate double mutilpydelegate(double p1, double p2);
public double m1(double p1, double p2)
{
return p1 * p2;
}
public double m2(double p1, double p2)
{
return p1 / p2;
}
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
mutilpydelegate mdele1 = new mutilpydelegate(m1);
mutilpydelegate mdele2 = new mutilpydelegate(m2);
label1.Text = mdele1(10,20).ToString();
}
public void changelable1Text()
{
mutilpydelegate mdele1 = new mutilpydelegate(m1);
mutilpydelegate mdele2 = new mutilpydelegate(m2);
label1.Text = mdele1(10, 20).ToString();
} private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
} private void button3_Click(object sender, EventArgs e)
{
changelable1Text();
}
}
}
子窗口代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Delegate_09_7_10
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.changelable1Text();
}
}
}
为什么调试模式能看到label值发生了变化却没有立即显示出?
{
Form1 f1 = new Form1();
f1.changelable1Text();
} 你创建了一个新窗体..
private void button1_Click(object sender, EventArgs e)
{
Form _Form =Application.OpenForms["Form1"];
if(_Form!=null)
{
Form1 _Form1 =(Form1)_Form;
_Form1.changelable1Text();
}
} 改成这样看看.
private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this);
f2.ShowDialog();
} public partial class Form2 : Form
{
private Form1 m_Form1
public Form2(Form1 p_Form)
{
InitializeComponent();
m_Form1=p_Form;
} private void button1_Click(object sender, EventArgs e)
{
if(m_Form1!=null) m_Form1.changelable1Text();
}
}
给你个例子
假设这两个窗体为MainForm,EditForm:
MainForm: EditForm f = new EditForm();
f.Owner = this;
f.ShowDialog(); 并提供一个公开的刷新方法:
public void RefreshXXX()
{
} EditForm:
在保持完成准备关闭前,调用:
MainForm f = (MainForm)Owner;
f.RefreshXXX();
Close(); 这是比较简单的一种方式
给你个例子
假设这两个窗体为MainForm,EditForm:
MainForm: EditForm f = new EditForm();
f.Owner = this;
f.ShowDialog(); 并提供一个公开的刷新方法:
public void RefreshXXX()
{
} EditForm:
在保持完成准备关闭前,调用:
MainForm f = (MainForm)Owner;
f.RefreshXXX();
Close(); 这是比较简单的一种方式
给你个例子
假设这两个窗体为MainForm,EditForm:
MainForm: EditForm f = new EditForm();
f.Owner = this;
f.ShowDialog(); 并提供一个公开的刷新方法:
public void RefreshXXX()
{
} EditForm:
在保持完成准备关闭前,调用:
MainForm f = (MainForm)Owner;
f.RefreshXXX();
Close(); 这是比较简单的一种方式