1

背景画像を持つ UserControl を複数の小さなクリック可能な領域に分割する必要があります。それらをクリックすると、単純にイベントが発生し、画像のどの特定の領域がクリックされたかを判断できます。

明らかな解決策は、透明なラベルを使用することです。ただし、ちらつきが激しいです。そのため、ラベルはこの目的のために設計されていないようです。読み込みに時間がかかりすぎます。

それで、より軽いオプションが存在するかどうか考えていますか?サーフェスを論理的に「スライス」すること。

ただし、エリアの周りに境界線も必要です。

4

1 に答える 1

2

ユーザーコントロールで次のことを行います。

MouseClick += new System.Windows.Forms.MouseEventHandler(this.UserControl1_MouseClick);

そして今、UserControl1_MouseClickイベントで次のことを行います:

  private void UserControl1_MouseClick(object sender, MouseEventArgs e)
  {
     int x = e.X;
     int y = e.Y;
  }

次に、ユーザー コントロールを 10x10 の領域に分割します。

     int xIdx = x / (Width / 10);
     int yIdx = y / (Height / 10);

     ClickOnArea(xIdx, yIdx);

メソッドでClickOnAreaは、各領域で何をするかを決めるだけです。多分2次元配列を使用してAction

境界線については、次のようにします。

  protected override void OnPaint(PaintEventArgs e)
  {
     base.OnPaint(e);

     Graphics g = e.Graphics;
     Pen p = new Pen(Color.Black);
     float xIdx = (float)(Width / 10.0);
     float yIdx = (float)(Height / 10.0);

     for (int i = 0; i < 10; i++)
     {
        float currVal = yIdx*i;
        g.DrawLine(p, 0, currVal, Width, currVal);
     }

     g.DrawLine(p, 0, Height - 1, Width, Height - 1);

     for (int j = 0; j < 10; j++)
     {
        float currVal = xIdx * j;
        g.DrawLine(p, currVal, 0, currVal, Height);
     }

     g.DrawLine(p, Width - 1, 0, Width - 1, Height);
  }
于 2013-08-26T05:10:03.170 に答える