【问题标题】:C# window Form , that run two formsC# window Form ,运行两个窗体
【发布时间】:2017-05-19 13:30:33
【问题描述】:

大家好,我检查了上一个问题,是的,我看到了,但这并没有真正解决我的问题。

我正在编写一个应用程序,它有两个表单,一个 mainForm 和一个密码表单。

该表格用于扫描两个代码,如果它们相等则匹配。您扫描第一个代码,然后扫描第二个代码。如果它们匹配它会弹出绿灯以显示它们匹配。如果代码不匹配,它会同时弹出一个红灯和一个密码表单,并将表单文本框锁定为只读,以便主管验证用户扫描的内容。

它正在做这一切。

问题是我希望当主管输入密码时它必须再次显示表单以便用户可以继续扫描,它正在这样做。但问题是当它打开一个新表格时,后面那个被锁定的表格并没有消失。我试图重置表格,它不起作用。请帮忙。

//object references of the Main Form
MainForm fm=new MainForm();

if ((txtPassword.Text =="This"
{

    fm.BringToFront();

    //Reset the form to a normal state
    fm.lblResult.Visible = false;
    fm.txtResult.Visible = false;
    fm.chkMtn.Checked = false;
    fm.chkVodacom.Checked = false;

    //Clear the textBox of the form
    fm.txtMainFormScan1.Text="";
    fm.txtMainFormScan2.Text="";

    set the focus on the fist Scan
    fm.txtFirstScan.Focus();
 }

The code above does not work. now i am using the one below.

if ((txtPassword.Text =="ThisPassword")
{
    lblInstructPassword.Text = "Password correct";
    txtPassword.Text = "";
    fm.ControlBox = true;
    //fm.Activate();
    this.Hide();    //This Close the Password form
    fm.Show();
    fm.chkMtn.Checked = true;
}

即使我使用 //fm.ShowDialog,我也无法获胜。我还尝试使用 Mutex 来只允许应用程序的一个实例运行。结果为零。提前感谢您的帮助。

【问题讨论】:

  • 难道你不能在你的主表单中写一个方法“ResetForm()”,然后从你的密码表单中调用它吗?
  • 如果此应用程序将非常大,请考虑使用带有 MVVM 模式的 WPF 而不是 winforms。它提供了更多的功能和灵活性。
  • 不会很大,它的主要作用只是解决一个问题,匹配以尽量减少用户手动扫描时的错误。
  • Aboc,我只是尝试创建一个 ResetForm() 方法并在密码表单上调用它。还是不行。

标签: c# winforms


【解决方案1】:

您正在做很多 .Net 应该为您做的工作。

所有其他都是可变的细节,你真正的问题是:

  • 您有一个比较两个值的工作表单。
  • 如果比较结果为假,您需要出现一个模态窗口来提示输入密码。
  • 如果密码正确,您需要再次编辑第一个表单并让密码表单消失。

您使用ShowDialog() 是在正确的路径上,因为这确实会禁用触发命令以显示对话框的窗口。您需要您的密码逻辑成为该对话框表单的一部分,而不是父表单。这将允许您将 DialogResult enum 值返回到父表单(如果有任何值),并让您绕过不必要的 Focus() 折腾。

如果您希望调用表单在执行此操作时消失并重新出现,请将调用封装到表单的 ShowDialog() 调用中 this.Hide()this.Show()

【讨论】:

  • 是的,但是当第一个表单显示时,通过使用 this.showDialog() 将密码表单隐藏。但是当我关闭刚刚显示的第一个表单时。当不匹配时,我会看到那个有错误的表单。
  • 是的,第二种形式什么都做。
  • 在您的第二个表单中创建一个包含更改的属性,或者在父表单中放置一个公共方法,该方法可以由子表单调用以传递值。 social.msdn.microsoft.com/Forums/vstudio/en-US/…
猜你喜欢
  • 2015-12-08
  • 2022-01-04
  • 1970-01-01
  • 2017-11-16
  • 2016-10-20
  • 2023-02-08
  • 2017-07-24
  • 1970-01-01
相关资源
最近更新 更多