使用公共文本框在窗体之间传递值
本文关键字:之间 窗体 文本 | 更新日期: 2023-09-27 18:01:35
已解决:原来是visual studio的问题。封闭的视觉工作室,清理和重建,价值开始显现。谢谢所有的帮助,听起来我需要切换到VS2010
这可能不是在表单之间传递值的最好、最安全或首选的方式,但这是我目前正在尝试的方式。所以,请一定要帮助我,让这种方式工作。在提供答案之后,非常欢迎您添加一些更好的方法来完成此操作。
问题是,当模态对话框关闭,我回到所有者,从模态的文本框值是一个空字符串,而不是实际值。我在几个地方读过,这不应该是这种情况,因为即使在模态框处置之后数据也应该持续存在。这是我的代码。
public partial class PreferencesForm : Form
{
public PreferencesForm()
{
InitializeComponent();
}
private void okButton_Click(object sender, EventArgs e)
{
if (masterRadioButton.Checked == true)
{
if (password1TextBox.Text != password2TextBox.Text)
{
errorLabel.Text = "Passwords do not match, please re-enter both passwords and try again.";
this.Refresh();
}
else if (password1TextBox.Text == "" && password2TextBox.Text == "")
{
errorLabel.Text = "You must enter a password.";
}
else
{
okResultButton_Click(null, null);
}
}
else if (singleRadioButton.Checked == true)
{
okResultButton_Click(null, null);
}
}
private void cancelButton_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Dispose();
}
private void okResultButton_Click(object sender, EventArgs e)
{
// invisible button
this.DialogResult = DialogResult.OK;
this.Dispose();
}
下面是调用上述表单作为模态对话框的代码。
private void setPreferencesToolStripMenuItem_Click(object sender, EventArgs e)
{
PreferencesForm pf = new PreferencesForm();
DialogResult result = pf.ShowDialog();
if (result == DialogResult.OK)
{
if (pf.password1TextBox.Text != "")
{
masterPassword = pf.password1TextBox.Text;
}
else
{
masterPassword = null;
}
}
}
谢谢你的帮助。我在这里感到很沮丧。>:
注意:password1TextBox变量的ReadOnly属性正确显示为true或false,这取决于我在模态形式中选择的内容,但文本属性仍然不能正确显示
我猜Dispose
也会处理它包含的控件。在处理控件之后,文本可能也不再有效。尝试Close
而不是Dispose
,然后在调用者中Dispose
你应该听别人回答你的问题。Dispose应该清除已分配的内存,如果您仍然可以获得ReadOnly属性则无关紧要。
不要在表单中调用Dispose,而是从调用代码中调用Dispose,就像ShowDialog方法文档(http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx#Y851)中的示例代码一样。注意,Dispose是在testDialog变量超出作用域之前调用的。
public void ShowMyDialogBox()
{
Form2 testDialog = new Form2();
// Show testDialog as a modal dialog and determine if DialogResult = OK.
if (testDialog.ShowDialog(this) == DialogResult.OK)
{
// Read the contents of testDialog's TextBox.
this.txtResult.Text = testDialog.TextBox1.Text;
}
else
{
this.txtResult.Text = "Cancelled";
}
testDialog.Dispose();
}
我建议将对话框控件的字符串保存为字符串属性,并在对话框关闭后检索该类属性而不是控件的属性值,并停止担心Dispose
或而不是 Dispose
或其他任何东西。
希望能有所帮助