2012-03-09 6 views
3

私は現在VB6アプリケーションを管理していますが、VB6についての知識はほとんどありません。 私は困惑しているコードを見つけました。エスケープは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 +Zのキー操作を呼び出しています。 私は知らないことがあります:なぜですか?私はエスケープをクリックしてからデバッグし、if文の中身は別にして、カーソルのちらつき表示以外には私が見逃すことのないようにしました。

誰でもこのことの重要性を知っていますか?すなわち、を送信する。 + Zキーの組み合わせ。

+0

現在のテキストボックスで取り消しを行う方法が非常に不器用です。また、Escを押すと再度実行されます。アンドゥ・キューに何かがある場合は、EM_CANUNDOでAPIを使用してからEM_UNDOを使用するのが最適です。 – wqw

答えて

2

Ctrlキー + Zキーストロークは、キーボードフォーカスを持つコントロールに渡されます。一部のコントロールでは、最近の編集内容を元に戻すためのサポートが限られています。

非標準のキー(Esc)に最新の編集を元に戻す操作を迅速かつ簡単に行う方法です。 keypressは実際にWindowsのコントロールによって処理されているので、VB6コードではキープルのソースコードはもう見つからないでしょう。

+0

ありがとうございました。元に戻すことは理にかなっています。私は明日検証しようとします。 – onefootswill

4

はCtrl +Zは、UNIX系のシステムでは(通常は、設定可能なが)はCtrl +Dとは異なり、DOSベースのシステム用のファイル終了文字です。

しかし、このケースでは、テキストボックス内で起こっていることを考えれば、元に戻すコマンドである可能性が高いと思います。

これは私が最初に推測したことです。変更を元に戻すには、そのキーストロークを送信する必要があります。その理論をテストするための

一つの方法は、それが戻りかどうかを確認するためにはCtrl +Zを行い、その後、テキストボックスに変更を加えることであろう。

もちろん、与えられたアプリケーションは、キーストロークがどのように見えるか自由に解釈できます。 Ctrl + のコードを調べてください。確かに答える方法はありませんので、ご質問は、アプリケーションのコンテキストの外にある、しかし、歴史的な観点から、Ctrlキー + Zはファイルマーカー(EOFASCII 26)のASCII終わりです

+0

+1キーストロークはおそらくネイティブのWindowsコントロールに渡されるため、onefootはおそらくCTRL-Zが何をするかを見るために*すべての*コードを調べることはできません。テキストボックス(これには、最近の編集を取り消すためのサポートが組み込まれています)。つまり、MicrosoftのVB6ランタイムライブラリにステップインし、Windowsのソースコードを実行することです。 – MarkJ

+0

@paxdiabloありがとうございます。 – onefootswill

1

とで(ESCASCII 27)が現在よく使用されている場所で使用されていました。すなわち、状況から逃れるために、ユーザーは、エスケープキーを押すのではなく、Ctrl + Zと入力する必要がありました。

残念なことに、これは互換性コードの一部です。

+0

ありがとう簡単です。歴史的な文脈が役立ちます。これはフォームアプリなので、コンソール関連のものは実際には適用されません。乾杯。 – onefootswill

関連する問題