Vb.net 禁用的文本框出现问题,该文本框在禁用前具有焦点

Vb.net 禁用的文本框出现问题,该文本框在禁用前具有焦点,vb.net,textbox,visual-studio-2017,Vb.net,Textbox,Visual Studio 2017,我有带Visual Studio 2017(Visual Basic)的Windows 7 我有一个带有两个单选按钮和两个文本框的分组框。选中radiobutton1时,两个文本框不可用(Textbox.Enabled=false) 当用户点击radiobutton2时,两个文本框被设置为enabled=true,第一个文本框通过textbox1.focus()获得焦点 当用户未输入任何值并点击radiobutton1时,两个文本框再次设置为enabled=false 执行此操作时,禁用的t

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

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

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

当用户未输入任何值并点击radiobutton1时,两个文本框再次设置为enabled=false

执行此操作时,禁用的
textbox1
textbox2
看起来不同(插图),因为它在禁用之前具有焦点

当选中
radiobutton2
并在文本框中填写
numvalues
,然后使用enter按钮验证两个文本框时,文本框上不再有焦点。现在点击
radiobutton1
时,两个禁用的文本框看起来相同

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

问题解决了

因为我没有其他的控制来集中注意力 我创建了一个宽度为0的标签,因此无法看到IBeam光标

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

refresh()方法没有帮助

谢谢你的评论


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

大家好,欢迎来到Stack Overflow!正如您所注意到的,这只是一个重绘小故障,当您禁用一个聚焦文本框时会发生,不应该担心任何事情。但是,如果您想摆脱它,请尝试在禁用文本框之前通过调用将焦点赋予另一个控件。如果这不起作用,也可以尝试在文本框上调用
Refresh()
,强制它在禁用之前重新绘制自己。这种情况的重复有点奇怪。如果您没有注意到(很容易忽略),当文本框失去焦点时,其焦点边框不会立即重新绘制:它会优雅地淡入浅灰色。如果您使用复选框更改文本框的启用状态(单选按钮和焦点是另一回事),使其
CheckedChanged
事件
async
,则可以使其真正可见。将
TextBox.Enabled
属性设置为false后,插入
wait Task.Delay(300)
TextBox.Refresh()
。您将看到边框突然变为默认的禁用颜色。你也可以自己画…@吉米,我没注意到:)但是你写的东西很有趣。详细信息请点击Thx!很高兴你成功了!但是你不能把焦点放在单选按钮本身上吗?似乎没有必要添加另一个控件来切换焦点。:)这也是我的第一个想法。但是把焦点放在单选按钮上并不能解决问题。在检查radiobutton2时,第二次鼠标点击radiobutton2也有帮助。这也会使文本框的焦点完全消失。但这将是一个解决方案,只有我,而不是任何其他用户。