gpt4 book ai didi

c# - 在 C# 中从父进程运行子表单进程

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:14 25 4
gpt4 key购买 nike

我想从其父级运行 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com