В приложении я пытаюсь нарисовать фигуру с заданными пользователем шириной и высотой.Затем, когда он рисует, я пытаюсь изменить его толщину.
Примерно так:
Все хорошо, пока я не сохраню его как объект и не перерисовываю его снова и снова.Когда я пытаюсь что-то нарисовать снова и пытаюсь увеличить толщину обводки и уменьшить ее размер, он оставляет чертеж в СЕРЫМ, который применим только тогда, когда чертеж принят. Красная линия - это текущая фигура, а серый на его спине - моя проблема.Я еще не принял это.
Вот код:
Основная форма
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
cbox_Grid.Checked =true;
pictureBox_Canvass.Paint += draw.ShowGrid;
}
Draw draw = new Draw();
Shape s = new Shape();
Shape.Buttons buttons = new Shape.Buttons();
int rX, rY, rW, rH; //Rectangle Variables
int strokeRect;
private void cbox_Grid_CheckedChanged(object sender, EventArgs e)
{
if (cbox_Grid.Checked)
{
pictureBox_Canvass.Paint += draw.ShowGrid;
pictureBox_Canvass.Paint += DrawAll;
pictureBox_Canvass.Refresh();
}
else
{
pictureBox_Canvass.Paint += draw.ClearCanvass;
pictureBox_Canvass.Paint += DrawAll;
pictureBox_Canvass.Refresh();
}
}
#region Shape Buttons
private void btn_Rectangle_Click(object sender, EventArgs e)
{
this.tbox_Width.Text = "60";
this.tbox_Height.Text = "30";
buttons = (Shape.Buttons)System.Enum.Parse(typeof(Shape.Buttons), "rectangle");
HideButtons();
ShowSettings();
}
private void btn_Square_Click(object sender, EventArgs e)
{
buttons = (Shape.Buttons)System.Enum.Parse(typeof(Shape.Buttons), "square");
this.tbox_Width.Text = "60";
this.tbox_Height.Text = "60";
HideButtons();
ShowSettings();
}
private void btn_Circle_Click(object sender, EventArgs e)
{
buttons = (Shape.Buttons)System.Enum.Parse(typeof(Shape.Buttons), "circle");
this.tbox_Width.Text = "60";
this.tbox_Height.Text = "60";
HideButtons();
ShowSettings();
}
private void btn_Ellipse_Click(object sender, EventArgs e)
{
buttons = (Shape.Buttons)System.Enum.Parse(typeof(Shape.Buttons), "ellipse");
this.tbox_Width.Text = "60";
this.tbox_Height.Text = "30";
HideButtons();
ShowSettings();
}
private void btn_Triangle_Click(object sender, EventArgs e)
{
buttons = (Shape.Buttons)System.Enum.Parse(typeof(Shape.Buttons), "triangle");
this.tbox_Width.Text = "60";
this.tbox_Height.Text = "60";
HideButtons();
ShowSettings();
}
#endregion
#region Draw Button Event
private void btn_Draw_Click(object sender, EventArgs e)
{
pictureBox_Canvass.Refresh();
if(cbox_Grid.Checked)
{
switch (buttons)
{
case Shape.Buttons.rectangle:
pictureBox_Canvass.Paint += draw.ShowGrid;
pictureBox_Canvass.Paint += DrawAll;
pictureBox_Canvass.Paint += DrawRect;
pictureBox_Canvass.Refresh();
break;
case Shape.Buttons.square:
break;
case Shape.Buttons.circle:
break;
case Shape.Buttons.ellipse:
break;
case Shape.Buttons.triangle:
break;
}
}
else
{
switch (buttons)
{
case Shape.Buttons.rectangle:
pictureBox_Canvass.Paint += DrawAll;
pictureBox_Canvass.Paint += DrawRect;
pictureBox_Canvass.Refresh();
break;
case Shape.Buttons.square:
break;
case Shape.Buttons.circle:
break;
case Shape.Buttons.ellipse:
break;
case Shape.Buttons.triangle:
break;
}
}
}
#endregion
#region PaintEvents
public void DrawRect(object sender, PaintEventArgs e)
{
rX = (((486 / 2) - (Convert.ToInt32((Convert.ToInt32(tbox_Width.Text) * 96) / 25.4)) / 2));
rY = (((486 / 2) - (Convert.ToInt32((Convert.ToInt32(tbox_Height.Text) * 96) / 25.4)) / 2));
rW = (Convert.ToInt32((Convert.ToInt32(tbox_Width.Text) * 96) / 25.4));
rH = (Convert.ToInt32((Convert.ToInt32(tbox_Height.Text) * 96) / 25.4));
Shape shape = new Shape();
strokeRect = trackBar_Stroke.Value;
shape.strokeThickness = strokeRect;
shape.acceptRectangle(Color.Red, strokeRect, new PointF(rX, rY), rW, rH, e.Graphics);
}
public void AcceptRect(object sender, PaintEventArgs e)
{
Shape shape = new Shape();
shape.color = Color.Gray;
shape.strokeThickness = this.strokeRect;
shape.points = new PointF(rX, rY);
shape.width = rW;
shape.height = rH;
shape.DrawRectangle(Color.Gray, strokeRect, new PointF(rX, rY), rW, rH, e.Graphics);
s._shapes.Add(shape);
}
#endregion
public void DrawAll(object sender, PaintEventArgs e)
{
foreach (Shape shapes in s._shapes)
{
s.acceptRectangle(shapes.color, shapes.strokeThickness, shapes.points, shapes.width, shapes.height, e.Graphics);
}
}
#region Accept-Reset-Cancel
private void btn_Accept_Click(object sender, EventArgs e)
{
switch (buttons)
{
case Shape.Buttons.rectangle:
pictureBox_Canvass.Paint += AcceptRect;
pictureBox_Canvass.Refresh();
break;
case Shape.Buttons.square:
break;
case Shape.Buttons.circle:
break;
case Shape.Buttons.ellipse:
break;
case Shape.Buttons.triangle:
break;
}
HideSettings();
ShowButtons();
}
private void btn_Cancel_Click(object sender, EventArgs e)
{
HideSettings();
ShowButtons();
}
private void btn_Reset_Click(object sender, EventArgs e)
{
s._shapes.Clear();
rX = 0;
rY = 0;
rW = 0;
rH = 0;
if(cbox_Grid.Checked)
{
pictureBox_Canvass.Paint += draw.ClearCanvass;
pictureBox_Canvass.Paint += draw.ShowGrid;
pictureBox_Canvass.Refresh();
}
else
{
pictureBox_Canvass.Paint += draw.ClearCanvass;
pictureBox_Canvass.Refresh();
}
HideSettings();
ShowButtons();
}
#endregion
#region Methods for Hide and Show
public void HideButtons()
{
btn_Rectangle.Visible = false;
btn_Square.Visible = false;
btn_Ellipse.Visible = false;
btn_Circle.Visible = false;
btn_Triangle.Visible = false;
}
public void ShowButtons()
{
btn_Rectangle.Visible = true;
btn_Square.Visible = true;
btn_Ellipse.Visible = true;
btn_Circle.Visible = true;
btn_Triangle.Visible = true;
}
public void HideSettings()
{
btn_Draw.Visible = false;
btn_Accept.Visible = false;
btn_Cancel.Visible = false;
btn_Reset.Visible = false;
btn_Accept.Visible = false;
trackBar_Size.Visible = false;
trackBar_Stroke.Visible = false;
trackBar_Corner.Visible = false;
label_Corner.Visible = false;
label_Height.Visible = false;
label_Size.Visible = false;
label_Stroke.Visible = false;
rb_Both.Visible = false;
rb_Height.Visible = false;
rb_Width.Visible = false;
tbox_Height.Visible = false;
tbox_Width.Visible = false;
label_Width.Visible = false;
}
public void ShowSettings()
{
btn_Draw.Visible = true;
btn_Accept.Visible = true;
btn_Cancel.Visible = true;
btn_Reset.Visible = true;
btn_Accept.Visible = true;
trackBar_Size.Visible = true;
trackBar_Stroke.Visible = true;
trackBar_Corner.Visible = true;
label_Corner.Visible = true;
label_Height.Visible = true;
label_Size.Visible = true;
label_Stroke.Visible = true;
rb_Both.Visible = true;
rb_Height.Visible = true;
rb_Width.Visible = true;
tbox_Height.Visible = true;
tbox_Width.Visible = true;
label_Width.Visible = true;
}
#endregion
#region Size Scaling
private void trackBar_Stroke_Scroll(object sender, EventArgs e)
{
pictureBox_Canvass.Refresh();
switch (buttons)
{
case Shape.Buttons.rectangle:
strokeRect = trackBar_Stroke.Value;
break;
case Shape.Buttons.square:
break;
case Shape.Buttons.circle:
break;
case Shape.Buttons.ellipse:
break;
case Shape.Buttons.triangle:
break;
};
}
#endregion
#region Stroke Scaling
private void trackBar_Size_Scroll(object sender, EventArgs e)
{
switch (buttons)
{
case Shape.Buttons.rectangle:
break;
case Shape.Buttons.square:
break;
case Shape.Buttons.circle:
break;
case Shape.Buttons.ellipse:
break;
case Shape.Buttons.triangle:
break;
}
pictureBox_Canvass.Refresh();
}
#endregion
}
Класс формы
public class Shape
{
public Draw draw;
public float width;
public float height;
public float x;
public float y;
public PointF points;
public int strokeThickness;
public Color color;
public List<Shape> _shapes = new List<Shape>();
public float acceptedStroke;
public enum Buttons
{
rectangle, square, circle, ellipse, triangle
}
public void DrawRectangle(Color c, int stroke, PointF points, float w, float h,Graphics g)
{
this.points = points;
this.width = w;
this.height = h;
this.strokeThickness = stroke;
g.DrawRectangle(new Pen(c,stroke), points.X, points.Y,w,h);
}
public void acceptRectangle(Color c, int stroke, PointF points, float w, float h, Graphics g)
{
this.points = points;
this.width = w;
this.height = h;
this.acceptedStroke = stroke;
g.DrawRectangle(new Pen(c, stroke), points.X, points.Y, w, h);
}
}