1

我试图在winforms中将值从一种形式传递到另一种形式。

在我的主窗体上,我有 btnAddNewRecord 和 dataOptions 组合框。

用户应首先从组合框(dataOptions)中进行选择,然后单击 btnAddNewRecord。我想将此用户选择的值从 dataoptions 组合框中传递给新表单,所以我尝试了这样

主窗体

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

谢谢

4

3 回答 3

3

好吧,formAddRecord 应该是你的类的私有字段,而不是在每个方法中重新声明的 var !

(通过创建不同实例的方式, MethodbtnAddNewRecord_Click没有在 Method 中声明的变量的想法)。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();        
}
于 2013-05-24T09:59:37.173 回答
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();
}
于 2013-05-24T09:59:16.213 回答
0

我不认为在另一个表单中新建一个表单实例是一个好方法,一个更好的方法是您可以在父表单中将要传递的数据设置为公开,当您显示子表单时,将父表单设置为子表单所有者,那么您可以获取和使用子窗体中的数据。

  1. 将数据设置为父窗体中的公共属性,如下所示:
    主窗体:

    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;
   }
}
于 2013-05-24T12:49:10.667 回答