我是Window应用程序的新手。我有两个表单form1和form2。 From1有一个文本框,form2有一个组合框。现在我想在关闭form2时将form2选中的form2项目显示到form1的文本框中。所以我违反了静态类(marketclass)并将选定值分配给statik变量。 Beow是我的form2代码。
private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e)
{
marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedValue);
this.Close();
}
现在,下面的id是我的form1代码。
public Form1()
{
InitializeComponent();
if (marketclass.nAlgoproperty > 0)
{
textbox1.text = marketclass.nAlgoproperty;
}
}
但是没有用。那我怎么能做到这一点。
感谢。
答案 0 :(得分:2)
通过ShowDialog()显示Form2,然后检索值:
// ... in Form1 ...
Form2 f2 = new Form2();
f2.ShowDialog(); // code stops here until "f2" is closed
textbox1.text = marketclass.nAlgoproperty;
答案 1 :(得分:0)
您是否设置了ComboBox的ValueMember属性?如果不是,那么,您应该或者如果您使用组合框显示文本作为值,则必须使用SelectedText属性:
private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e)
{
marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedText);
this.Close();
}
答案 2 :(得分:0)
一般
使用模型 - 视图 - 控制器(MVC)模式可以很好地解决这类问题。
这看起来像WinForms,它并不完全支持MVC。但是,尽管如此,您当然可以实现MVC模式。
对于一篇好的入门文章,我建议你看看
http://www.codeproject.com/Articles/383153/The-Model-View-Controller-MVC-Pattern-with-Csharp
特定于此问题
您正尝试使用静态变量获得类似的结果。问题很可能是更改后备静态变量值的时间,以及查找更改时的时间。
textbox1.text = marketclass.nAlgoproperty;
加载Form1时调用。在Form2的复选框处理程序更新marketclass
中的值之前,可能确实已加载Form1。
即使今天不是这种情况,也可以说明您现在使用的模式会遇到的问题类型。
MVC模式通过将一个或多个控件绑定到后备变量来解决这种类型的计时问题,这样,如果UI元素更改了值,则更新该值,并且还更新所有其他绑定的UI元素。相反,如果值发生更改(比如因为它是从数据库加载的),则所有绑定的UI元素都会自动更新。
答案 3 :(得分:0)
您正在textbox1.Text = marketclass.nAlgoproperty
的构造函数中执行作业Form1
(即 Form2
之前<{em>}为marketclass.nAlgoroperty
分配值。
选择“最佳”方式执行此操作后,您可以在Form1
中显示Form2
(即Form2
关闭后)的来电后执行作业。
form2.Show();
textbox1.Text = marketclass.nAlgoproperty;
应该这样做。一旦你开始工作,考虑一个更好的方法 - 例如MVC and Observer设计模式。
答案 4 :(得分:0)
我找到了短代码,然后输入了display的值!
int widht = Screen.PrimaryScreen.Bounds.Width;//l
int height = Screen.PrimaryScreen.Bounds.Height;//h
textbox1.text ="Widht -> " +widht + " : Height ->" +height
不客气!