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中.相反,它将文本框显示为空.
我该怎么做才能将用户在文本框中输入的值输入到此模式对话框中?
任何人都可以帮助我完成所需的任务吗?
提前致谢!!!
您遇到的问题是您在设置用户名之前显示对话框.
//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,这意味着您可以自由地更改显示用户名的内部工作方式.例如,您可以将其更改为标签,并且不会破坏消费者的代码!所有消费者需要知道的是他们应该将用户名传递给构造函数.