【问题标题】:get focus on first form专注于第一种形式
【发布时间】:2014-02-17 06:45:17
【问题描述】:

我有两个表格 form1 和 form2。我使用 form1 中的按钮导航到 form2。在 form2 我有一个按钮控件;单击按钮时,我显示消息框。当 messageBox 出现时,它也失去了 form1 的焦点,但我希望它不应该失去 form1 的焦点。我不关心form2。

【问题讨论】:

  • 亲爱的使用form1.BringToFront()
  • 因此,当用户单击 form2 上的该按钮时,它将显示一个消息框。当消息框关闭时应该显示form1并关闭form2?
  • @Developerzzz 找不到选项 form1.BringToFront()
  • @Mino 我没有关闭表格。只是从 form1 打开新的 form2 并希望当我返回到 form1 时,它的字段应该被启用,但是由于 messageBox,所有的 form1 都被禁用。它的需要
  • 亲爱的你必须创建 form1 对象然后你会发现 form1.Bringtofront()

标签: c# winforms


【解决方案1】:

消息框不会像对话框那样显示。就像 Eliran Pe'er 说的,你应该做一个像带有标签和按钮的消息框的 Form,然后像这样使用它。

MessageForm form = new MessageForm.Show();

如果您使用 ShowDialog,它将与 MessageBox 相同。

在您的表格 1 中,您可以使用 TopMost property = true 以使其始终保持在前面。但这将使您的表单在所有其他打开的程序之上。

另一种解决方法是在用户关闭消息框后(这不是一个坏选择),您可以将表单 1 调用到 BringToFront()。为此,您可以在 Show 方法中将 form1 的实例传递给 form2。在您的 form2 构造函数中使用该参数。

【讨论】:

    【解决方案2】:

    我认为没有一种简单的方法可以阻止 MessageBox 获得焦点,因为 MessageBox 是一个对话框。 (对话框从程序中获得焦点,直到它们被关闭)

    我能想到的唯一方法是创建一个看起来像 MessageBox 的新表单,然后使用它。

    【讨论】:

    • 是的,MessageBox 是一个模态窗口,它一直保持焦点直到关闭。
    【解决方案3】:

    试试这个

        if(MessageBox.Show("something")==DialogResult.OK)
        {
          form1.Focus();
        }
    

    或者

    if(MessageBox.Show("something")==DialogResult.OK)
    {
      form1.Select();
    }
    

    【讨论】:

    • 没有您告诉过的选项。我检查了这个但仍然没有工作。Form1.ActiveForm.Activate(); Form1.ActiveForm.Select(); Form1.ActiveForm.Focus();
    【解决方案4】:

    您是使用 ShowDialog() 方法还是 Show() 方法来显示您的 form2? 如果您使用的是 ShowDialog() 方法,请将其修改为 Show()。 因为 ShowDialog() 方法不允许您将焦点更改为主窗体 (form1),直到您关闭子窗体 (form2)

    确保你使用的是方法,

    form2.Show()
    

    显示表单2。

    【讨论】:

      猜你喜欢
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2020-10-04
      • 2020-07-27
      • 1970-01-01
      • 2010-12-16
      相关资源
      最近更新 更多