在ReadOnly文本框中阻止焦点/选择

时间:2017-07-08 13:08:35

标签: vb.net textbox block blocking readonly

有人知道如何在只读文本框中阻止焦点/选择(ReadOnly = true),而不使用enabled = false?

谢谢!

2 个答案:

答案 0 :(得分:1)

控件有GotFocus个事件。您可以为此事件添加事件处理程序,并提供另一个控件焦点,例如通过在另一个控件上调用Select()或使用SelectNextControl

Private Sub MyTextBox_GotFocus(sender as Object, e as EventArgs) _ 
 Handles  MyTextBox.GotFocus
    MyTextBox.Parent.SelectNextControl(MyTextBox, True, True, True, True)
End Sub

或者,您可以创建一个继承TextBox并将ControlStyles.Selectable设置为False的自定义控件。

Public Class NonSelectableTextBox Inherits TextBox
    Public Sub New()
         SetStyle(ControlStyles.Selectable, false)
    End Sub
End Class

ControlStyles.Selectable设置为false会使TextBox模仿将此位设置为False的其他控件的行为:

  • 标签
  • 面板
  • 分组框中
  • 图片框
  • 进度
  • 分离器
  • LinkLabel(当控件中没有链接时)

答案 1 :(得分:0)

我不确定我完全明白为什么你会这么想。只读文本框允许选择允许用户将文本复制到其他目的。我从您的问题中假设的是,当用户通过控件进行制表时,您不希望TextBox接受输入焦点,我认为这是更常见的要求。

您可以通过以下代码实现此目的:

TextBox1.TabStop = False

确保标签不会将焦点指向只读文本框。您也可以使用与屏幕截图相同的属性在设计器中实现此目的。

Setting TabStop via the designer