Проверка рисования и использование GUI - C#
Формулировка задачи:
Вот сделала программу, только не знаю, работает ли она корректно. Можете мальчики посмотреть ?
Решение задачи: «Проверка рисования и использование GUI»
textual
Листинг программы
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Demonstration_Form
{
public partial class Demonstration_Form1 : Form
{
public Demonstration_Form1()
{
InitializeComponent();
label1.MouseEnter += (sender, e) => { label1.ForeColor = Color.Gray; };
label1.MouseLeave += (sender, e) => { label1.ForeColor = Color.Black; };
label2.MouseEnter += (sender, e) => { label2.ForeColor = Color.Gray; };
label2.MouseLeave += (sender, e) => { label2.ForeColor = Color.Black; };
}
Graphics[] graphics = new Graphics[3];
private void Demonstration_Form1_Load(object sender, EventArgs e)
{
graphics[0] = panel1.CreateGraphics();
graphics[1] = panel2.CreateGraphics();
graphics[2] = panel3.CreateGraphics();
this.DoubleBuffered = true;
}
bool is_Checked = false;
private void panel1_Paint(object sender, PaintEventArgs e)
{
if (!is_Checked)
{
graphics[0].DrawRectangle(new Pen(Color.Black, 2.00f), new Rectangle(panel1.Width/2-32, panel1.Height/2 - 32, 65, 65));
graphics[0].FillRectangle(Brushes.DarkGray, new Rectangle(panel1.Width / 2 - 31, panel1.Height / 2 - 31, 63, 63));
}
else if (is_Checked)
{
graphics[0].DrawRectangle(new Pen(Color.Black, 2.00f), new Rectangle(panel1.Width / 2 - 32, panel1.Height / 2 - 32, 65, 65));
graphics[0].FillRectangle(Brushes.DarkKhaki, new Rectangle(panel1.Width / 2 - 31, panel1.Height / 2 - 31, 63, 63));
}
}
bool is_Checked2 = false;
private void panel2_Paint(object sender, PaintEventArgs e)
{
if (!is_Checked2)
{
graphics[1].DrawEllipse(new Pen(Color.Black, 2.00f), new Rectangle(panel2.Width / 2-32, panel2.Height / 2-32, 65, 65));
graphics[1].FillEllipse(Brushes.DarkGray, new Rectangle(panel2.Width / 2 - 31, panel2.Height / 2 - 31, 63, 63));
}
else if (is_Checked2)
{
graphics[1].DrawEllipse(new Pen(Color.Black, 2.00f), new Rectangle(panel2.Width / 2 - 32, panel2.Height / 2 - 32, 65, 65));
graphics[1].FillEllipse(Brushes.DarkKhaki, new Rectangle(panel2.Width / 2 - 31, panel2.Height / 2 - 31, 63, 63));
}
}
bool dragdrop2 = false, draw2 = false;
private void panel2_Click(object sender, EventArgs e)
{
is_Checked2 = true; is_Checked = false;
panel2.Invalidate(); panel1.Invalidate();
if (MessageBox.Show("Вы выбрали круг. При нажатии <Да> вы включите способность рисования." +
" При нажатии <Нет> вы включите способность перемещения выбраного объекта.",
"Demonstration Form", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
== System.Windows.Forms.DialogResult.Yes)
{
panel3.Invalidate();
draw2 = true;
dragdrop2 = false;
draw = false;
dragdrop = false;
}
else
{
dragdrop2 = true;
draw2 = false;
draw = false;
dragdrop = false;
}
}
bool draw = false, dragdrop = false;
private void panel1_Click(object sender, EventArgs e)
{
is_Checked = true; is_Checked2 = false;
panel1.Invalidate(); panel2.Invalidate();
if (MessageBox.Show("Вы выбрали квадрат. При нажатии <Да> вы включите способность рисования." +
" При нажатии <Нет> вы включите способность перемещения выбраного объекта.",
"Demonstration Form", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
== System.Windows.Forms.DialogResult.Yes)
{
panel3.Invalidate();
draw = true;
dragdrop = false;
draw2 = false;
dragdrop2 = false;
}
else
{
dragdrop = true;
draw = false;
draw2 = false;
dragdrop2 = false;
}
}
int x = 100, y = 100;
private void panel3_Paint(object sender, PaintEventArgs e)
{
if (draw)
{
timer1.Start();
}
else if (dragdrop)
{
timer1.Stop();
graphics[2].FillRectangle(Brushes.Black, new Rectangle(x - 40 / 2, y - 40 / 2, 40, 40));
}
if (draw2)
{
timer1.Start();
}
else if (dragdrop2)
{
timer1.Stop();
graphics[2].FillEllipse(Brushes.Black, new Rectangle(x-40/2, y-40/2, 40, 40));
}
}
private void panel3_MouseMove(object sender, MouseEventArgs e)
{
label3.Text = "Координаты мыши: x=" + e.X + ", y=" + e.Y;
x = e.X; y = e.Y;
if (dragdrop || dragdrop2)
{
timer1.Enabled = false;
panel3.Invalidate();
}
else timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (draw)
{
graphics[2].FillRectangle(Brushes.Black, new Rectangle(x - 10 / 2, y - 10 / 2, 10, 10));
}
else if (draw2)
{
graphics[2].FillEllipse(Brushes.Black, new Rectangle(x - 10 / 2, y - 10 / 2, 10, 10));
}
}
private void button1_Click(object sender, EventArgs e)
{
var bounds = panel3.Size;
var bmp = new Bitmap(bounds.Width, bounds.Height);
using (var v = Graphics.FromImage(bmp))
v.CopyFromScreen(this.Location.X + panel3.Location.X, this.Location.Y + panel3.Location.Y, 0, 0, bmp.Size);
MessageBox.Show("Изображение успешно сохранено!", "Demonstration Form",
MessageBoxButtons.OK, MessageBoxIcon.Information);
bmp.Save("df_image.jpg");
}
}
}