1

基本上我在这样的文本框中有一系列行:

### = 1232, 1234, 1236, 1238, 123A, 123C ; comment here 当文本框中的插入符号(光标管道的东西)出现在一个数字中时,我想显示一个按钮,例如:

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

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

哦,这些数字最多可以是 8 位数字和十六进制。

4

1 回答 1

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 值。

于 2009-12-27T13:05:52.550 回答