绘制鼠标单击的矩形

时间:2012-08-13 08:20:23

标签: c# click mouse panel

我是C#的新人 我希望在面板上有鼠标点击的地方出现一个矩形

这是我的代码:

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

       if (radioButton1.Checked == false)
       {

                ((Panel)sender).Invalidate(new Rectangle(x * 40, y * 40, 40, 40));
       }
       else if (radioButton2.Checked == true)
       {
                return;
       }
}

我想知道如何更改矩形的颜色? 如果我的代码错误,请告诉我。 感谢。

2 个答案:

答案 0 :(得分:4)

您的绘图应该在面板的Paint事件处理程序中执行。单击面板时,创建矩形(在面板的MouseUp事件中)并将其存储在矩形集合(例如字典)中。然后刷新面板。在面板的Paint事件中,绘制所有矩形。这是一个简单的例子:

Dictionary<Color, List<Rectangle>> rectangles = new Dictionary<Color, List<Rectangle>>();

private void panel1_Paint(object sender, PaintEventArgs e)
{
    //The key value for the dictionary is the color to use to paint with, so loop through all the keys (colors)
    foreach (var rectKey in rectangles.Keys)
    {
        using (var pen = new Pen(rectKey))     //Create the pen used to draw the rectangle (using statement makes sure the pen is disposed)
        {
            //Draws all rectangles for the current color
            //Note that we're using the Graphics object that is passed into the event handler.
            e.Graphics.DrawRectangles(pen, rectangles[rectKey].ToArray());                    
        }
    }
}

//This method just adds the rectangle to the collection.
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        Color c = getSelectedColor();     //Gets a color for which to draw the rectangle

        //Adds the rectangle using the color as the key for the dictionary
        if (!rectangles.ContainsKey(c))   
        {
            rectangles.Add(c, new List<Rectangle>());
        }
        rectangles[c].Add(new Rectangle(e.Location.X - 12, e.Location.Y - 12, 25, 25));    //Adds the rectangle to the collection
    }

    //Make the panel repaint itself.
    panel1.Refresh();
}

答案 1 :(得分:2)

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
    Graphics g = panel1.CreateGraphics();
    g.DrawRectangle(new Pen(Brushes.Black),  
    new Rectangle(new Point(e.X, e.Y), new  
        Size(100, 100)));
}

您可以更改Brushes.Black部分代码中的颜色,根据需要进行更改