0

这是我正在努力实现的想法。

在文本框中,我输入“增加 50%”。我点击了另一个按钮来显示确切的文本。数字、字母和一些符号正确显示。但是,某些符号,例如 % ^ ( 和 ) 不会显示。我发现我必须使用 SendKeys.Send("{%}") 函数来发送该特定键和其他一些键。好吧,没什么大不了的。但我想要完成的是,当我使用 SendKeys.Send("{%}") 函数时,它会在 OUTPUT 上每次发送 % . 基本上我想要 % WHEN I CALL IT,而不是一直。我希望这有帮助。这也是我的代码。

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick On Error Resume Next

    If CheckBox1.Checked = True Then 'Only Checked Items of the CheckedListbox

        If IntCount > CheckedListBox1.CheckedItems.Count - 1 Then 'If the index is higher then the max. index of the checkedlistbox
            IntCount = 0 ' The index will reset to 0
        End If
        SendKeys.SendWait(CheckedListBox1.CheckedItems(IntCount).ToString & "{ENTER}") 'Send keys to the active windows
        IntCount += 1 'Goto the next line

    Else 'All items

        If IntCount > CheckedListBox1.Items.Count - 1 Then 'If the index is higher then the max. index of the checkedlistbox
            IntCount = 0 ' The index will reset to 0
        End If
        SendKeys.SendWait(CheckedListBox1.Items(IntCount).ToString & "{ENTER}") 'Send keys to the active windows
        IntCount += 1 'Goto the next line
        SendKeys.Send("{%}") 'HERE THE % SYMBOL IS DISPLAYED EVERYTIME. NOT WHAT I WANT! ONLY WHEN I CALL IT IN THE INPUT TEXTBOX!


    End If
4

2 回答 2

0

为什么不直接用String.Replace{%} 替换 % 符号,因为SendKeys.Send如果您要发送的文本不包含它,那么它只会返回字符串而不进行修改。

Dim sendThis as string = "blabla is at 100%"
SendKeys.Send(sendThis.Replace("%","{%}"))

如果由于某种原因您不能或不想替换它,您可以检查您的文本是否包含 % 并根据该条件发送或不发送

If CheckedListBox1.Items(IntCount).ToString.Contains("%") Then
    SendKeys.Send("{%}")
End If

这就是您的代码使用方法 1 的样子

If CheckBox1.Checked = True Then
    If IntCount > CheckedListBox1.CheckedItems.Count - 1 Then
        IntCount = 0
    End If
    SendKeys.SendWait(CheckedListBox1.CheckedItems(IntCount).ToString & "{ENTER}")
    IntCount += 1
Else
    If IntCount > CheckedListBox1.Items.Count - 1 Then
        IntCount = 0
    End If
    'Replace % with {%}
    SendKeys.SendWait(CheckedListBox1.Items(IntCount).ToString.Replace("%", "{%}").ToString.Replace("^", "{^}").ToString.Replace("+", "{+}") & "{ENTER}")
    IntCount += 1
End If

替代方法(更好的性能明智)

Dim sendText as string = CheckedListBox1.Items(IntCount).ToString
sendText = SendText.Replace("%", "{%}")
sendText = SendText.Replace("^", "{^}")
sendText = SendText.Replace("+", "{+}")
SendKeys.SendWait(sendText)
于 2013-08-30T19:37:42.967 回答
0

SendKeys 对某些字符具有特殊含义,包括加号+、插入符号^、百分号%、波浪号~、括号()和花括号{}。发送这些字符时,您必须将它们用大括号括起来{}[]此外,出于兼容性原因,您必须用括号括起来。
如果您发送的文本被编码到您的程序中,您可以手动包装这些字符。
但是,如果文本是用户指定的,或者来自其他来源,您可以像这样包装这些字符:

Dim SendText as String = "This ^string^ might+need (to be) wrapped."
Dim sb as new Text.StringBuilder(SendText)
Dim i as Integer = 0
While i < sb.Length
  If "+^%~(){}[]".Contains(sb.Chars(i)) Then
    sb.Insert(i, "{"c)
    sb.Insert(i + 2, "}"c)
    i += 3
  Else
    i += 1
  End If
End While
SendKeys.Send(sb.ToString())

您还可以发送其他击键,包括退格键和箭头键:

SendKeys.Send("{BACKSPACE}")
SendKeys.Send("{DOWN}")

有关详细信息,请参阅MSDN 上的 SendKeys

于 2013-08-30T20:10:23.083 回答