Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2013, 15:15   #1
M_Asja
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 14
По умолчанию Проблема при работе с делегатами в МDI-интерфейсе

Есть вот такая программка - что-то наподобие графического редактора. При нажатии левой клавиши мышки рисуется определённая фигура, и у этой фигуры можно изменять цвет окантовки, ширину окантовки и цвет фона.
Проблема в том, что если я, нарисовав несколько фигурок, хочу рисовать дальше фигурки другого цвета и меняю цвет или ширину, то изменяются все фигурки.

Я думаю, что это как-то связано с применением делегата в событии Child_Click.
Помогите, пожалуйста, разобраться))

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;


namespace L_5
    {
    public partial class Form1: Form
        {
        private struct ShaipeInfo
            {
            public int FontColorName;
            public int LineColorName;
            public int WightLine;
            public int x;
            public int y;
            }
        int IDChild;
        Pen pen;
        SolidBrush brush;
        Dictionary<String, List<ShaipeInfo>> ShapeLib;

        public Form1()
            {
            InitializeComponent ();
            IDChild = 0;
            pen = new Pen (Color.Red);
            pen.Width = 1;
            brush = new SolidBrush (Color.Gray);
            ShapeLib = new Dictionary<string, List<ShaipeInfo>> ();
            }

        private void toolStripButton1_Click(object sender, EventArgs e)
            {
            Form tForm = new Form2 ();
            tForm.MdiParent = this;
            tForm.Name = "ChildDForm" + GetChildID ();
            tForm.Text = tForm.Name;
            tForm.Show ();
            tForm.MouseDown += new MouseEventHandler (Child_Click);
            tForm.MouseMove += new MouseEventHandler (Child_MouseMove);
            tForm.MouseLeave += new EventHandler (tForm_MouseLeave);
            }
       
        void tForm_MouseLeave(object sender, EventArgs e)
            {
            toolStripStatusLabel1.Text = "Вне зоны активного окна";
            }
        public void Child_Click(object sender, MouseEventArgs e)
            {
            Graphics g = ActiveMdiChild.CreateGraphics ();
            if (e.Button != MouseButtons.Left)
                {
                return;
                }

            Point[] point = new Point[5];
            point[0].X = e.X;
            point[0].Y = e.Y;
            point[1].X = e.X + 5;
            point[1].Y = e.Y - 5;
            point[2].X = e.X + 30;
            point[2].Y = e.Y - 5;
            point[3].X = e.X + 30;
            point[3].Y = e.Y + 25;
            point[4].X = e.X;
            point[4].Y = e.Y + 25;
            Invalidate ();
            this.Paint += (o, a) =>
                              {


                                  g.FillPolygon (brush, point);
                                  g.DrawPolygon (pen, point);

                              };
            
            if (ShapeLib.ContainsKey (ActiveMdiChild.Name))
                {

                ShapeLib[ActiveMdiChild.Name].Add (new ShaipeInfo ()
                {
                    FontColorName = brush.Color.ToArgb (),
                    LineColorName = pen.Color.ToArgb (),
                    WightLine = (int) pen.Width,
                    x = (int) e.X,
                    y = (int) e.Y,
                }
                                                   );
                }
            else
                {
                ShaipeInfo temp = new ShaipeInfo ();
                temp.FontColorName = brush.Color.ToArgb ();
                temp.LineColorName = pen.Color.ToArgb ();
                temp.WightLine = (int) pen.Width;
                temp.x = (int) e.X;
                temp.y = (int) e.Y;
                List<ShaipeInfo> TempList = new List<ShaipeInfo> ();
                TempList.Add (temp);
                ShapeLib.Add (ActiveMdiChild.Name, TempList);
                }

            }

        ...

        }
    }
M_Asja вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема при работе AAaron Qt и кроссплатформенное программирование С/С++ 0 15.05.2012 21:39
Проблема при работе с файлами stck Паскаль, Turbo Pascal, PascalABC.NET 1 21.12.2011 11:28
Проблема при работе с массивом Shouldercannon Общие вопросы Delphi 0 28.05.2010 12:57
Проблема при работе с ini dolphin705 Общие вопросы Delphi 4 12.08.2009 20:59
Проблема при работе с БД HAMMAN БД в Delphi 3 29.03.2008 14:42