Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Гляньте код скажите что сделано не грамотно? С точки зрения ООП 
:(
    Опции темы
WaReZMEN
Дата 4.8.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Вот сел накидал... незнаю но что то мне подсказывает что сделал что то не так хотя все работает хочу выслушать критику smile и дельные советы

Главная форма
Код

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;

namespace Prog
{
    public partial class FMain : Form
    {
        MngConstruction ConMng;

        public FMain()
        {
            InitializeComponent();
            ConMng = new MngConstruction(this,300,400);
        }

        private void FMain_Paint(object sender, PaintEventArgs e)
        {
            ConMng.Paint();
        }

        private void FMain_MouseDown(object sender, MouseEventArgs e)
        {
            ConMng.Paint();
        }
    }
}


Основной и единственный Класс

Код

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;





namespace Prog
{
    
   public class Const
   {
       public const int ptPROFILE_LEFT = 1;
       public const int ptPROFILE_TOP = 2;       
       public const int ptPROFILE_RIGHT = 3;
       public const int ptPROFILE_BOTTOM = 4;
       public const int ptPROFILE_IMPOST_VERT = 10;
       public const int ptPROFILE_IMPOST_HORIZONT = 11;
   }

   public class MngConstruction
   {
        private Form parentForm;
        private int Otstup = 10;
        public TConstraction MainConstr;


        public int Width;
        public int Height;
        public Point MousePoint;

        public ArrayList ObjectList = new ArrayList();
       
        public MngConstruction(Form ParentForm, int W, int H)
        {
            this.parentForm = ParentForm;
            this.Width = W;
            this.Height = H;
            this.MainConstr = new TConstraction(Otstup, Otstup, this.Width + Otstup, this.Height + Otstup, this);

        }

        public void Paint()
        {
            MousePoint=parentForm.PointToClient(Cursor.Position); 

            SolidBrush myBrush = new SolidBrush(Color.White);
            SolidBrush myFill = new SolidBrush(Color.YellowGreen);
            myFill.Color = Color.FromArgb(213, 235, 255);
            Pen LinePen = new Pen(Color.Black);
            Graphics PanelGraphics = parentForm.CreateGraphics();

            for (int i = 0; i < ObjectList.Count; i++)
            {
                if (ObjectList[i] is TProfil)
                {
                    (ObjectList[i] as TProfil).SelectObject();
                    if ((ObjectList[i] as TProfil).isSelected)  
                        myBrush.Color = Color.FromArgb(182, 209, 255);
                    else
                        myBrush.Color = myFill.Color = Color.FromArgb(250, 250, 250);

                    PanelGraphics.FillPolygon(myBrush, (ObjectList[i] as TProfil).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TProfil).maspoints);
                }
            }
            myFill.Dispose();
            myBrush.Dispose();
            LinePen.Dispose();
            PanelGraphics.Dispose();
        }
   }

   public class TConstraction
    {
        public Point BeginOrdinate;
        public Point EndOrdinate;
        public MngConstruction parent;

        private TProfil Profil_Left;
        private TProfil Profil_Top;
        private TProfil Profil_Right;
        private TProfil Profil_Bottom;
        
//       MouseEventArgs e
       

        public TConstraction(int StartX, int StartY, int W, int H, MngConstruction Parent)
        {
            parent = Parent;
            BeginOrdinate.X = StartX; //Начало координат окна
            BeginOrdinate.Y = StartY; //Начало координат окна
            EndOrdinate.X = BeginOrdinate.X + W; //Ширина
            EndOrdinate.Y = BeginOrdinate.Y + H; //Высота      

            Profil_Left = new TProfil(Const.ptPROFILE_LEFT, this);
            Profil_Top = new TProfil(Const.ptPROFILE_TOP, this);
            Profil_Right = new TProfil(Const.ptPROFILE_RIGHT, this);
            Profil_Bottom = new TProfil(Const.ptPROFILE_BOTTOM, this);

            parent.ObjectList.Add(this);
        }


    }

   public class TProfil 
    {
        private int fat = 28;
        private Boolean selected = false;
        private TConstraction parent;
        private int profiltype;
        
        public Point[] maspoints = new Point[4]; 

        public void SelectObject()
        {
            GraphicsPath path = new GraphicsPath();
            path.AddPolygon(this.maspoints);                              
            
            Region Reg = new Region(path);
            if (Reg.IsVisible(parent.parent.MousePoint) == true)
                this.isSelected = true;
            else
                this.isSelected = false;
            path.Dispose();
            Reg.Dispose();
        }
      
        public TProfil(int  ProfilType, TConstraction Parent)
        {
            this.parent = Parent;
            
            this.profiltype = ProfilType;
            this.Recalc();
            this.parent.parent.ObjectList.Add(this);
            
        }
 
        public int Fat
        {
            get
            {
                return fat;
            }
            set
            {
                fat = value;
            }
        }

        public Boolean isSelected
        {
            get
            {
                return selected;
            }
            set
            {
                selected = value;
            }
        }

        public void Recalc()
        {
            switch (profiltype)
            {
                case Const.ptPROFILE_LEFT:
                        this.maspoints[0] = new Point(parent.BeginOrdinate.X, parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(parent.BeginOrdinate.X + Fat, parent.BeginOrdinate.Y + Fat);
                        this.maspoints[2] = new Point(parent.BeginOrdinate.X + Fat, parent.BeginOrdinate.Y + parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(parent.BeginOrdinate.X, parent.BeginOrdinate.Y + parent.EndOrdinate.Y);
                     break;
                case Const.ptPROFILE_TOP:
                        this.maspoints[0] = new Point(parent.BeginOrdinate.X, parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X, parent.BeginOrdinate.Y);
                        this.maspoints[2] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X - Fat, parent.BeginOrdinate.Y + Fat);
                        this.maspoints[3] = new Point(parent.BeginOrdinate.X + Fat, parent.BeginOrdinate.Y + Fat);
                     break;
                case Const.ptPROFILE_RIGHT:
                        this.maspoints[0] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X - Fat, parent.BeginOrdinate.Y + Fat);
                        this.maspoints[1] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X, parent.BeginOrdinate.Y);
                        this.maspoints[2] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X, parent.BeginOrdinate.Y + parent.EndOrdinate.Y);
                        this.maspoints[3] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X - Fat, parent.BeginOrdinate.Y + parent.EndOrdinate.Y - Fat);
                     break;
                case Const.ptPROFILE_BOTTOM:
                        this.maspoints[0] = new Point(parent.BeginOrdinate.X, parent.BeginOrdinate.Y + parent.EndOrdinate.Y);
                        this.maspoints[1] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X, parent.BeginOrdinate.Y + parent.EndOrdinate.Y);
                        this.maspoints[2] = new Point(parent.BeginOrdinate.X + parent.EndOrdinate.X - Fat, parent.BeginOrdinate.Y + parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(parent.BeginOrdinate.X + Fat, parent.BeginOrdinate.Y + parent.EndOrdinate.Y - Fat);
                     break;
            }

        }

    }


 }




P.S. Всю жизнь писал на дельфи поетому не придераитесь к именам класса и переменным smile 

PM MAIL ICQ   Вверх
mr.DUDA
Дата 4.8.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Мелкие придирки:
- ArrayList заменить на List<TProfil> объектов 
- в обработчике MouseDown вызывать не Paint класса, а метод Refresh() формы
- в метод Paint передавать ссылку на Graphics (брать из e), вместо того чтобы создавать графикс с пом. CreateGraphics



--------------------
user posted image
PM MAIL WWW   Вверх
jonie
Дата 4.8.2008, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



1)  MngConstruction ConMng; - можно сделать readonly
2) не особо тут много ооп... есть паттерны вроде observer (publish/subscriber), и другие... хотя теже яйца только боком...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
WaReZMEN
Дата 4.8.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



mr.DUDA
Цитата

 ArrayList заменить на List<TProfil> объектов 

Просто еще не весь код так как в  ArrayList будут не только TProfil но и прочие классы чуток позже дапишу покажу...
Про MouseDown и Graphics спасибо учту. И еще стоит ли в класс MngConstruction
 форму передовать?
jonie, спасибо за совет!
PM MAIL ICQ   Вверх
WaReZMEN
Дата 5.8.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Вот последняя версия

Главная форма
Код

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;

namespace Prog
{
    public partial class FMain : Form
    {
        MngConstruction ConMng;

        public FMain()
        {
            InitializeComponent();
            ConMng = new MngConstruction(300,400);
        }

        private void FMain_Paint(object sender, PaintEventArgs e)            
        {
            ConMng.Paint(e.Graphics);            
        }

        private void FMain_MouseDown(object sender, MouseEventArgs e)
        {
            ConMng.MousePoint = e.Location;
            Refresh();            
        }
    }
}


Класс

Код

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace Prog
{
    
   public class Const
   {
       public const int ptPROFILE_LEFT = 1;
       public const int ptPROFILE_TOP = 2;       
       public const int ptPROFILE_RIGHT = 3;
       public const int ptPROFILE_BOTTOM = 4;
       public const int alCenter = 10;
       public const int alBottom = 11;
       public const int alLeft = 12;
       public const int alRigth = 13;
       public const int alTop = 14;
       public const int imHorizontal = 100;
       public const int imVertical = 101;
   }

   public class MngConstruction 
   {    
        private int Otstup = 10;
        public TConstraction MainConstr;


        public int Width;
        public int Height;
        public Point MousePoint;

        public ArrayList ObjectList = new ArrayList();
       
        public MngConstruction(int W, int H)
        {
            this.Width = W;
            this.Height = H;
            this.MainConstr = new TConstraction(Otstup, Otstup, this.Width + Otstup, this.Height + Otstup, this);
        }

        public void Paint(Graphics PanelGraphics)
        {
            SolidBrush myBrush = new SolidBrush(Color.White);
            SolidBrush myFill = new SolidBrush(Color.YellowGreen);
            myFill.Color = Color.FromArgb(213, 235, 255);
            Pen LinePen = new Pen(Color.Black);

            for (int i = 0; i < ObjectList.Count; i++)
            {
                
                this.SelectObject(ObjectList[i] as TConstructionElement);

                if (ObjectList[i] is TProfil)
                {
                    
                    if ((ObjectList[i] as TProfil).isSelected)  
                        myBrush.Color = Color.FromArgb(182, 209, 255);
                    else
                        myBrush.Color = myFill.Color = Color.FromArgb(250, 250, 250);

                    PanelGraphics.FillPolygon(myBrush, (ObjectList[i] as TProfil).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TProfil).maspoints);
                }
                if (ObjectList[i] is TInfill)
                {
                    if ((ObjectList[i] as TInfill).isSelected) 
                        myFill.Color = Color.FromArgb(255, 227, 191);
                    else 
                        myFill.Color = myFill.Color = Color.FromArgb(213, 235, 255);
                    PanelGraphics.FillPolygon(myFill, (ObjectList[i] as TInfill).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TInfill).maspoints);
                }

                if (ObjectList[i] is TImpost)
                {
                    if ((ObjectList[i] as TImpost).isSelected) 
                        myFill.Color = Color.FromArgb(182, 209, 255);
                    else 
                        myFill.Color = myFill.Color = Color.FromArgb(250, 250, 250);
                    PanelGraphics.FillPolygon(myFill, (ObjectList[i] as TImpost).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TImpost).maspoints);
                }
                
            }
            myFill.Dispose();
            myBrush.Dispose();
            LinePen.Dispose();
        }

        public void SelectObject(TConstructionElement Element)
         {
            
            GraphicsPath path = new GraphicsPath();
            path.AddPolygon(Element.maspoints);
            
            Region Reg = new Region(path);
            if (Reg.IsVisible(this.MousePoint) == true)
                Element.isSelected = true;
            else
                Element.isSelected = false;
            path.Dispose();
            Reg.Dispose();
         }
    
   }

   public class TConstraction : TConstructionElement
    {

        public MngConstruction ParentMngConst;

        private TProfil Profil_Left;
        private TProfil Profil_Top;
        private TProfil Profil_Right;
        private TProfil Profil_Bottom;
        private TInfill Infill;

        public TConstraction(int StartX, int StartY, int W, int H, MngConstruction ParentMngConstruction)
        {
            this.ParentMngConst = ParentMngConstruction;
            this.BeginOrdinate.X = StartX; 
            this.BeginOrdinate.Y = StartY; 
            this.EndOrdinate.X = BeginOrdinate.X + W; 
            this.EndOrdinate.Y = BeginOrdinate.Y + H;      

            this.Profil_Left = new TProfil(Const.ptPROFILE_LEFT, this);
            this.Profil_Top = new TProfil(Const.ptPROFILE_TOP, this);
            this.Profil_Right = new TProfil(Const.ptPROFILE_RIGHT, this);
            this.Profil_Bottom = new TProfil(Const.ptPROFILE_BOTTOM, this);
            this.Infill = new TInfill(Const.alCenter, this);
            this.ParentMngConst.ObjectList.Add(this);
        }

        

    }

   public class TProfil : TConstructionElement
    {      
        private int profiltype;

        public TProfil(int ProfilType, TConstraction ParentConstraction)
        {
            this.Parent = ParentConstraction;
            
            this.profiltype = ProfilType;
            this.Recalc();
            this.Parent.ParentMngConst.ObjectList.Add(this);
            
        }
 

        private void Recalc()
        {
            switch (profiltype)
            {
                case Const.ptPROFILE_LEFT:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                     break;
                case Const.ptPROFILE_TOP:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Fat);
                     break;
                case Const.ptPROFILE_RIGHT:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                     break;
                case Const.ptPROFILE_BOTTOM:
                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Parent.EndOrdinate.X - Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                     break;
            }

        }

    }

   public class TInfill : TConstructionElement
   {
       private int infillalign;
       public TImpost Impost;
       public TInfill Infill1;
       public TInfill Infill2;

       public TInfill(int InfillAlign, TConstraction ParentConstraction)
       {
           this.infillalign = InfillAlign;
           this.Parent = ParentConstraction;
           this.Recalc();
           this.Parent.ParentMngConst.ObjectList.Add(this);
       }

       private void Recalc()
       {   
           TConstraction c;
           switch (infillalign)
           {               
               case Const.alCenter:
                        c = this.Parent;
                        this.maspoints[0] = new Point(c.BeginOrdinate.X + Fat, c.BeginOrdinate.Y + Fat);
                        this.maspoints[1] = new Point(c.BeginOrdinate.X + c.EndOrdinate.X - Fat, c.BeginOrdinate.Y + Fat);
                        this.maspoints[2] = new Point(c.BeginOrdinate.X + c.EndOrdinate.X - Fat, c.BeginOrdinate.Y + c.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(c.BeginOrdinate.X + Fat, c.BeginOrdinate.Y + c.EndOrdinate.Y - Fat);
                        this.BeginOrdinate = this.maspoints[0];
                        this.EndOrdinate = this.maspoints[2];
                        this.Width = this.maspoints[1].X - this.maspoints[0].X;
                        this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
               case Const.alLeft:
                   break;
               case Const.alTop:
                   break;
               case Const.alRigth:
                   break;
               case Const.alBottom:
                   break;
           }

       }


   }
  
   public class TImpost : TConstructionElement
   {
       private int imposttype;
       private TInfill parentinfill;
       private int x;
       private int y;

       public TImpost(int ImpostType, TInfill ParentInfill, TConstraction ParentConstraction, int X, int Y)
       {
           this.Parent = ParentConstraction;
           this.parentinfill = ParentInfill;
           this.x = X;
           this.y = Y;
           this.imposttype = ImpostType;
           this.Recalc();
           this.Parent.ParentMngConst.ObjectList.Add(this);
       }

       public void Recalc()
       {
           switch (this.imposttype)
           {
               case Const.imVertical:
                   this.maspoints[0] = new Point(x - (Fat / 2), parentinfill.BeginOrdinate.Y);
                   this.maspoints[1] = new Point(x + (Fat / 2), parentinfill.BeginOrdinate.Y);
                   this.maspoints[2] = new Point(x + (Fat / 2), parentinfill.BeginOrdinate.Y + parentinfill.Height);
                   this.maspoints[3] = new Point(x - (Fat / 2), parentinfill.BeginOrdinate.Y + parentinfill.Height);
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
               case Const.imHorizontal:
                   this.maspoints[0] = new Point(parentinfill.BeginOrdinate.X, y - (Fat / 2));
                   this.maspoints[1] = new Point(parentinfill.EndOrdinate.X, y - (Fat / 2));
                   this.maspoints[2] = new Point(parentinfill.EndOrdinate.X, y + (Fat / 2));
                   this.maspoints[3] = new Point(parentinfill.BeginOrdinate.X, y + (Fat / 2));
                   this.BeginOrdinate = this.maspoints[0];
                   this.EndOrdinate = this.maspoints[2];
                   this.Width = this.maspoints[1].X - this.maspoints[0].X;
                   this.Height = this.maspoints[3].Y - this.maspoints[0].Y;
                   break;
           }
       }

   }

   public class TConstructionElement
   {
       private int fat = 28;
       private Boolean selected = false;
       private TConstraction parent;       
       private int width;
       private int height;

       public Point BeginOrdinate;
       public Point EndOrdinate;
       public Point[] maspoints = new Point[4];

       public int Fat
       {
           get
           {
               return fat;
           }
           set
           {
               fat = value;
           }
       }
       public Boolean isSelected
       {
           get
           {
               return selected;
           }
           set
           {
               selected = value;
           }
       }
       public TConstraction Parent
       {
           get
           {
               return parent;
           }
           set
           {
               parent = value;
           }
       }
       public int Width
       {
           get
           {
               return width;
           }
           set
           {
               width = value;
           }
       }
       public int Height
       {
           get
           {
               return height;
           }
           set
           {
               height = value;
           }
       }
   }
 }



Сдесь добавил еще класс TInfill ну и сделал класс TConstructionElement в нем основные своиства каторые есть почти во всех остальных... еще подумываю пренести сюда метод Recalc с пораметром. Что скажете??? Мне чесно нужно мнения грамотных людей.
PM MAIL ICQ   Вверх
jonie
Дата 5.8.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



слету : public const int alRigth = 13; -- в enum, жИвотное)!


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
WaReZMEN
Дата 5.8.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



jonie, чаго???
PM MAIL ICQ   Вверх
source777
Дата 5.8.2008, 14:01 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(jonie @  5.8.2008,  09:54 Найти цитируемый пост)
public const int alRigth = 13; -- в enum, жИвотное)! 
+много

WaReZMEN, что это за безобразие 
Цитата

public class Const ...

Класс должен быть одним единственным АТД, а не кучкой констант или переменных...

Цитата

ConMng = new MngConstruction(300,400);
в обработчик Form.OnLoad перенеси.


Дублирование кода сплошь и рядом, например, фрагменты:
Цитата

                    if ((ObjectList[i] as TInfill).isSelected) 
                        myFill.Color = Color.FromArgb(255, 227, 191);
                     else 
                        myFill.Color = myFill.Color = Color.FromArgb(213, 235, 255);
                    PanelGraphics.FillPolygon(myFill, (ObjectList[i] as TInfill).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TInfill).maspoints);


Цитата

                        this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);


и им подобные многократно встречаются с незначительными вариациями...

P.S. Это не ООП вообще, это лишь кодирование с использованием классов, как языковой конструкции. Ты только посмотри сколько у тебя в коде блоков switch!!! 



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 5.8.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



source777,  c enum разобрался. 
public class Const ... я поискал по нету был именно такои савет... Я  понимаю что глупость но на тот мамент я других вариантов не знал....
Код

if ((ObjectList[i] as TInfill).isSelected) 
                        myFill.Color = Color.FromArgb(255, 227, 191);
                     else 
                        myFill.Color = myFill.Color = Color.FromArgb(213, 235, 255);
                    PanelGraphics.FillPolygon(myFill, (ObjectList[i] as TInfill).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TInfill).maspoints);


Cдесь убрть сложновато пока даже не вижу как...

а вот 
Код

this.maspoints[0] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y);
                        this.maspoints[1] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Fat);
                        this.maspoints[2] = new Point(Parent.BeginOrdinate.X + Fat, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y - Fat);
                        this.maspoints[3] = new Point(Parent.BeginOrdinate.X, Parent.BeginOrdinate.Y + Parent.EndOrdinate.Y);


Ну от этого никуда не денешся я б с удовольствием сделал переращет какнибудь по другому но подругому не вижу как!
P.S.  А куда денешся от switch????. В месте с критикои хотелось бы и реальной помощи smile

Это сообщение отредактировал(а) WaReZMEN - 6.8.2008, 02:23
PM MAIL ICQ   Вверх
mr.DUDA
Дата 6.8.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(WaReZMEN @  4.8.2008,  23:51 Найти цитируемый пост)
Просто еще не весь код так как в  ArrayList будут не только TProfil но и прочие классы чуток позже дапишу покажу...

Ну так сделаешь общий интерфейс типа IMyObject, реализуешь во всех классах и будешь добавлять объекты разных типов в список. Иначе общий список вообще незачем делать, целесообразнее несколько списков завести, соответственно будет несколько циклов без проверки типов объекта.


--------------------
user posted image
PM MAIL WWW   Вверх
WaReZMEN
Дата 6.8.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



mr.DUDA, Ок учту.
PM MAIL ICQ   Вверх
source777
Дата 6.8.2008, 11:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(WaReZMEN @  5.8.2008,  23:57 Найти цитируемый пост)
Cдесь убрть сложновато пока даже не вижу как...

Ничего сложного тут нет, даже можно сказать, что всё элементарно:
1) читаем, что тебе насоветовал mr.DUDA
2) Заменяем
Цитата

                if (ObjectList[i] is TProfil)
                {
                    
                    if ((ObjectList[i] as TProfil).isSelected)  
                        myBrush.Color = Color.FromArgb(182, 209, 255);
                    else
                        myBrush.Color = myFill.Color = Color.FromArgb(250, 250, 250);
                    PanelGraphics.FillPolygon(myBrush, (ObjectList[i] as TProfil).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TProfil).maspoints);
                }
                if (ObjectList[i] is TInfill)
                {
                    if ((ObjectList[i] as TInfill).isSelected) 
                        myFill.Color = Color.FromArgb(255, 227, 191);
                    else 
                        myFill.Color = myFill.Color = Color.FromArgb(213, 235, 255);
                    PanelGraphics.FillPolygon(myFill, (ObjectList[i] as TInfill).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TInfill).maspoints);
                }
                if (ObjectList[i] is TImpost)
                {
                    if ((ObjectList[i] as TImpost).isSelected) 
                        myFill.Color = Color.FromArgb(182, 209, 255);
                    else 
                        myFill.Color = myFill.Color = Color.FromArgb(250, 250, 250);
                    PanelGraphics.FillPolygon(myFill, (ObjectList[i] as TImpost).maspoints);
                    PanelGraphics.DrawPolygon(LinePen, (ObjectList[i] as TImpost).maspoints);
                }

на
Код
            
                    myBrush.Color = myFill.Color = ObjectList[i].Color;
                    PanelGraphics.FillPolygon(myBrush, ObjectList[i].maspoints);
                    PanelGraphics.DrawPolygon(LinePen, ObjectList[i].maspoints);

3) дивимся как работает шайтан-машина под названием "полиморфизм".



Цитата(WaReZMEN @  5.8.2008,  23:57 Найти цитируемый пост)
А куда денешся от switch?
Блин, ну ты про ООП почитай хоть маленько, именно про ООП, а не про синтаксис классов... Про паттерн State для начала, например.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 6.8.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



source777

Цитата

3) дивимся как работает шайтан-машина под названием "полиморфизм".




Цитата(WaReZMEN @  5.8.2008,  23:57 ) 
А куда денешся от switch? 

Блин, ну ты про ООП почитай хоть маленько, именно про ООП, а не про синтаксис классов... Про паттерн State для начала, например. 



Возможно все это и поможет но по части расчета координат вообще не вижу иного способа.... как там все сложнее чем есть сеичас... позже выложу последний код щас пока подправлю что вы говорите. Кстате спасибо огромное за советы!!!
PM MAIL ICQ   Вверх
source777
Дата 6.8.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(WaReZMEN @  6.8.2008,  12:18 Найти цитируемый пост)
там все сложнее чем есть сеичас.
 Значит сделай, чтобы стало проще. Главное понять, что ты сам всё усложняешь...

Это сообщение отредактировал(а) source777 - 6.8.2008, 13:14


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 6.8.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



source777, а де лучше о  паттерн State  почитать???
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1215 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.