如果光标位于文本框(VB.net)中的两个字符串之间,则显示按钮
基本上,我在文本框中有一系列行,如下所示:如果光标位于文本框(VB.net)中的两个字符串之间,则显示按钮,vb.net,textbox,hex,caret,Vb.net,Textbox,Hex,Caret,基本上,我在文本框中有一系列行,如下所示: ###=1232、1234、1236、1238、123A、123C;此处评论 我想在文本框中的插入符号(光标管道)位于如下数字时显示一个按钮: ,12 | 31,….或 ,123 | 1,….等 (管道为插入符号) 我已经编写了代码来检查它是否在数字中,并在单击按钮时获取数字,但是如果我将代码放入selection changed事件中,它将无法正常工作 哦,数字的长度可以高达8位数和十六进制。文本框没有一个事件告诉您用户移动了插入符号。您必须合成一个
###=1232、1234、1236、1238、123A、123C;此处评论
我想在文本框中的插入符号(光标管道)位于如下数字时显示一个按钮:
,12 | 31,….
或
,123 | 1,….
等
(管道为插入符号)
我已经编写了代码来检查它是否在数字中,并在单击按钮时获取数字,但是如果我将代码放入selection changed事件中,它将无法正常工作
哦,数字的长度可以高达8位数和十六进制。文本框没有一个事件告诉您用户移动了插入符号。您必须合成一个,可能是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
公共类表单1
公共分新()
初始化组件()
AddHandler Application.Idle,UpdateButtonState的地址
端接头
私有子updateButtonState(ByVal发送方作为对象,ByVal e作为事件参数)
常量十六位数为String=“0123456789ABCDEF”
Dim caretPos As Integer=文本框1.SelectionStart
Dim enable为布尔值=caretPos>0,并且也为caretPos
如果额外的工作困扰您,请检查文本框是否有焦点,并跟踪其上次选择的开始值。文本框没有告诉您用户移动了插入符号的事件。您必须合成一个,可能是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
公共类表单1
公共分新()
初始化组件()
AddHandler Application.Idle,UpdateButtonState的地址
端接头
私有子updateButtonState(ByVal发送方作为对象,ByVal e作为事件参数)
常量十六位数为String=“0123456789ABCDEF”
Dim caretPos As Integer=文本框1.SelectionStart
Dim enable为布尔值=caretPos>0,并且也为caretPos
如果额外的工作困扰您,请检查文本框是否有焦点,并跟踪其上次选择的开始值