【问题标题】:Form.Show() is not setting focus on the formForm.Show() 没有将焦点放在表单上
【发布时间】:2014-01-17 14:21:36
【问题描述】:

我已经搜索但没有找到或找到但没有任何东西对我有用,因此这个问题。以下代码用于在我的主表单顶部显示进度表单。此表单必须具有焦点。

代码:

private ProgressForm _progress;

private void ShowProgress(string message)
{
    Enabled = false;
    _progress = new ProgressForm(message, this);
    _progress.Show();
}

表格已显示,但没有焦点,见下图:

如您所见,主窗体仍然具有焦点,而不是新窗体。我想要的是这样的:

我尝试了以下方法,但都没有奏效:

_progress.BringToFront();
_progress.Focus();
_progress.Activate();

我也在新表单的构造函数中尝试了这些方法,但结果相同。有谁知道如何解决这个问题?

编辑:

我使用了“gnarlybracket”在答案中提出的解决方案,只需切换到代码行即可使其工作。同样重要的是,我发现了为什么 ShowProgress 没有集中注意力。我从表单的Load 事件中调用了该方法。如果我从表单的 Activated 事件中调用它,则会显示新表单并获得焦点。

【问题讨论】:

  • 如果您不希望人们能够单击主窗体,请尝试使用 .ShowDialog() 除此之外,我无法弄清楚为什么 .Focus() 不起作用。奇数。
  • ShowDialog() 不是一个选项,请参阅我对'gnarlybracket's answer的评论。

标签: c# winforms focus show


【解决方案1】:

而不是

_progress.Show();

尝试:

_progress.ShowDialog();

【讨论】:

  • 很好的尝试,但是在我显示进度表后,我必须启动一个BackGroundWorker,当我使用ShowDialog() 时,代码挂在这一行并且没有启动工人。
  • 你能先启动BackgroundWorker,然后使用ShowDialog()吗?
  • 谢谢,这行得通。我还发现了为什么一开始Show 不起作用。我已将其作为编辑放在我的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多