从form.ShowDialog返回时,在模态窗体的文本框中获取值

时间:2011-03-08 23:54:12

标签: winforms c#-3.0 modal-dialog

我正在显示一个带有2个文本框的模态表单;通过将字符串传递给模态窗体的构造函数,从调用者传递第一个文本框。第二个文本框为空白,我在其中键入数据,然后单击“确定”。

我无法检索键入第二个文本框的值(事实上,我的btnOK_click代码中的断点不会停止执行)。

MetaDataForm getMetaData = new MetaDataForm(theRootFolder.FolderPath);
getMetaData.ShowDialog();
if (getMetaData.DialogResult == DialogResult.OK)
    {
        string d1 = getMetaData.Meta1;
        string d2 = getMetaData.Meta2;     // this is always null !

以模态形式:

public partial class MetaDataForm : Form
{
    public string Meta1 { get; set; }     // via auto-implemented properties
    public string Meta2 { get; set; }

    public MetaDataForm(string folder)
    {
        InitializeComponent();
        this.label1.Text = folder;
        this.Meta1 = ParseOutlookFolder(folder);
        this.txtMeta1.Text = this.Meta1;
    }
    private string ParseOutlookFolder(string folder)
    {
        string[] a = folder.Split('\\');
        return a[a.Length - 1];

    }
    private void btnOK_click(object sender, EventArgs e)
    {
        this.Meta2 = this.txtMeta2.Text;  // copy from text box into public property (not working?)
        this.Meta1 = this.txtMeta1.Text;
        this.DialogResult = DialogResult.OK;   // added per 1st reply below but no improvement
        this.Close();
    }

编辑:请注意:

在btnOK_click事件中的此行设置断点时:

this.Meta2 = this.txtMeta2.Text;    // copy from text box into public property

..它永远不会“被击中”。这可能就是为什么当我在这一行停止执行时:

string d2 = getMetaData.Meta2;     // this is always null !

..它总是空的?

简而言之,当您在显示模式表单后在主代码中恢复时,如何从表单中获取值?

1 个答案:

答案 0 :(得分:3)

  

(事实上,我的btnOK_click代码中的断点不会停止执行

听起来在对表单进行更改时删除了事件处理程序,请检查设计器代码,例如:

this.btnOK.Click += new System.EventHandler(this.btnOK_Click);

或检查Click事件处理程序是否指向此表单的设计视图中的正确函数。