【发布时间】:2012-10-20 04:54:30
【问题描述】:
我有一个 winforms 应用程序。
我在一个表单上有一个文本框(调用 F1),当单击此表单上的按钮(调用 F2)时,它会启动另一个表单。
在F2上,我想通过一个文本框设置一个字符串(并将其保存到类中的一个变量中),然后当我关闭这个表单时,该字符串将出现在F1的一个标签中。
所以我基本上是在两种形式之间共享变量。但是,我无法让它正常工作。这段代码看起来如何?
【问题讨论】:
我有一个 winforms 应用程序。
我在一个表单上有一个文本框(调用 F1),当单击此表单上的按钮(调用 F2)时,它会启动另一个表单。
在F2上,我想通过一个文本框设置一个字符串(并将其保存到类中的一个变量中),然后当我关闭这个表单时,该字符串将出现在F1的一个标签中。
所以我基本上是在两种形式之间共享变量。但是,我无法让它正常工作。这段代码看起来如何?
【问题讨论】:
我会在 form2 中添加一个新属性。说是电话号码。然后我会添加一个朋友属性 m_phone() 作为字符串到表单 2。在显示 form2 的实例后但在关闭它之前,您可以参考 form1 代码中的属性 m_phone。
这是 Matthew Abbott 解决方案的额外间接级别。它不会将 form2 UI 控件暴露给 form1。
编辑
例如:
public string StoredText
{
get;
private set;
}
在set里面你可以引用你的UI控件,比如return textBox1.text。使用 get 设置先前加载的文本框值。
还有:
public string GetSomeValue()
{
var form = new F2();
form.ShowDialog();
return form.StoredText;
}
只需确保在关闭表单之前填充(或不填充,如果合适的话)StoredText。
【讨论】:
您是否将第二种形式显示为对话框,这可能是最好的方法。如果您可以避免使用共享变量,则可以执行以下操作:
public string GetSomeValue()
{
var form = new F2();
form.ShowDialog();
return form.TextBox1.Text;
}
并在代码中调用:
Label1.Text = GetSomeValue();
【讨论】:
这可能不是最有效的方法,但您可以创建一个名为 DB(数据库)的类。在这个类中,创建像
这样的变量public static bool test 或 public static bool[] test = new bool[5];
在您的其他表单中,您可以只创建一个实例。 DB db = new DB(); 然后使用db.test = true/false 获取信息。这就是我一直在做的,而且效果很好。
对不起,我只晚了一年。
【讨论】: