質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

2452閲覧

C# ToolStripMenuItem

quiz3

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

2クリップ

投稿2020/03/14 23:23

編集2020/03/14 23:52

C# Visual Studio Community 2017 Ver 15.8.9

Form内のTextBox内で右クリックすると「切り取り、コピー、貼り付け、削除」の4つの処理を行いたいと思っています。

デザイン画面でToolStripMenuItemプロパティイベントのClickに関数「t_click」を設定しています。

c#

1private void t_click(object sender, EventArgs e) 2{ 3 ToolStripMenuItem it = (ToolStripMenuItem)sender; 4 MessageBox.Show(it.Text) 5}

クリックしてもt_click関数に入らないときがあります。
例えば、右クリック→「切り取り」はclickイベントが発生しますが、右クリック→「切り取り」だとclickイベントが発生しません。これはランダムに発生し、必ず切り取りでイベントが発生するわけもありません。

https://dobon.net/vb/dotnet/control/cmsourcecontrol.html
と関連するかと思って中段あたりの「子項目をクリックした時、SourceControlがnullになる問題」も読みましたが欲しいイベントはContextMenuStripではないので今回は参考にならないかと判断しました。

毎回ToolStripMenuItemのClickイベントを発生させ、t_click関数を通るようにするにはどうすればよいでしょうか?
抜けている箇所を教えてください。
よろしくお願いします。

s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/03/14 23:32

そのToolStripMenuItemとは、どのコントロールに実装されてるもんでしょうか。 適切にイベントを設定しているのであれば、そのようなことは起こりません 提示されたコードが問題じゃなく、その他の場所に問題があるか、あるいはあなたの勘違いかと思います
quiz3

2020/03/14 23:53

ご指摘ありがとうございます。 実際に記述しているイベント情報を追加しました。
y_waiwai

2020/03/14 23:59

くりかえしますが、どのコントロールのToolStripMenuItemなんでしょうか。 TextBoxにはありませんが。
Zuishin

2020/03/15 00:13 編集

ToolStripMenuItem というのはコントロールに実装されているものではなく、そういうコンポーネントです。ツールボックスに ContextMenuStrip というのがあると思いますが、その子要素です。TextBox をプロパティグリッドで見ると、ContextMenuStrip というプロパティがあり、そこにセットします。 https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.contextmenustrip?view=netframework-4.8
quiz3

2020/03/15 00:27

失礼いたしました。 おっしゃる通り、ContextMenuStripの子要素としてToolStripMenuItemを使用しています。
y_waiwai

2020/03/15 00:29

ならそれを質問に追記しましょう。 今のままでは意味不明です
Zuishin

2020/03/15 00:32

まじめな質問ではなくただのクイズで自己解決すると思いますが、右クリックした後出てくるメニューの外をクリックするとメニューは消えます。その場合イベントハンドラを通りません。自己解決どうぞ。
quiz3

2020/03/15 00:35

>メニューの外をクリックするとメニューは消えます。その場合イベントハンドラを通りません。 そのようなことはしていません。
y_waiwai

2020/03/15 00:36

> 例えば、右クリック→「切り取り」はclickイベントが発生しますが、右クリック→「切り取り」だとclickイベントが発生しません。 これも意味不明ですね。双方なにが違うんでしょうか
Zuishin

2020/03/15 00:41 編集

ではショートカットキーを作ってキーボードから選択してみてください。「切り取り(&X)」にすればメニューを出した後 x で選択できます。それなら外しません。
guest

回答2

0

自己解決

解決いたしました。
ありがとうございました。

投稿2020/03/15 01:49

quiz3

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/03/15 02:40

別の答えを思いつきませんでしたか?
guest

0

解決法ではないですが、

新規Formを作って、TextBoxひとつ、ContextMenuStripひとつのみを配置し、それぞれ設定して、
ToolStripMenuItemのClickイベントがどうなるか確認してみましょう。

それでClickイベントがおっしゃるように実行されない、ということはあるでしょうか。

それで正常に実行されるのであれば、あなたが作成中のフォームの構成を順番にそこに移植していって、イベント発生をチェックすればなにが原因になっているのか、が判明すると思います。

投稿2020/03/15 00:41

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quiz3

2020/03/15 01:01

ありがとうございます。 ブレークポイントを張ってイベント発生のチェックを行いましたが、 1つ目のメニューアイテムではイベント発生し、その後別のメニューアイテムを選択するとイベントが発生したりしなかったり、また別のメニューアイテムを選択するとイベント発生したりとランダムな状態です。 ダブルクリックなどの短時間に複数回クリックしているわけではないし、ボタンはクリック毎にイベントが発生しているので、ToolStripMenuItemのプロパティの指定が悪いのだと理解していますが、どこの指定漏れがわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問