我想从其父级运行MDI子级。例如,我在子表单中有3个文本框。我想在前两个文本框中添加两个值,并在第三个文本框中写入结果。我想在父表单上有一个按钮(让我们称之为运行按钮)为我这样做。此外,我有其他子表单进行其他计算,所以我希望运行按钮的行为符合焦点形式。有谁知道我应该怎么做?
我已经在每个子窗体中编写了一个方法来进行计算,我在父窗体的运行按钮中调用此方法,但是这不识别子窗体文本框的值(即null)。如果有人可以帮助我,那将是非常棒的。
由于
代码非常简单 我在子窗体中有三个文本框,前两个中有用户输入值,我想单击父窗体上的运行按钮,子窗体中第三个文本框的值变为值的总和。前两个文本框。我在子表单中有这个方法,我可以从父表单中调用它,但它不起作用
public void AddValues()
{
double a = double.Parse(textBox1.Text);
double b = double.Parse(textBox2.Text);
textBox3.Text = (a + b).ToString();
}
在父母表格中我有
private void button1_Click(object sender, EventArgs e)
{
ChildFrom child = new ChildFrom();
child.AddValues();
}
答案 0 :(得分:2)
以您的孩子形式:
public void AddValues() //add error handling
{
double a = double.Parse(textBox1.Text);
double b = double.Parse(textBox2.Text);
textBox3.Text = (a + b).ToString();
}
在您的父表单中,您必须在要打开的子表单的同一实例上调用AddValues
。换句话说,以父母形式:
public partial class ParentForm : Form
{
ChildForm _cF; //member field
public ParentForm()
{
InitializeComponent();
}
private void OpenChildForm() //this is how you should open the form
{ //call this function in whichever event
_cf = new ChildForm(); //you are opening the child form.
_cf.Show();
}
private void button1_Click(object sender, EventArgs e)
{
//please remove these lines, its wrong!
//ChildFrom child = new ChildFrom();
//child.AddValues();
//do this instead:
_cf.AddValues();
}
}
这里的关键是对子表单的同一个实例进行操作。如果您需要它,请将其作为父表单中的成员字段。
修改强> 如果你不想将子形式变成成员变量,那么你可以依赖C#中的闭包。
以父母形式:
private void OpenChildForm()
{
ChildForm cf = new ChildForm();
cf.Show();
btnRun.Clicked -= OnRunButtonClicked(cf); //important - to avoid multiple-
btnRun.Clicked += OnRunButtonClicked(cf); //handlers getting attached.
}
private EventHandler OnRunButtonClicked(ChildForm cf)
{
return (sender, e) => cf.AddValues();
}
注意从初始化部分删除btnRun
上的现有点击处理程序。