【问题标题】:Problem with Disabled Textbox which had focus before it was disabled禁用文本框在禁用之前有焦点的问题
【发布时间】:2019-01-15 10:36:07
【问题描述】:

我有带有 Visual Studio 2017 (Visual Basic) 的 Windows 7。

我有一个带有两个单选按钮和两个文本框的组框。选中 radiobutton1 时,两个文本框不可用 (Textbox.Enabled = false)。

当用户点击radiobutton2 时,两个文本框被设置为enabled = true,第一个文本框通过textbox1.focus() 获得焦点。

当用户没有输入任何值并点击单选按钮1 时,两个文本框再次设置为 enabled = false。

当你这样做时,被禁用的textbox1 看起来与textbox2 不同(插入),因为它在被禁用之前具有焦点。

当检查@ 987654333并填写,例如,numvalues到文本框并使用Enter按钮验证两个文本框,不再关注文本框。当您现在点击radiobutton1 时,两个禁用的文本框看起来都一样。

在我点击radiobutton1 之前,我可以使用什么事件来消除文本框(具有焦点)的焦点?

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow!正如您所注意到的,这只是当您禁用焦点文本框时发生的重绘故障,无需担心。但是,如果您想摆脱它,请尝试通过调用 Control.Focus() method before 禁用您的文本框来将焦点转移到另一个控件。如果这不起作用,还请尝试在您的文本框上调用 Refresh() 以强制它在禁用之前重新绘制自身。

标签: vb.net textbox visual-studio-2017


【解决方案1】:

问题解决了。

因为我没有其他控制可以将重点放在 我创建了一个宽度为 0 的标签,因此看不到 IBeam 光标。

对于 radiobutton1,我创建了一个 mouseenter 和一个 mouseleave 事件。 当鼠标悬停在 radiobutton1 上时,“隐藏”标签获得焦点。当鼠标离开 radiobutton1 时,textbox1 再次获得焦点。

refresh() 方法没有帮助。

感谢您对 Visual Vincent 的评论!

p.s.:我不知道为什么,但只将焦点设置到标签而不使用鼠标事件并不能解决问题!

【讨论】:

  • 这有点奇怪。如果您没有注意到(很容易错过),当 TextBox 失去焦点时,它的焦点边框不会立即重新绘制:它优雅地淡出 为浅灰色。如果您使用 CheckBox 来更改 TextBox 的 Enabled 状态(RadioButtons 和 Focus 是另一回事),则可以使其真正可见,使其CheckedChanged 事件async。将TextBox.Enabled 属性设置为false 后,插入await Task.Delay(300)TextBox.Refresh()。您会看到边框突然变为默认的disabled 颜色。你也可以自己画……
  • @Jimi,我没注意到 :) 但是你写的很有趣。谢谢你的详细信息!
  • 很高兴你能成功!但是你不能只关注单选按钮本身吗?似乎没有必要添加另一个控件来切换焦点。 :)
  • 这也是我的第一个想法。但是将焦点放在单选按钮上并没有解决它。也有帮助的是在检查 radiobutton2 时第二次鼠标单击它。这也将焦点完全从文本框移开。但这只是我的解决方案,不适用于任何其他用户。
猜你喜欢
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多