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

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

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

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

Visual Studio

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

2回答

1988閲覧

透明なラベルのクリック

moshi

総合スコア90

C#

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

Visual Studio

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2019/03/15 02:39

前提・実現したいこと

PictureBoxの上に透明なラベルを貼り、ラベルがクリックされたらイベントを発生させたいです。

PictureBoxにはアイコンのような画像がいくつかあり、そのアイコンを押すと画面が遷移するように見せかけたくて透明なラベルをアイコンの上に置いて、OnClickでイベントを発生させようとしました。

発生している問題・エラーメッセージ

まず最初にLabelのプロパティのBackColorをTransparentに設定して見ましたが、透過しませんでした。

調べてみるとPictureBoxの子コントロールに設定する必要があるとのことでしたのでそれを試したところラベルは透過しました。

this.pictureBox2.Controls.Add(label1);

ただ、そうすると今度はおそらく子コントロールに設定したせいでラベルのクリックイベントが発生しなくなってしまいました。
どうすればうまく実装できるでしょうか?

補足情報(FW/ツールのバージョンなど)

Windows
C#7.0
VisualStudio2017

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

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

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

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

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

guest

回答2

0

確かめてみましたが、クリックしたらイベントが発生しました。
別の問題だと思います。

投稿2019/03/15 04:10

Zuishin

総合スコア28660

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

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

YAmaGNZ

2019/03/15 04:24

確認せずに回答しましたが、確かにクリックイベント発生しましたね。
moshi

2019/03/15 04:51

ラベルの位置を label1.Top = label1.Top - pictureBox2.Top; label1.Left = label1.Left - pictureBox2.Left; ように指定するようにしたらできました! お騒がせしました
Zuishin

2019/03/15 04:54

それでできるんですか? 嘘でしょう?
YAmaGNZ

2019/03/15 04:57

Formに配置した座標のままでPictureBoxの子にしたので、PictureBoxの表示範囲外になったんじゃないですかね?
Zuishin

2019/03/15 05:00

クリックもしていないということですか?
YAmaGNZ

2019/03/15 05:03

質問内容からすると、PictureBoxのImageで表示している絵の一部分に透明ラベルを配置してってことですから、その位置にあるはずってことでアイコンをクリックしたけど、イベントが発生しない。 実際は、PictureBoxの表示範囲外に配置されているから、クリックできていないってことになってたんじゃないかと思います。
Zuishin

2019/03/15 05:09

なるほど。しばらく考えて理解できました。そういう作り方をしているんですね。
moshi

2019/03/15 05:22

嘘じゃないですよー ラベルのカーソルプロパティを変えてもラベルがあるはずの位置でカーソルも変わらなかったのでYAmaGNZさんの言ってる通りなのだと思います ちなみにこれを作りたかったらどうするのがベストでした? 始めたばかりでこれしか思いつかなかったのですがもっと良いやり方があるなら教えてほしいです。
guest

0

ベストアンサー

Labelを使用する形ではありませんが、下記の方法はどうでしょう?

PictureBoxのクリックイベントにて、クリックされた座標がアイコンが表示されている領域内であれば、アイコンクリックイベントを起こす

C#

1public event EventHandler IconClick; 2 3private void pictureBox1_MouseClick(object sender, MouseEventArgs e) 4{ 5 // アイコンの表示されている領域 6 Rectangle Icon1 = new Rectangle(10, 10, 64, 64); 7 8 // クリックされた座標が領域内か判断する 9 if(Icon1.Contains(e.Location)) 10 { 11 // クリックイベントを起こす 12 IconClick(this, EventArgs.Empty); 13 } 14}

みたいな感じで

投稿2019/03/15 03:58

YAmaGNZ

総合スコア10242

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問