模态对话框

时间:2009-07-03 11:16:49

标签: c# dialog modal-dialog simplemodal

我在Windows应用程序中创建了两个表单。

一个表格作为表格,另一个表格作为一个模式对话框。

“表单”对话框包含一个按钮和一个textBox。 单击此按钮时,应显示MODAL DIALOGBOX。 此对话框还包含一个文本框和两个按钮(确定和取消)。

现在,当显示此对话框时,对话框的TextBox应包含在Form1的文本框中输入的值。

我使用以下编码来完成此任务。 Form1编码:

public string UserName;
private void btnFn_Click(object sender, EventArgs e)
{
  UserName = txtUserName.Text;
  frmFnC objFnC = new frmFnC();
  objFnC.ShowDialog();
  objFnC.txtUserName.Text = UserName;
}

MODAL DIALOGBOX中的代码OK按钮:

请注意,只有在单击“确定”按钮时才会启用“取消”按钮。

编码:

private void btnOk_Click(object sender, EventArgs e)
{
    btnCancel.Enabled=true;
}
private void btnCancel_Click(object sender,EventArgs e)
{
  this.Close();
}

我面临的问题是用户在USERNAME文本框中输入的值不会显示在MODAL DIALOG BOX的TEXTBOX中。相反,它将文本框显示为空。

如何将用户在文本框中输入的值输入此模式对话框?

有人可以帮助我完成所需的任务吗?

提前致谢!!!

5 个答案:

答案 0 :(得分:6)

您遇到的问题是在设置用户名之前显示对话框。

//this shows your dialog
objFnC.ShowDialog(); 
//this won't happen until the dialog is closed
objFnC.txtUserName.Text = UserName; 

因为对话框是模态的,所以在对话框关闭之前它不会转到下一行。你想把这些线交换成圆形,这样就可以了。

//do this first
objFnC.txtUserName.Text = UserName;
//then show your dialog
objFnC.ShowDialog();

我想指出,公开发布文本框并不是一个好主意。您不希望消费者具有对话的实施知识。

如果您将一个参数添加到表单构造函数,然后在其中设置文本框文本,那会更好。然后你可以做以下事情:

//get the username
string userName = txtUserName.Text;  
//create a new form passing in the username
frmFnC objFnC = new frmFnC(userName);  
//display the form
objFnC.ShowDialog();

这样,消费者不依赖于具有名为txtUserName的文本框的frmFnC,这意味着您可以自由更改显示用户名的内部工作方式。例如,您可以将其更改为标签,并且不会破坏消费者的代码!所有消费者需要知道的是他们应该将用户名传递给构造函数。

答案 1 :(得分:2)

更改:

objFnC.ShowDialog();
objFnC.txtUserName.Text = UserName

objFnC.txtUserName.Text = UserName
objFnC.ShowDialog();

答案 2 :(得分:1)

为了能够以模态形式设置(和获取)文本框的内容,请将此代码添加到该表单中:

public string UserName
{
    get { return txtUserName.Text; }
    set { txtUserName.Text = value; }
}

然后,在另一种形式中,您可以设置用户名:

frmFnC objFnC = new frmFnC();
objFnC.UserName = txtUserName.Text;
objFnC.ShowDialog();

我还需要询问模态对话框窗体中“确定”和“取消”按钮之间的关系;用户首先需要单击“确定”,以启用“取消”按钮,然后单击“取消”以实际关闭表单,这似乎有点奇怪。

我建议不要为这些按钮的点击事件设置任何事件处理程序,而是设置其DialogResult属性的相应值,然后设置模态窗体AcceptButton和{{3属性。这样你可以检查对话框的关闭方式:

frmFnC objFnC = new frmFnC();
objFnC.UserName = txtUserName.Text;
if (objFnC.ShowDialog() == DialogResult.OK)
{
    // the user clicked the OK button
}
else
{
    // the user clicked the Cancel button
}

答案 3 :(得分:1)

在调用ShowDialog之前设置对话框中的文本字段:

private void btnFn_Click(object sender, EventArgs e)
{
  UserName = txtUserName.Text;
  frmFnC objFnC = new frmFnC();
  objFnC.txtUserName.Text = UserName;
  objFnC.ShowDialog();
}

答案 4 :(得分:1)

您需要交换文本设置和ShowDialog:

public string UserName;
private void btnFn_Click(object sender, EventArgs e)
{
  UserName = txtUserName.Text;
  frmFnC objFnC = new frmFnC();
  objFnC.txtUserName.Text = UserName;  // SET THE DATA BEFORE SHOWING THE DIALOG
  objFnC.ShowDialog();
}

或之后强制重绘对话框。