获取组合框选定值Form1到另一个Form2

获取组合框选定值Form1到另一个Form2

问题描述:

我有一个C#windows应用程序有两个窗体Form1,它是主窗体和Form2。 Form1上有一个组合框,Form2有一个文本框。获取组合框选定值Form1到另一个Form2

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

我想这一点:

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

问题是,当我运行此Form 1被重新初始化,我不希望出现这种情况。 (我有一个闪屏是侏儒在应用程序启动时,所以,当我跑我的代码的启动画面又重新开始。

有没有一种方法,无需重新启动的第一个表单阅读ComboBox1价值? 如果我直接尝试它不工作,它认为在Form1作为CALSS,而不是对象

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(); 

现在我的问题仍然存在:如果我在窗体2我还可以得到form1的价值?如果没有,那没关系。我会将其作为解决方案发布。

+0

只要your're“在”你的Form1-class中,你可以对当前实例使用this引用。因此你可以重用同一个实例。 – HimBromBeere 2014-11-24 15:36:48

+0

您可以使用事件。 [这里是一个例子](http://*.com/a/6382869/754438)。但在你的情况使用组合框选择项目改变事件,而不是textBox1_TextChanged在例子中。 – Reniuz 2014-11-24 15:39:53

+0

“对象引用未设置为对象的瞬间。”意味着ComboBox中的SelectedValue为null。在引发此异常时,调试并检查组合框的SelectedValue,SelectedItem和SelectedIndex属性中的内容。 – Arie 2014-11-24 15:45:16

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

我建议在看一些我已经张贴在过去下列...

This example显示了第二种形式作为参数的第一种形式的情况下通过两种形式。然后,从第一个公开的方法中,第二个可以调用它们来获取值。如果你想允许设置替代来源,或者只是允许获取方法,你可以自行决定......可以作为公众获得的财产完成;保护组;

This * search将显示几个链接,我已经在过去完成的帖子与不同形式之间略有变化的版本。

反馈COMMENT

必须有东西在你的第一个形式来调用第二完成..是它从一个点击按钮,或根据实际组合框的选择被改变。不管它是什么,我提供的第一个例子应该是你所需要的。你没有第二种形式打电话给第一个。

没有第一例的完整拷贝\粘贴,所有你需要真的在形式2的构造函数设置文本从第一拉...

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

不过,我不知道你的项目是如何定义的.. dictionary,list,array,whatever ..所以你可能需要通过强制转换

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

获得所选择的项目这种方式,形式2的形式,从1开始可以直接抢值。

如果从通过属性或方法的第一种形式公开方法,你的文字值可以是这么简单

this.textBox1.Text = viaParameters.YourForm1sMethodToGetStringFromCombobox(); 
+0

您好,我搜索了论坛并找到了示例,但在所有示例中,第二个窗体初始化为frm2,而它们来自窗体1,用户访问了frm2.object。我需要的是相反的方式。我无法将Form1初始化为frm1,然后使用frm1作为Form1以后的对象,或者在应用程序运行时第一次打开它。 – Danut 2014-11-24 16:53:48

+0

@Danut,审查修改我的答案澄清...此外,尝试做整个第一个例子,看看事情如何工作,然后根据您的情况通过组合框的样本进行更改。 – DRapp 2014-11-24 17:37:50

虽然这不是最恰当的答案,这是解决方法之一问题。

Form1中

添加一个方法来获得价值

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

窗体2

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

这不起作用。 Form1Name是我的应用程序中的Form1,当我在代码中将Form1Name替换为Form1时,我得到错误。 – Danut 2014-11-25 10:28:54

+0

您创建Form1的实例的名称是“Form1”? – DidIReallyWriteThat 2014-11-25 13:23:38

+0

是的。我保持原样。它是应用程序的默认形式。应用程序启动时启动的那个。 – Danut 2014-11-25 13:42:03

我不知道问题出在哪里

同时启动/打开窗口2

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

你必须到Form1为“主人”的引用在窗口2

你可以把这个你想要的任何事件或按钮或任何

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

转化为C#...