1

首先,这是一张图片。 词搜索

如何在按下鼠标左键时选择多个矩形?

例如,我想写“man”字,所以我点击 m 矩形,将它移动通过 a,在 n 处释放它,然后得到一个带有“man”字的字符串。

我创建了一个Cube类,它存储一个 Rectangle 和一个字符串,并有一个 Drawing 方法,它需要一些参数:一个 Graphic 对象、一个 Pen 和一个 Rectangle。我通过以下方式将它们绘制到面板上:

Cube[,] kockak = new Cube[3,3];
//fill cubes with data...

private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;            

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    kockak[j,i].Draw(g, new Pen(Brushes.Black), new Rectangle(i * 100, j * 100, 100, 100));
                }
            }
            Invalidate();
        }
4

2 回答 2

1

只需在Cube类中添加一些方法来选择多维数据集,如下所示:

public class Cube : Panel {
   public Cube(){
      Selected = false;
   }
   protected override void OnPaint(PaintEventArgs e){
      //Draw your background to make it look like selected first before drawing string on top.
      if(Selected) e.Graphics.FillRectangle(Brushes.Green, ClientRectangle);
      //Draw your string normally as you did here
      //.......
   }
   public bool Selected { get; set;}
   public void Select(){
      Selected = true;
      Invalidate();
   }
   public void Deselect(){
      Selected = false;
      Invalidate();
   }
}
//use the code
yourCube.Select();//select a cube
yourCube.Deselect();//deselect a cube
于 2013-07-12T02:39:41.753 回答
0

关于 King King 答案的一些额外想法:

我会MouseMove在表单中添加事件并检查MouseButton状态。
如果是Left,请将 设置Cude.selceted为 true。

private void TreeViewTeschd_MouseMove(object sender, MouseEventArgs e) {
    if (e.Button == MouseButtons.Left) {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (kockak[j,i].rect.Contains(e.Location)) kockak[j,i].selected = true;
            }
        }
    }
}
于 2013-07-12T07:56:57.087 回答