基本上我在文本框中有一系列行,如下所示:
### = 1232, 1234, 1236, 1238, 123A, 123C ; comment here
我想在文本框中的插入符号(光标管事物)出现时显示一个按钮,如下所示:
... , 12|31, ....
或
... , 123|1, ....
等
(管道是插入符号)
我已编写代码来检查它是否在数字中并在单击按钮时获取数字,但如果我将代码放入选择更改事件中,它将无法正常工作。
哦,数字最长可达8位和十六进制。
答案 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值。