我正在制作一个winforms应用程序,其目的是使用组合键将IPA符号写入文本框。用户在关注RichTextBox时按下按键。某些组合键(如Ctrl + S)只会产生一个字符并等待下一个按键,如ʃ
。如果您在按住Ctrl的同时重复按下相同的按键,其他组合键将产生不同的字符。例如,如果我按下Ctrl键,则会输入A,æ
,但如果在仍按住Ctrl的同时再次按A,则æ
将被删除,而ɑ
将会出现。它将通过这两个键继续循环,直到玩家释放Ctrl或按下不同的键。等待循环中的按键VB.NET WinForms
虽然我被困在试图实现这种行为。这是迄今为止我所了解的一个粗略的想法;最主要的障碍是,我不知道如何在一个循环的中间暂停和读取按键,使用形式:
Private Sub IPAtext_KeyPress(sender As Object, e As KeyEventArgs) Handles IPAtext.KeyDown
Dim AChars() As Char = {"æ", "ɑ"}
Dim Counter As Integer = 0
Select Case e.Modifiers
Case Keys.Control
Select Case e.KeyCode
Case Keys.A
While e.Modifiers = Keys.Control And e.KeyCode = Keys.A
IPAtext.AppendText(AChars(Counter))
'-- Pause for keypress. If keypress =/= A then complete loop, if keypress is A again then increase counter. --
Counter = (Counter + 1) Mod AChars.Count 'Increments the counter so that it cycles back to 0 when it goes past the count of AChars.
'-- Only execute the line below if keypress is A. --
IPAtext.Text = IPAtext.Text.Remove(IPAtext.TextLength - 1) 'Remove the last character from the textbox.
End While
End Select
End Select
End Sub
我也应该注意到,我试图模仿到一定程度的行为this IPA web app。
你有更大的问题,按Ctrl + A已经在RichTextBox中做了一些事情,它会选择所有文本。显然不是你想要的,不是简单的修复。你不能“在中间暂停”,你需要使用一个变量。 –
采取了点。当我想到这件事时,我会想到这一点,但也许我应该向前看 - 再想一想。无论如何,什么类型的变量?我知道在控制台有ConsoleKeyInfo和ConsoleKey,但我不知道我的方式如此舒适地围绕Forms。我可以使用什么函数来读取按键并将其插入该变量中? – Lou
您可能需要使用ProcessCmdKey http://msdn.microsoft.com/en-us/library/yscs73zz(v=vs.110).aspx –