我正试图在winforms中将值从一种形式传递到另一种形式。
在我的主表单上,我有btnAddNewRecord和dataOptions组合框。
用户应首先从组合框(dataOptions)中选择,然后单击btnAddNewRecord。 我想将这个用户选择的值从dataoptions组合框传递给新表单,所以我尝试了这个
的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没有填充传递的值。我在这里做错了什么?
由于
答案 0 :(得分:3)
您正在创建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();
}
答案 1 :(得分:3)
嗯,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();
}
答案 2 :(得分:0)
我不认为新的表单实例在另一种形式中是一种好方法,更好的方法是您可以在父表单中设置要作为公共传递的数据,并在显示子表单时设置父表单作为孩子的所有者,您可以获取并使用子表单中的数据。
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.get传递来自孩子所有者的数据:
FormNewRecord.cs
private void FormNewRecord_Load(,,,,,)
{
if(this.Owner != null)
{
MainForm mf = (MainForm)this.Owner;
txtSelectedDataOptions.Text = mf.passData;
}
}