我试图将一个表单的comboboxselectedItem称为另一个表单构造函数。这样我就可以为它分配一些变量并将其用于其他目的。
包含组合框值的表单是模式表单:
public Mode()
{
InitializeComponent();
}
private void Mode_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
comboBox1.Focus();
String query = "select [test_no],[test_name] from [Test]";
ds = db.ExecuteDataSet(query);
comboBox1.DisplayMember = "test_name";
comboBox1.ValueMember = "test_no";
comboBox1.DataSource = ds.Tables["tablename"];
panel3.Controls.Add(comboBox1);
panel3.Controls.Add(Runbutton);
}
private void Runbutton_Click_2(object sender, EventArgs e)
{
label3.Enabled = true;
val = Convert.ToString(comboBox1.Text);
Test test = new Test(val);
Test test1 = new Test();
test1.Activate();
test1.Focus();
this.Hide();
test1.ShowDialog();
}
private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{
val = Convert.ToString(comboBox1.SelectedItem);
}
测试表格:代码
string parentform;
public Test()
{
InitializeComponent();
RunFirst_Settings();
UserLogin login = new UserLogin();
login.Hide();
login.Visible = false;
}
public Test(string Mode)
{
parentform = Mode;
}
private void Startbutton_Click(object sender, EventArgs e)
{
stopwatch.Start();
timer1.Start();
ts=new ThreadStart(ProcessStarted);
th=new Thread(ts);
th.Start();
}
private void ProcessStarted()
{
if (parentform != null)
{
// Here every time it returns a null value. Before it was
// showing the exact selectedItem of combobox in Mode form:
MMTest(parentform);
}
else
{
//other code to be done
}
}
现在我如何获得组合框的确切selectedItem?有什么建议吗? 如果我仅在Mode形式的Runbutton_Click_2()中调用Test(字符串模式)构造函数,它将显示空白表单,而不是实际的测试表单。
我的错误在哪里?如何纠正它以获得所需的结果。
答案 0 :(得分:0)
在click事件处理程序中,您在不同对象上调用参数化构造函数并显示另一个对象(test和test1)的表单。因此,test1实例从未真正收到所选的项目文本。
编辑:
Test test1 = new Test();
替换为Test test1 = new Test(val);
。:this()
以调用默认构造函数。答案 1 :(得分:0)
至于你只使用参数化构造函数(因为你需要那个参数)删除你的第一个构造函数Test()
或将其设为私有,以确保你不会偶尔调用它。如果你要离开它 - 而不是使用丹麦语解决方案(: this()
),如果没有,那么:
public Test(string Mode)
{
InitializeComponent();
RunFirst_Settings();
UserLogin login = new UserLogin();
login.Hide();
login.Visible = false;
parentform = Mode;
}