我正在製作一個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 –