【问题标题】:VB.NET Difference between Focus() and BringToFront()VB.NET Focus() 和 BringToFront() 的区别
【发布时间】:2012-04-12 17:00:44
【问题描述】:

我正在 WinForms 中开发一个应用程序,我有 2 个 MDI 孩子,我想知道 Form.Focus 和 Form.BringToFront 之间的区别

我想知道在单击相应表单的标题栏时使用哪一个,以便在我拖放表单时弹出它

如果您在调用 Form.Show 之后设置子窗体 mdiParent 属性,那么它会弄乱所有子窗体的焦点,因此对我来说,在 MDI 父级中拖放 MDI 子级不会使窗体聚焦在拖动开始时,但仅在 MouseUp 之后

【问题讨论】:

  • 当我单击并按住 MDI 子项的标题栏时,它会自动显示在顶部。我不必等待鼠标升起?
  • ron 我在我的问题中澄清了这个问题
  • 在调用 Form.Show() 之前,您是否尝试过设置 Child 的 MDIParent?
  • 据我所知,通过查看每个 .MDIParent 的位置,它在任何 .Show :\ 之前,但另一个原因可能是因为我正在以编程方式创建它们不符合的表单。

标签: vb.net winforms


【解决方案1】:

Focus() 将焦点设置到 U 元素。 BringToFront() 将您的元素置于其他元素之上(与您的元素重叠)。

因此,如果您在表单上使用 BringToFront(),它将被带到 MDI 环境中窗口的前面。但这并不意味着你的表格会获得焦点。 如果您使用 Focus(),您的表单将获得焦点:例如,您将能够通过键盘与表单交互。但这并不意味着形式将被置于其他形式之上。 所以也许你应该同时使用这两种方法。

【讨论】:

  • 感谢 Dima,但是我已经单击标题栏进行拖动,因此它将假定焦点在 MouseUp,因此看起来 .Focus 包含 .BringToFront 因为它们都为我做同样的事情。跨度>
【解决方案2】:

当我打开 MDI 子窗体时,我在 MDI 父窗体中创建以下函数:

Public Sub ShowMDIChild(f As Form)
    f.MdiParent = Me
    f.Show()
End Sub

“f”参数是我希望打开的新表单:

MyMDIPParent.ShowMDIChild(New Hospitals)

【讨论】:

  • 我正在使用 With 块生成一个新表单来分配所有变量,即使 .MdiParent 在 .Show 之前它也不起作用。一旦我将 .MdiParent 放在 With 块上方,一切正常!
猜你喜欢
  • 2012-10-15
  • 2011-09-02
  • 2010-10-18
  • 2010-12-13
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2017-04-15
  • 2011-03-04
相关资源
最近更新 更多