获取ComboBox选择的值Form Form1到另一个Form2

时间:2014-11-24 15:27:13

标签: c# winforms combobox

我有一个C#windows应用程序,它有两个表单Form1,它是主要表单和Form2。 Form1上有一个组合框,Form2有一个文本框。

我想将Form1.ComboBox1中选择的值放入Form2.TextBox1。

我正在尝试这个:

        Form1 Form1Object = new  Form1();
        string fff = Form1Object.ComboBox1.SelectedItem.ToString(); //not working
        TextBox1.Text = fff;

问题是,当我运行此Form1时,重新初始化并且我不想这样做。 (当应用程序启动时,我有一个闪屏,所以当我运行我的代码时,启动画面会重新开始。

有没有办法在不重新启动第一个表单的情况下读取ComboBox1值? 如果我直接尝试它不起作用,它会将Form1视为calss而不是object。

    Form1.ComboBox1.SelectedItem.ToString(); //does not work

我也在尝试在打开第二个表单时将值添加到文本框中:

        Form2 form2 = new Form2();
        form2.TextBox1.Text = ComboBox1.SelectedValue.ToString();
        form2.Show();  

这给了我以下错误:"对象引用未设置为对象的瞬间。"

编辑: 它使用此代码:

        Form2 form2 = new Form2();
        form2.TextBox1.Text = ComboBox1.Text;
        form2.Show();

现在我的问题仍然存在:如果我在Form2中,我还能从form1获得值吗?如果没有,那没关系。我会将此作为解决方案发布。

3 个答案:

答案 0 :(得分:1)

虽然这不是最正确的答案,但它是解决问题的一种方法。

Form1中

添加获取值的方法

  public string TransmitSelectedValue()
  {
    return ComboBox1.SelectedItem.ToString();
  }

窗体2

 var myvalue = ((Form1)ParentForm.Controls.Find(Form1Name,true)).TransmitSelectedValue();

答案 1 :(得分:0)

这种类型的问题已被多次询问和回答,并且版本不同。

我建议看一下我过去发布的一些以下内容......

This example显示了两种形式,其中第二种形式作为参数传递给第一种形式的实例。然后,从第一个公开的公共方法,第二个可以调用它们来获取值。如果您想允许从备用来源设置,或者仅允许获取get方法,则由您自行决定...可以作为公共财产获得;受保护的集合;

This stackoverflow search会显示我过去所做过的帖子的几个链接,不同表单之间的版本略有不同。

来自评论的反馈

必须在你的FIRST表单中完成一些事情来调用第二个..是来自点击按钮,还是基于实际的组合框选择被更改。无论是什么,我提供的第一个例子应该是你所需要的。你没有第二个表格叫第一个。

如果没有第一个示例的完整副本\粘贴,您需要真正做的就是在表单2中使用构造函数将您的文本设置为从第一个开始...

public Form2(Form1 viaParameters) : this()
{
    this.textBox1.Text = viaParameters.Combobox1.SelectedItem;
}

然而,我不知道你的项目是如何定义的..字典,列表,数组,等等..所以你可能需要通过类型转换来获取所选项目

if( viaParameters.Combobox1.SelectedIndex > -1 )
  this.textBox1.Text = viaParameters.Combobox1.Items[ viaParameters.Combobox1.SelectedIndex ].WhateverStringValue;

这样,表单1中表单2的开头可以直接获取值。

如果您通过属性或方法从第一个表单公开方法,那么您的文本值可能就像

一样简单
this.textBox1.Text = viaParameters.YourForm1sMethodToGetStringFromCombobox();

答案 2 :(得分:0)

我不确定问题出在哪里

启动/打开form2

喜欢

        Form2 f2 = new Form2();
        f2.Show(this);

您对form1的引用为'所有者'

在form2上你可以把它放在你想要的任何事件上,或者放在按钮上或其他什么

        Form1 f1 = Owner as Form1;
        textBox1.Text = f1.comboBox1.SelectedItem.ToString();

转换为C#...