2016-07-18 15 views
1

まず、私は次の回答https://stackoverflow.com/a/7731051/626442を見てきましたが、私のニーズには十分ではありません。KeyDownイベントでのアスタリスクキーの検出

私は基本的なインテリセンス機能を備えたエディタを作成しました(洞察のためにA New and Full Implementation of Generic Intellisenseを参照)。私はこのエディタを使用していくつかの基本的なSQL Serverの補完を実装しましたが、*キーを入力するとIntellisenseがポップアップしていきます。私はこれを防止したい。

private void TextArea_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (!e.Control && e.KeyCode == Keys.Space || e.Shift) 
     return; 

    IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue); 
} 

が、私は最近、私のコントロールを再開発していると私は洞察力のウィンドウを表示しないときとするときに、既存の制限を上構築したい:現在、私は次の操作を行います。私が欲しいもののサブセットは次のようになります:

+------------------------------+-------------------+ 
¦ ¦ Modifier ¦ Keys  ¦ Show Completion ¦ 
¦---+------------+-------------¦-------------------¦ 
¦ 1 ¦ Shift  ¦ None  ¦ No    ¦ 
¦ 2 ¦ Shift  ¦ * (see note)¦ No    ¦ 
¦ 3 ¦ None  ¦ Space  ¦ No    ¦ 
¦ 4 ¦ Any  ¦ Arrow Keys ¦ No    ¦ 
+------------------------------+-------------------+ 

その他「*」e.KeyCodeD8であることに注意してください。これは明らかにキーボードが不変でロケールに依存しないため、十分ではありません。

基本的に私は私のSQLのインテリセンスは、SQL Server Management Studioの者(SQLMS)のように行動したい、私の質問は以下のとおりです。

  1. どのように私は、キーボードのロケールに依存しない押されたアスタリスク文字キーを検出することができます。

  2. intellisenseウィンドウのポップアップを抑制し、SQLMSのように動作させるには、他にどのような主な変更を加える必要がありますか?

私は

private void TextArea_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if ((Control.ModifierKeys & Keys.Control) != Keys.Control && <Detect Space Bar> || 
     (Control.ModifierKeys & Keys.Shift) == Keys.Shift && e.KeyChar == '*') 
    return; 

    IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue); 
} 

を使用して試してみました。しかし、その後、私はスペースバーを検出するという問題があります。

お時間をいただきありがとうございます。

+0

私は自分自身がなぜキー押しがスペースで苦労しているのだろうと思っていますか?それをフォームのkeypressに移動して、テキスト領域が選択されている場合はそれだけを行うようにすることができます – BugFinder

+0

戦略をリファクタリングする場合は、より良いアクションコースを決定できます。 –

+0

@CallumLinington行く... – MoonKnight

答えて

1

変更されたコードを確認してください。それがうまくいくことを願っています

private void TextArea_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if ((Control.ModifierKeys & Keys.Contro) != Keys.Control && e.KeyChar == ' ' || 
     (Control.ModifierKeys & Keys.Shift) == Keys.Shift && e.KeyChar == '*') 
    return; 

    IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue); 
} 
+0

私は困っているのは<<スペースバーの検出>です。 – MoonKnight

+0

スペースバーイベントを検出するためにe.KeyCode == Keys.Spaceを確認しましたか? – Dotnetpickles

+0

Dude、 'KeyPressEventArgs'には' KeyCode'プロパティがありません。御時間ありがとうございます。 – MoonKnight

関連する問題