我在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中。相反,它将文本框显示为空。
如何将用户在文本框中输入的值输入此模式对话框?
有人可以帮助我完成所需的任务吗?
提前致谢!!!
答案 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();
}
或之后强制重绘对话框。