【问题标题】:Block focus/select in a ReadOnly textbox在只读文本框中阻止焦点/选择
【发布时间】:2017-07-08 13:08:35
【问题描述】:

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

谢谢!

【问题讨论】:

  • 为什么不想设置Enabled?
  • 您似乎希望 TextBox 充当标签。这就提出了一个问题:为什么不使用标签?

标签: vb.net textbox block blocking readonly


【解决方案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(当控件中没有链接时)

【讨论】:

    【解决方案2】:

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

    您可以通过代码实现:

    TextBox1.TabStop = False
    

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

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多