我有一个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获得值吗?如果没有,那没关系。我会将此作为解决方案发布。
答案 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#...