2012-03-09 28 views
3

我目前正在維護一個VB6應用程序,但對VB6知之甚少。 我遇到了一些讓我困惑的代碼。Escape成爲Ctrl-Z - 但爲什麼?

Private Sub Form_KeyPress(KeyAscii As Integer) 
    KeyAscii = Asc(UCase(Chr(KeyAscii))) 
    If KeyAscii = 27 And TypeOf Me.ActiveControl Is TextBox Then 
     KeyAscii = 0 
     SendKeys "^Z" 
    End If 
End Sub 

這是我知道的:當按下退出按鈕的代碼時調用的按Ctrl +ž一個按鍵。 以下是我不知道的:爲什麼?我在點擊轉義後進行調試,除了if語句的內容被運行外,我沒有做太多的事情,除了短暫的光標顯示之外。

有誰知道這個的重要性嗎?即發送一個Ctrl + Z按鍵組合。

+0

在當前文本框上做非常笨拙的方法。此外,它會重做第二個Esc被按下。如果在撤消隊列中有任何東西,最好使用帶有'EM_CANUNDO'和'EM_UNDO'的API。 – wqw 2012-03-09 14:34:26

回答

2

The Ctrl + Z按鍵將通過鍵盤焦點傳遞給控件。某些控件對撤消最近的編輯提供了有限的支持:特別是文本框。

因此,這可能是一種將非標準密鑰(Esc)與撤銷最新編輯操作相關聯的快捷方式。您不會在VB6代碼中找到任何更多的按鍵源代碼,因爲按鍵實際上是由Windows控件處理的。

+0

謝謝馬克。撤消是有道理的。我明天會嘗試驗證。 – onefootswill 2012-03-09 11:16:43

4

Ctrl鍵 + Ž是結束文件的字符爲基於DOS的系統不同的是(通常是,儘管可配置)Ctrl鍵 + d在類UNIX系統。

但是,我認爲在這種情況下更可能是撤消命令,因爲它發生在文本框內。

這將是我第一次猜測,您需要發送該按鍵來恢復您所做的任何更改。檢驗這一理論

一種方法是使在文本框中的變化,然後再做按Ctrl +ž,看它是否會恢復。

當然,給定的應用程序可以以任何它認爲合適的方式自由解釋按鍵。您應該仔細查看代碼,看看有什麼Ctrl + Z是爲了做。

+0

+1雖然onefootswill可能無法查看全部代碼以查看CTRL-Z的功能,因爲按鍵可能會傳遞到本機Windows控件中,例如,文本框(其中有一些有限的內置支持來撤銷最近的編輯)。所以這將涉及到微軟的VB6運行時庫,然後逐步進入Windows源代碼:) – MarkJ 2012-03-09 06:32:04

+0

@paxdiablo謝謝,這是有道理的。 – onefootswill 2012-03-09 11:17:30

1

你的問題是出在應用方面的,所以沒有辦法回答是肯定的,但是,從歷史的角度,按Ctrl + ž是文件標記(EOFASCII 26)和的ASCII末數字設備公司和DOS世界曾經被用於逃生的地方(ESCASCII 27),現在已經被廣泛使用。也就是說,爲了擺脫這種情況,用戶使用Ctrl + Z而不是敲打退出鍵。

我懷疑這是剩餘的一段兼容性代碼。

+0

謝謝簡單。歷史背景很有幫助。這是一個表格應用程序,所以與控制檯相關的東西並不適用。歡呼聲 – onefootswill 2012-03-09 11:19:39