2009-07-03 148 views
1

我在Windows应用程序中创建了两个窗体。模态对话框

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

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

现在,当显示此对话框时,对话框的文本框应包含在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; 
} 

代码模态对话框OK按钮:

请注意,取消按钮被点击确定按钮时才会启用。

编码:

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

我现在面临的问题是在模式对话框文本框不显示在用户名文本框中输入用户输入的值。相反,它将文本框显示为空白。

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

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

在此先感谢!

回答

2

变化:

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

要:

objFnC.txtUserName.Text = UserName 
objFnC.ShowDialog(); 
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。例如,您可以将其更改为标签,并且不会破坏消费者的代码!所有消费者需要知道的是,他们应该将一个用户名传递给构造函数。

+0

感谢您的及时,因为我期望它现在的工作! – sheetal 2009-07-03 11:35:10

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 
} 
+0

感谢您的提示,它现在正在按照我的需要工作! – sheetal 2009-07-03 11:31:40

1

坐落在对话文本字段调用ShowDialog前:

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

非常感谢它,现在正在按照我的意愿开展工作! – sheetal 2009-07-03 11:29:23

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

或之后强制重画对话框。