从一种形式到另一种形式的简单传递值

时间:2013-05-24 09:56:12

标签: c# .net winforms

我正试图在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没有填充传递的值。我在这里做错了什么?

由于

3 个答案:

答案 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)

我不认为新的表单实例在另一种形式中是一种好方法,更好的方法是您可以在父表单中设置要作为公共传递的数据,并在显示子表单时设置父表单作为孩子的所有者,您可以获取并使用子表单中的数据。

  1. 将数据设置为父表单中的公共属性,如下所示:
    主表单:
  2. 
        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;
       }
    }