简单地将值从一种形式传递到另一种形式
本文关键字:一种 另一种 简单 | 更新日期: 2023-09-27 18:15:04
我试图在winforms中从一种形式传递值到另一种形式。
在我的主要形式,我有btnAddNewRecord和数据选项组合框。
用户应该首先从组合框(dataOptions)中选择,然后单击btnAddNewRecord。我想把这个用户选择的值从数据选项组合框传递到新的表单,所以我尝试这样做
MainForm
private void btnAddNewRecord_Click(object sender, EventArgs e)
{
var formAddRecord = new FormNewRecord();
formAddRecord.ShowDialog();
}
private void Form1_Load()
{ populating combobox...}
private void dataOptions_SelectedIndexChanged(object sender, EventArgs e)
{
IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem;
var formAddRecord = new FormNewRecord();
formAddRecord.SelectedDataOptions = data.ToString();
}
FormNewRecord.cs
public string SelectedDataOptions {get; set;}
private void FormNewRecord_Load(,,,,,)
{
txtSelectedDataOptions.Text = SelectedDataOptions;
}
在构建时没有错误,但在调试时txtSelectedDataOptions没有填充传递的值。我哪里做错了?
谢谢
您正在创建FormNewRecord
的两个不同实例。设置formAddRecord
为私有字段,并在按钮点击时显示。
FormNewRecord formAddRecord = new FormNewRecord();
private void btnAddNewRecord_Click(object sender, EventArgs e)
{
formAddRecord.ShowDialog();
}
private void dataOptions_SelectedIndexChanged(object sender, EventArgs e)
{
IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem;
formAddRecord.SelectedDataOptions = data.ToString();
}
formAddRecord应该是类的私有字段,而不是在每个方法中重新声明的var !
(方法btnAddNewRecord_Click
不知道方法dataOptions_SelectedIndexChanged
中声明的变量,通过创建不同的实例的方式)。
private FormNewRecord formNewRecord_ = new FormNewRecord();
private void btnAddNewRecord_Click(object sender, EventArgs e)
{
formNewRecord_ .ShowDialog();
}
private void Form1_Load()
{ populating combobox...}
private void dataOptions_SelectedIndexChanged(object sender, EventArgs e)
{
IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem;
formNewRecord_.SelectedDataOptions = data.ToString();
}
我不认为新的一个表单实例在另一个表单是一个好方法,一个更好的方法,你可以设置你想传递的数据在父窗体作为公共,当你显示子窗体,设置父窗体作为子的所有者,然后你可以获得和使用子窗体中的数据。
- 将数据设置为父窗体中的公共属性,如下所示:
主窗体:
public string passData = "";
private void btnAddNewRecord_Click(object sender, EventArgs e)
{
var formAddRecord = new FormNewRecord();
formAddRecord.ShowDialog(this); //important
}
private void Form1_Load()
{ populating combobox...}
private void dataOptions_SelectedIndexChanged(object sender, EventArgs e)
{
IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem;
passData = data.ToString(); //store the selected value to passData
}
2。从子节点的所有者那里获取数据:
FormNewRecord.cs
private void FormNewRecord_Load(,,,,,)
{
if(this.Owner != null)
{
MainForm mf = (MainForm)this.Owner;
txtSelectedDataOptions.Text = mf.passData;
}
}