【发布时间】:2018-04-26 12:16:08
【问题描述】:
我正在用 C# 编写一个 WinForm 应用程序。有一个Form A 在Button 点击时打开Form C。现在,我想在打开Form C 之前添加一个密码输入屏幕Form B。只有输入的密码正确才会打开Form C,否则会显示错误消息。 Form B 只有一个 TextBox 控件和一个 Verify Button 控件。
/*Form A*/
FormB fb;
private void BtnClick(object sender, EventArgs e) {
DialogResult result;
//fb can open once at a time
if(fb == null){
fb = new FormB();
fb.FormClosed += new FormClosedEventHandler(FormB_FormClosed);
//This seems to be not working
result = fb.ShowDialog();
}
else //FormB already open. Do nothing
return;
//Only if password entered is correct, proceed
if(result == DialogResult.Yes){ //result == cancel
//Code to open Form C //Program never reaches here
}
}
//Upon closing FormB, reset it to null
private void FormB_FormClosed(object sender, FormClosedEventArgs e){
if(fb != null)
fb = null;
}
/* Form B */
private const string password = "xxxyyyzzz";
private void BtnPW_Click(object sender, EventArgs e){
bool result = Verify();
if(result){
BtnPW.DialogResult = DialogResult.Yes;
}
else{
MessageBox.Show("Error: Incorrect password");
BtnPW.DialogResult = DialogResult.No;
}
this.Close(); //Added
}
private bool Verify(){
if(TxtBox.Text == password)
return true;
else
return false;
}
谁能告诉我这段代码有什么问题?它永远不会到达Form A 中的第二个if 语句。
编辑:即使我输入了正确的密码并点击了Form B 上的按钮,Form A 中的result 也会得到“DialogResult.Cancel`”。
【问题讨论】:
-
“这似乎不起作用” -- 这不是一个非常有用的评论。当它到达那条线时,您希望看到什么,而您又看到了什么?您是否在
BtnClick的顶部放置了一个断点,并确认它确实被调用了,并且您确实在通过代码遵循您期望的路径? -
我很抱歉。我跳过了一些句子,所以我只是纠正了我的问题。即使在
Form B中输入了正确的密码,我的代码也永远不会打开Form C。 -
你错过了 btnPW.DialogResult 的要点。这说明如果用户单击该按钮将返回什么结果。它没有说明返回什么结果
-
首先,它打开
Form B,我输入密码(不正确或正确)并点击Verify按钮,触发BtnPW_Click方法。到达 this.Close() 后,它离开了该方法,但result = fb.ShowDialog();将cancel作为result的值。 -
你最好在表单b中设置一个字段并在showdialog之后查询它。即有
public bool PasswordOK;
标签: c# winforms dialogresult