5

ICSharpCode.TextEditor のオートコンプリート機能を作成しようとしています。しかし、fileTabs_KeyDown は Enter/Backspace/Tab/... を認識しません。

アクティブなエディターに新しい KeyEventHandler を追加しようとしましたが、KeyDown 関数が呼び出されません。

Windows メッセージを直接要求できるかもしれませんが、誰もが e.KeyDown または e.KeyPress イベントしか使用していないため、これを行う方法がわかりません。

助けてください...

4

3 に答える 3

8

ICSharpCode.TextEditor は複合コントロールです。イベント ハンドラーをメインのテキスト エディターにアタッチすると、イベントを受け取りません。代わりに、textEditor.ActiveTextAreaControl.TextArea のイベントにアタッチする必要があります。

また、テキスト エディター自体が既にイベントを処理しています。キーの押下をインターセプトするには、特別なイベント textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler を使用します。

于 2009-09-09T13:45:13.073 に答える
0

Enter / Backspace / Tab キーを押したときに KeyPress、KeyDown、および KeyEventHandler が起動しないようにします。
これらのキーの押下をトラップするには、KeyUp イベントを処理する必要があります。
その後、KeyEventArgs.KeyCode の値を確認できます。

于 2010-07-28T07:16:39.413 に答える
0

ダニエルが言ったように、「ActiveTextAreaControl.TextArea」イベントを使用して、Enter、Space、Combinations などのキーをキャプチャするには、次のようなコードを使用して CTRL + Space の組み合わせをキャッチします。

public frmConexon()
    {
        InitializeComponent();
        this.txtEditor.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(TextArea_KeyUp);
    }

    void TextArea_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Space && e.Control)
        {
            TextArea S = (TextArea)sender;
            MessageBox.Show(string.Format("CTRL + Spacio ({0})", S.Caret.ScreenPosition.ToString()));
        }
    }

この例では、キャレットの画面座標を取得しています。そこにポップアップ ウィンドウを表示したいからです。

于 2013-05-21T20:01:38.537 に答える