TextBoxコントロールのContextMenuやContextMenuStripプロパティ(以下、ContextMenuStripプロパティ)を使うことで、独自のコンテキストメニューを表示することができます。しかしContextMenuStripプロパティを設定していたとしても、設定していない時に表示されるデフォルトのコンテキストメニューが表示されてしまうことがあります。具体的には、TextBoxコントロール上でマウスの右ボタンを押したままTextBoxの外でボタンを離すと、デフォルトのコンテキストメニューが表示されます。ここではこの問題を回避する方法を紹介します。
この問題の解決法は、「TextBoxで右クリックしてもコンテキストメニューが表示されないようにする」にいただいたコメントや、「.net - How do you stop a textbox showing the default context menu? - Stack Overflow」にあります。これらを参考にさせていただくと、TextBoxコントロールのMouseDownイベントが発生した時に右ボタンが押されているかを調べ、押されていればTextBoxのCaptureプロパティをFalseにしてマウスのキャプチャを解除するという方法が最も簡単のようです。
'TextBox1のMouseDownイベントハンドラ Private Sub TextBox1_MouseDown(sender As Object, e As MouseEventArgs) _ Handles TextBox1.MouseDown 'マウスの右ボタンが押されているか調べる If e.Button = MouseButtons.Right Then 'マウスのキャプチャを解除する DirectCast(sender, Control).Capture = False End If End Sub
//TextBox1のMouseDownイベントハンドラ private void TextBox1_MouseDown(object sender, MouseEventArgs e) { //マウスの右ボタンが押されているか調べる if (e.Button == MouseButtons.Right) { //マウスのキャプチャを解除する ((Control)sender).Capture = false; } }