已解决:原来是一个视觉工作室问题。封闭的视觉工作室,清洁和重建,价值开始显示。感谢大家的帮助,听起来我需要切换到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,具体取决于我在模式窗体中选择的内容,但text属性仍然无法正确显示。
答案 0 :(得分:0)
我猜测Dispose
也将处置它包含的控件。处理完控件后,文本可能也不再有效。在呼叫者中尝试Close
而不是Dispose
然后Dispose
。
答案 1 :(得分:0)
你应该倾听回答你问题的人。 Dispose应该清除已分配的内存,如果仍然可以获得ReadOnly属性则无关紧要。
不要在表单中调用Dispose,从调用代码调用dispose,如ShowDialog方法文档(http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx#Y851)中的示例代码。请注意,在testDialog变量超出范围之前调用Dispose。
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();
}
答案 2 :(得分:0)
我建议只需将Dialog控件的字符串保存到字符串属性中,并在关闭Dialog后检索类属性的值,而不是控件的属性值,并且不再担心Dispose
或不 Dispose
或其他任何问题。
希望这有帮助