使用公共文本框在窗体之间传递值

本文关键字:之间 窗体 文本 | 更新日期: 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或其他任何东西。

希望能有所帮助