1

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

一个表单充当表单,另一个表单充当模式对话框。

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

现在,当显示此对话框时,对话框的 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 中。相反,它将文本框显示为空。

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

任何人都可以帮助我执行所需的任务吗?

提前致谢!!!

4

5 回答 5

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();

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

于 2009-07-03T11:24:02.803 回答
2

改变:

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

到:

objFnC.txtUserName.Text = UserName
objFnC.ShowDialog();
于 2009-07-03T11:34:18.817 回答
1

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

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

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

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

我还需要问你模态对话框中OK和Cancel按钮的关系;似乎有点奇怪,用户需要先单击“确定”,才能启用“取消”按钮,然后单击“取消”以实际关闭表单。

我建议不要为这些按钮的单击事件设置任何事件处理程序,而是设置其DialogResult属性的适当值,然后设置模态表单AcceptButtonCancelButton属性。这样您就可以检查对话框是如何关闭的:

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
}
于 2009-07-03T11:24:44.177 回答
1

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

private void btnFn_Click(object sender, EventArgs e)
{
  UserName = txtUserName.Text;
  frmFnC objFnC = new frmFnC();
  objFnC.txtUserName.Text = UserName;
  objFnC.ShowDialog();
}
于 2009-07-03T11:25:14.190 回答
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();
}

或之后强制重绘对话框。

于 2009-07-03T11:26:04.297 回答