Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果光标位于文本框(VB.net)中的两个字符串之间,则显示按钮_Vb.net_Textbox_Hex_Caret - Fatal编程技术网

如果光标位于文本框(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
如果额外的工作困扰您,请检查文本框是否有焦点,并跟踪其上次选择的开始值