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

本文关键字:一种 另一种 简单 | 更新日期: 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();        
}

我不认为新的一个表单实例在另一个表单是一个好方法,一个更好的方法,你可以设置你想传递的数据在父窗体作为公共,当你显示子窗体,设置父窗体作为子的所有者,然后你可以获得和使用子窗体中的数据。

  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;
   }
}