模态对话框

she*_*tal 1 c# simplemodal dialog modal-dialog

我在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;
}
Run Code Online (Sandbox Code Playgroud)

MODAL DIALOGBOX中的代码OK按钮:

请注意,仅在单击"确定"按钮时才会启用"取消"按钮.

编码:

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

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

我该怎么做才能将用户在文本框中输入的值输入到此模式对话框中?

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

提前致谢!!!

Rei*_*ica 6

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

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

由于对话框是模态的,因此在关闭对话框之前不会转到下一行.你想要将这些线交换,这样就可以了.

//do this first
objFnC.txtUserName.Text = UserName;
//then show your dialog
objFnC.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

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

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

//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();
Run Code Online (Sandbox Code Playgroud)

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