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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

5537閲覧

C# 自作イベントが有効にならない(コンテキストメニューが表示されない)

sobue

総合スコア329

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/05/05 02:47

編集2019/05/06 13:29

環境 Wondows10 64bit
Visual Studio 2019
.NET FramWork 4.7.2

C#

1lstView.MouseClick += new MouseEventHandler(LstView_MouseClick);//ListViewのマウスクリックイベント 2lstView.MouseDown += new MouseEventHandler(LstView_MouseDown);//ListViewのマウスダウンイベント 3lstView.MouseMove += new MouseEventHandler(LstView_MouseMove);//ListViewのマウスムーブイベント

上記のコードのうち「lstView.MouseClick += new MouseEventHandler(LstView_MouseClick);」だけがイベント登録されず呼び出しができません。(※アイテム選択時のみ、認識している状態)
呼び出しができるようにしたいのですがどのようにしたらよいのでしょうか?

呼び出し元

C#

1 private void LstView_MouseClick(object sender, MouseEventArgs e) 2 { 3      //必要な処理 4    }

form上のlstViewのバックカラーを赤色にし、赤色のところで、クリックないし、右クリックしてもイベントが発生しないです。
コンテキストメニューも表示されませんでした。

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

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

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

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

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

Zuishin

2019/05/05 02:51 編集

聞く必要ないことを聞いたのでこのコメントは削除しました。
guest

回答2

0

ベストアンサー

どこをクリックしてイベントが発生しないと判断されていますか?
MouseDown、MouseMoveはアイテムがない場所でも発生しますが、MouseClickはアイテムがあるところじゃないと発生しません。

アイテムのないところでClickをというのであれば、MouseUpで処理するなど別の方法を検討してください。

投稿2019/05/05 03:41

編集2019/05/05 11:27
YAmaGNZ

総合スコア10240

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

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

sobue

2019/05/05 03:44

ListViewの背景を別の色に塗りつぶして、確認してみましたが発生しませんでした。
YAmaGNZ

2019/05/05 03:46

どこをクリックするかと背景色にどんな関係があるのか分かりません。
sobue

2019/05/05 03:59

失礼しました。form上のlstViewのバックカラーを赤色にし、赤色のところで、クリックないし、右クリックしてもイベントが発生しないです。 コンテキストメニューも表示されませんでした。
YAmaGNZ

2019/05/05 04:37

アイテムのないところでのクリックに対するイベントが発生しないと読めますが、回答でアイテムのある場所じゃないとClickイベントは発生しないと書きました。 発生しないのでイベントハンドラが呼ばれるはずがありません。 また、コンテキストメニューはどのようにして表示させようとしているのでしょうか? ListView.ContextMenuStripに設定した場合、アイテムのない場所で表示されました。
sobue

2019/05/05 10:01

アイテムのないところでのクリックに対するイベントが発生しないと読めますが、回答でアイテムのある場所じゃないとClickイベントは発生しないと書きました。 発生しないのでイベントハンドラが呼ばれるはずがありません。   ⇒そうなのですね。べんきょうになります。 また、コンテキストメニューはどのようにして表示させようとしているのでしょうか? ListView.ContextMenuStripに設定した場合、アイテムのない場所で表示されました。  ⇒ 以下のようにコンテキストメニューは登録しようとしています。 ContextMenuStrip contextMenuListView = new ContextMenuStrip(); contextMenuListView.TopLevel = false; lstView.ContextMenuStrip = contextMenuListView; this.Controls.Add(lstView);
YAmaGNZ

2019/05/05 11:25

contextMenuListView.TopLevel = false; とした場合、親コントロールを設定しなければなりません。 というか、TopLevelを設定する機会はあまりありません。 ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip(); ToolStripMenuItem menuItem = new ToolStripMenuItem("項目1"); contextMenuStrip1.Items.Add(menuItem); listView1.ContextMenuStrip = contextMenuStrip1; とすれば表示されます。
sobue

2019/05/05 12:36

ありがとうございます。できました。
退会済みユーザー

退会済みユーザー

2019/05/05 13:02

一体何が問題だったのでしょう? どこまでできていて、何ができてなかったのか、何をしたら解決したのかを書いてからクローズ願います。
YAmaGNZ

2019/05/05 13:29

最終的にやりたかったことってコンテキストメニューを表示することだったのですか?
sobue

2019/05/06 13:26

やりたかったことは、マウスクリックイベントを起動させることでした。 1.Itemがあるところでないとマウスクリックイベントが発生しないということを教えていただいたので解決 2.コンテキストメニューが表示されないのは、formにcontextmenustripをセットしていたため、表示されなかったのが原因です。 そのため、イベントが発生しないと勘違いしていたためわかりづらい質問になってしまいました。 お手数おかけいたしました。 最終ソース ContextMenuStrip contextMenuListView = new ContextMenuStrip(); this.contextMenuListView.Items.Add("AAA", null, this.登録するAイベント); this.contextMenuListView.Items.Add("BBB", null, this.登録するBイベント); lstView.ContextMenuStrip = contextMenuListView;     this.Controls.Add(lstView);
guest

0

本当は質問に対するコメント欄に書くべきことですが、コメント欄に画像は貼れませんのでここに書きます。

何のイベントですか? ListView? そうだとしても ListView というのは昔の VS2008 の時代でも以下のように多々あります。きちんと情報を書きましょう。

イメージ説明

【追記】

Windows Forms アプリ用の ListView ということでいいのですね。

自作イベントが有効にならない

「自作」というのが気になりますが、質問者さん自作のカスタムイベントではなくて、ListView 標準の MouseClick イベントということであれば、YAmaGNZ さんが言われる通りアイテムのない場所ではイベントは発生しないようです。

単純に以下のようにアイテムを追加して試してみたらどうなりますか? 追加したアイテムの部分をクリックすると設定したイベントハンドラに制御は飛んできて、

イメージ説明

以下の通りの結果になります。お試しください。

イメージ説明

【追記2】

質問と直接関係ない話で何ですが、イベントとそのハンドラの設定にはインテリセンスを使うことをお勧めします。コード画面で += まで入力すると以下のように Tab キーを押すよう促され、

イメージ説明

言われた通り Tab キーを押せば、以下の通りコードが自動生成されるはずです。

イメージ説明

投稿2019/05/05 03:22

編集2019/05/05 05:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sobue

2019/05/05 04:02 編集

失礼いたしました。記載しました。
sobue

2019/05/05 05:32 編集

やはり、自作だと同じように動かないのでしょうか?試しにformデザインに最初から置いてから実装したらうまく行きます。 アイテムを追加したら、アイテムのところだけは反応します。アイテムのないところは反応しません。
退会済みユーザー

退会済みユーザー

2019/05/05 05:33

「自作」とは何を言ってますか? 質問に書いてないことだと分かりませんけど。
sobue

2019/05/05 10:05

ListViewに対して一のイベントの紐づけのことを言っています。
退会済みユーザー

退会済みユーザー

2019/05/05 10:22

> ListViewに対して一のイベントの紐づけのことを言っています。 何を言ってるのか意味不明ですが、ListView 標準の MouseClick イベントのことであれば上に書いた通り何の問題もなく、期待通りイベントは発生してます。私のレスを読みました? 何があなたのケースと違うのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問