私はに取り組んでおり、このコントロールCustomControl
に登録したいと思います。このコントロールが追加されるに、をModifierKeys
すでに設定しKeyPerview
ました。True
Form
これで名前がBoolean
付けられました。_ctrl
このブール値はtrue
、キーが押されているときであり、キーが離されているときControl
である必要があります。false
Control
私はこれを以下のコンデで達成しようとしましたCustomControl
が、成功しませんでした!
private bool _ctrl = false;
private void MyCustomControl_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Control)
{
_ctrl = true;
}
}
private void MyCustomControl_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Control)
{
_ctrl = false;
}
}
ヒント/解決策はすべて適用されます!
アップデート
わかりました。フォーム自体でキーダウンイベントとアップイベントを実行することにしました。
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control)
{
projectBrowser.ControlKeyIsDown = true; //bool in MyCustomControl
MessageBox.Show("CTRL is PRESSED");
}
}
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control)
{
projectBrowser.ControlKeyIsDown = false; //bool in MyCustomControl
MessageBox.Show("CTRL is DEPRESSED");
}
}
これで、KeyDownイベントがコントロールキーを検出し、メッセージボックスが表示されます。ただし、KeyUp
イベントは機能せず、メッセージボックスは表示されません。何が間違っている可能性がありますか?
KeyUp
次のようにイベントを変更すると、キーアップが検出されるようです。
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.RControlKey || e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.Control)
{
projectBrowser.ControlKeyIsDown = false;
e.Handled = true;
}
}