【问题标题】:Remove focus if clicked anywhere else如果单击其他任何位置,则删除焦点
【发布时间】:2011-04-10 18:42:29
【问题描述】:

我有一个文本框,我想要它,所以如果用户在不是文本框本身的表单上单击 anywhere,这样的文本框将失去焦点。有什么想法吗?

【问题讨论】:

  • 您不想关注文本框 RT?
  • 是的,我不想关注它... 如果我点击其他地方。即使我单击表单中的其他位置,它似乎也能保持焦点。
  • 你想重点关注什么?
  • 如果用户没有点击另一个文本框,我想专注于......什么都没有。这可能吗?

标签: vb.net winforms visual-studio


【解决方案1】:

将表单的ActiveControl属性设置为null,实现你想要的。

请注意,这与所有其他程序的做法相反,因此会导致用户期望与实际用户体验脱节。我建议不要这样做。

【讨论】:

  • 您的答案缺少什么(因此对我来说不太有用,有一个类似的问题)是 when 设置该属性(即什么事件)。我的表单有工具栏,等等等等,我不想将特殊代码挂接到每个按钮处理程序中以清除相关文本框的焦点。单击工具栏按钮自然不会使文本框失去焦点。 :-(
【解决方案2】:

某事需要获得焦点。那是你应该点击的东西。最好是表单上的另一个控件,表单本身不需要焦点。它没有用。或者单击“开始”按钮。

【讨论】:

  • 好的,那么,如何检查文本框是否未被点击
  • 奇怪的问题。我猜是没有 Click 事件。这是怎么回事?
【解决方案3】:

只需将您的控件放在一个面板中,然后将您的注意力集中在一个无害的控件上(就像一个标签):

Private Sub Panel1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.Click
        Label1.Focus()
End Sub

【讨论】:

    【解决方案4】:

    我添加这个是因为我的声誉没有足够的学分(仅编码 30 多年哈哈)。 我发现了 Lasse 的 Activecontrol to Nothing (VB) 答案的用途——我在表单停用事件期间使用了它,因此当该表单失去焦点时,它会将焦点从活动控件上移开。这就是我和用户想要的(我通过我的自定义控件库为他们突出显示了重点控件,并且由于从用户的角度来看它没有焦点,我需要在(父)表单不在时将其从控件中删除利用)。这种用法很不寻常,因为我正在“即时”创建一些表单作为我正在编写的一种控件分离/取消固定功能。

    也就是说,我的测试还处于早期阶段,所以它可能还没有投入生产,但这是一种冗长的说法,我不能支持 Lasse,而且在奇怪的情况下他的回答很有启发性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2018-10-06
      • 2017-11-08
      • 1970-01-01
      相关资源
      最近更新 更多