我想从其父级运行 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();
}
最佳答案
在您的子表单中:
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
上现有的点击处理程序。
关于c# - 在 C# 中从父级运行子表单进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13152415/