WinForms控件在UserControl中设置可点击区域

时间:2013-08-25 19:02:05

标签: winforms user-controls label

需要将带有背景图片的UserControl划分为多个小的可点击区域。单击它们应该只是引发一个事件,允许确定单击图片的哪个特定区域。

显而易见的解决方案是使用透明标签。但是,它们严重闪烁。因此看起来标签不是为此目的而设计的,它们需要花费太多时间来加载。

所以我在想是否存在更轻的选择?逻辑上“切片”表面。

但我还需要在这些区域周围设置边框。

1 个答案:

答案 0 :(得分: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方法中,您只需要决定在每个区域做什么。也许使用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);
  }