0

KeyUp イベントをキャッチする DataGridView があります。これを使用してキーボード コピー (ctrl-c) をキャプチャし、コピーしたテキストに対して独自の書式設定を実行します。最初に「C」キーを離すとすべて正常に機能しますが、「C」を押したまま「ctrl」を最初に離すと、イベントがトリガーされません。以下はイベントのコードです。コピー コンテキスト メニュー項目で既に処理していますが、キーボード ショートカットを使用するユーザーがいることがわかっており、すべてが期待どおりに動作することを望んでいます。どんなアイデアでも大歓迎です。

  /// <summary>
  /// Key up event handler
  /// </summary>
  void Control_KeyUp(object sender, KeyEventArgs e)
    {          
        if (e.KeyCode == Keys.C && e.Control == true )
        {
            CopyToClipboard(dgDS408Parameter.CurrentCell.EditedFormattedValue.ToString());               
        }
    }       
4

3 に答える 3

1
public bool CtrlPressed=false;

void Control_KeyUp(object sender, KeyEventArgs e)
{          
    if (e.KeyCode == Keys.C && ctrlPressed == true )
    {
        CopyToClipboard(dgDS408Parameter.CurrentCell.EditedFormattedValue.ToString());                           
    }
    CtrlPressed=false;
}   

void Control_KeyDown(object sender, KeyEventArgs e)
{          
    if (e.Control == true )
    {
        CtrlPressed=true;
    }
}

テストではなく、頭の中で書いたのですが、アイデアはこんな感じです。

于 2012-05-28T11:22:00.593 に答える
0

あなたが書いたコードに論理的な誤りがあると思います

e.KeyCode == Keys.C && e.Control == true

これは、Any keyがkeyUpイベントを起動するときに、「C」と「Cnt」の両方のキーが押された状態である必要があることを意味します。

したがって、ここで何が起こるかは、Cnt + Cを押しても問題ありませんが、最初に「ctrl」を離すと、条件が正しくなくなります。

e.KeyCode == Keys.C && e.Control == true

そのため、データはクリップボードにコピーされません

于 2012-05-28T11:23:35.503 に答える
0

キーアップ イベントを使用する理由 他のすべてのプログラムは、キーダウン時に同じことを行います。イベントを からKeyUpに変更するKeyDownと、すべてがうまくいきます。

于 2012-05-28T12:15:36.067 に答える