如果光标位于文本框中的两个字符串之间,则显示按钮(VB.net)

时间:2009-12-27 12:23:41

标签: vb.net textbox hex caret

基本上我在文本框中有一系列行,如下所示:

### = 1232, 1234, 1236, 1238, 123A, 123C ; comment here 我想在文本框中的插入符号(光标管事物)出现时显示一个按钮,如下所示:

... , 12|31, ....... , 123|1, ....等 (管道是插入符号)

我已编写代码来检查它是否在数字中并在单击按钮时获取数字,但如果我将代码放入选择更改事件中,它将无法正常工作。

哦,数字最长可达8位和十六进制。

1 个答案:

答案 0 :(得分:1)

TextBox没有告诉您用户移动插入符的事件。您必须使用Application.OnIdle事件合成一个。它在处理完所有输入事件(鼠标,键盘)后运行。你会做一些额外的不必要的工作,但你永远不会注意到,因为这段代码在“人类时间”运行。例如:

Public Class Form1

  Public Sub New()
    InitializeComponent()
    AddHandler Application.Idle, AddressOf UpdateButtonState
  End Sub

  Private Sub updateButtonState(ByVal sender As Object, ByVal e As EventArgs)
    Const hexdigits As String = "0123456789ABCDEF"
    Dim caretPos As Integer = TextBox1.SelectionStart
    Dim enable As Boolean = caretPos > 0 AndAlso caretPos < TextBox1.Text.Length
    If enable Then
      Dim left As Char = Char.ToUpper(TextBox1.Text(caretPos - 1))
      Dim right As Char = Char.ToUpper(TextBox1.Text(caretPos))
      If Not hexdigits.Contains(left) OrElse Not hexdigits.Contains(right) Then enable = False
    End If
    Button1.Enabled = enable
  End Sub
End Class

如果额外的工作困扰你,那么检查文本框是否具有焦点并跟踪其最后的SelectionStart值。