2017-07-08 39 views
-1

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

谢谢!

+0

为什么你不想设置'Enabled'? – Ryan

+2

看来你想要一个TextBox作为一个标签。这引发了一个问题:为什么不使用标签? – TnTinMn

回答

0

我不确定我完全理解你为什么要这样做。只读文本框允许用户选择允许用户将文本复制到其他目的。我从你的问题中想到的是,你不希望TextBox在用户通过控件切换时接受输入焦点,而我认为这是一个更常见的要求。

您可以通过代码实现这一点:

TextBox1.TabStop = False 

确保标签不直接集中到只读文本框。您也可以在设计师中使用与屏幕截图相同的属性来实现此目的。

Setting TabStop via the designer

0

控件有一个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.SelectableFalse

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

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

  • 标签
  • 面板
  • 分组框中
  • 的PictureBox
  • ProgressBar
  • 分配器
  • 的LinkLabel(当存在于控制没有链接)