0

PictureBoxLabelの 2 つだけを含む Form があります。

ピクチャ ボックスにマウス クリック イベント ハンドラを追加しました。

this.pictureBox1.MouseClick += picture_MouseClick;

ハンドラー内で、マウス クリックの位置がラベルの境界内にあるかどうかを確認する必要があります。これを行うために、マウス イベントの場所を使用して、その場所がラベルの境界内にあるかどうかを確認しています。

private void picture_MouseClick(object sender, MouseEventArgs e)
{
    if (label1.Bounds.Contains(e.Location))
    {
        MessageBox.Show("FOUND YOU!");
    }
}

十分に簡単に思えるので、これが機能することを期待していましたが、表示されている MessageBox につながるクリック位置 (画像のオレンジ色のボックス) は、ラベルの右下にオフセットされています。

ラベル付きフォーム

これは、マウス イベントが PictureBox に対して相対的であり、Label 境界が Form に対して相対的であるためですか? それともその逆?

ちなみに、画像に表示されているラベルは実行時には非表示になっています。ユーザーが特定の場所をクリックしたかどうかを知る「ハック」方法としてラベルを使用しているだけです。

public Form1()
{
    InitializeComponent();
    this.label1.Visible = false;
    this.pictureBox1.MouseClick += picture_MouseClick;
}

(ラベルの幅を eX から、ラベルの高さを eY から差し引いてみましたが、うまくいきませんでした。)

ありがとうございました、

1月

4

1 に答える 1

1

e.Location、ピクチャ ボックスの左上隅に対するマウスの位置 (ポイント) です。
プロパティは、コントロールのBoundsコンテナーに相対的です。
(そして、この場合、あなたと SLacks が正しく指摘したように、コンテナーはフォームです)

正しい位置を確認するには、このコードで試します(現在テスト済み)

Point p = e.Location;
p.X += pictureBox1.Left;
p.Y += pictureBox1.Top;
if(label1.Bounds.Contains(p))
   .....
于 2012-08-26T22:46:30.993 に答える