3

WinForm TextBox のコンテキスト メニューで奇妙なことに気付きました。TextBox コントロールには、切り取り、コピー、貼り付けなどを含む既定のコンテキスト メニューがあります。このメニューを自分のメニューに置き換えようとしています。1 つのフォームとフォーム上に 1 つのテキスト ボックスを持つ単純なテスト アプリケーションを作成し、次のコードを追加しました。

Form1()
{
    InitilizeComponent();
    ContextMenu menu = new ContextMenu();
    menu.MenuItems.Add("Hello World", HelloWorld_Clicked);
    textBox1.ContextMenu = menu;
}

private void HelloWorld_Clicked(object sender, EventArgs e)
{
    MessageBox.Show("Hello World!");
}

これを実行すると、テキスト ボックスを右クリックし、マウスを動かさずにマウス ボタンを放すと、コンテキスト メニューが表示されます。ただし、テキストボックスの上でマウスの右ボタンを押したままにしてから、マウスをテキストボックスの外に移動し、最後にマウスボタンを放すと、デフォルトのテキストボックスのコンテキストメニューが表示されます。

これをやめさせることは可能ですか?

更新: システムが Windows XP Pro SP3 および .Net 3.5 で実行されている場合に違いが生じる場合。

4

2 に答える 2

1

テキストボックスの外でマウスボタンを離すと、テキストボックスではなくフォームのコンテキストメニューが開くと思います。私はこれをテストしていません、それは単なる推測です。このようなコードを使用してフォームのコンテキストメニューを設定できる場合もありますが、私はそれを自分で試していません。

Form1()
{
    InitilizeComponent();
    ContextMenu menu = new ContextMenu();
    menu.MenuItems.Add("Hello World", HelloWorld_Clicked);
    textBox1.ContextMenu = menu;
    this.ContextMenu = menu;
}

private void HelloWorld_Clicked(object sender, EventArgs e)
{
    MessageBox.Show("Hello World!");
}
于 2012-10-31T16:27:29.620 に答える
1

あなたが試すことができる1つのこと:

[DllImport("user32.dll")]
public static extern bool ReleaseCapture();

void textBox1_MouseDown(object sender, MouseEventArgs e) {
  if (e.Button == MouseButtons.Right) {
    ReleaseCapture();
  }
}
于 2012-10-31T17:29:45.443 に答える