gpt4 book ai didi

c# - 如何在 C# 中将数据从子窗体的子窗体传递到父窗体?

转载 作者:行者123 更新时间:2023-11-30 20:39:51 24 4
gpt4 key购买 nike

我是 C# 的新手。我的 Windows 窗体项目中有以下内容:

带有按钮和 DataGridView 的 Form1。

带按钮的 Form2。

带有按钮和 3 个文本框的 Form3。

screenshot

如截图所示 在form1中,我点击buttonOpenForm2弹出form2。然后在 form2 中我单击 buttonOpenForm3 form3 弹出,其中有 3 个文本框和按钮。现在这 3 个表格都打开了。

我在 textBox1、textBox2 和 textBox3 中输入值,当单击 buttonAddRow(来自 form3)时,我希望将这些值插入到 Form1 中的 DataGRidView 中。

我的问题是:如何在不关闭 form2 和 form3 的情况下从 form3(子窗体的子级)向 Form1(父级)的 DataGridView 添加一行?我的意思是我想在 form2 和 form3 仍然打开时传递数据。

请帮帮我。谢谢

表格 1:

public partial class Form1 : Form
{


public Form1()
{
InitializeComponent();

}

private void buttonOpenForm2 _Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show();
}

}

表格 2:

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void buttonOpenForm3 _Click(object sender, EventArgs e)
{
Form3 frm3 = new Form3();
frm3.Show();
}
}

Form3:

 public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}

private void buttonAddRow _Click(object sender, EventArgs e)
{
//What to write here to insert the 3 textboxes values into DataGridView?

}
}

最佳答案

您不能期望获得可以粘贴的完整代码。我很快在记事本中写下了这个,让您了解事件在这种情况下如何发挥最佳作用。我假设 Form1 直接打开 Form3。下面的解决方案显示了如何使用事件。

你的家庭作业是通过在两者之间添加另一个表单 Form2 来使其工作。您可以通过位于中间的 Form2 传播相同的事件来做到这一点。

Form3.cs

public partial class Form3 : Form
{
public event EventHandler<AddRecordEventArgs> RecordAdded

public Form3()
{
InitializeComponent();
}

private void buttonAddRow _Click(object sender, EventArgs e)
{
OnRecordAdded();
}

private void OnRecordAdded() {
var handler = RecordAdded;
if(RecordAdded != null) {
RecordAdded.Invoke(this, new AddRecordEventArgs(txtQty.Text, txtDesc.Text, txtPrice.Text))
}
}
}

添加记录事件参数.cs

public class AddRecordEventArgs : EventArgs
{
public AddRecordEventArgs(string qty, string desc, string price) {
Quantity = qty;
Description = desc;
Price = price;
}

public int Quantity { get; private set; }
public string Description { get; private set; }
public decimal Price { get; private set; }
}

Form1.cs

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void buttonOpenForm3_Click(object sender, EventArgs e)
{
Form3 frm3 = new Form3();
frm3.RecordAdded += Form3_RecordAdded;
frm3.Show();
}

private void Form3_RecordAdded(object sender, AddRecordEventArgs e) {
// Access e.Quantity, e.Description and e.Price
// and add new row in grid using these values.
}
}

关于c# - 如何在 C# 中将数据从子窗体的子窗体传递到父窗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942937/

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