مشکل در استفاده کلاس برای رسم گرافیکی

mhabat

Member
سلام.
یه مشکل عجیب دارم که نمیدونم چرا این طور شده!
من یک کلاس ایجاد کردم که از طریق اون میشه یک خط با هر طولی رو ایجاد کرد.
ولی نمیدونم چرا موقع استفاده چیزی رو نمایش نمیده !
کلاس:
کد:
class LineShape1
    {
        private Point _StartPoint, _EndPoint;
        private Color _BorderColor = Color.Black;
        private int _BorderWidth = 4;
         public int xx = 0;
        private Graphics a;
     
    
        public Point StartPoint
        {
            get
            {
                return _StartPoint;
            }
            set
            {
                _StartPoint = value;
                
            }
        }
        public Point EndPoint
        {
            get
            {
                return _EndPoint;
            }
            set
            {
                _EndPoint = value;
              
            }
        }
        public Color BorderColor
        {
            get
            {
                return _BorderColor;
            }
            set
            {
                _BorderColor = value;
             
            }
        }
        public int BorderWidth
        {
            get
            {
                return _BorderWidth;
            }
            set
            {
                _BorderWidth = value;
        
            }
        }
       public void show()
        {
     
            a = Form1.ActiveForm.CreateGraphics();
          
      
           a.DrawLine(new Pen(Color.Black, 4), EndPoint, _EndPoint);
           a.Dispose();
        }
       
   }

نحوه استفاده در فرم:
کد:
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]LineShape1[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] a = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]LineShape1[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]();[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
            a.StartPoint = 
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]Point[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2](0, 0);[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
            a.EndPoint = 
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]Point[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2](100, 100);[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
            a.show();
 

the_king

مدیرکل انجمن
سلام.
یه مشکل عجیب دارم که نمیدونم چرا این طور شده!
من یک کلاس ایجاد کردم که از طریق اون میشه یک خط با هر طولی رو ایجاد کرد.
ولی نمیدونم چرا موقع استفاده چیزی رو نمایش نمیده !
کلاس:
کد:
class LineShape1
    {
        private Point _StartPoint, _EndPoint;
        private Color _BorderColor = Color.Black;
        private int _BorderWidth = 4;
         public int xx = 0;
        private Graphics a;
     
    
        public Point StartPoint
        {
            get
            {
                return _StartPoint;
            }
            set
            {
                _StartPoint = value;
                
            }
        }
        public Point EndPoint
        {
            get
            {
                return _EndPoint;
            }
            set
            {
                _EndPoint = value;
              
            }
        }
        public Color BorderColor
        {
            get
            {
                return _BorderColor;
            }
            set
            {
                _BorderColor = value;
             
            }
        }
        public int BorderWidth
        {
            get
            {
                return _BorderWidth;
            }
            set
            {
                _BorderWidth = value;
        
            }
        }
       public void show()
        {
     
            a = Form1.ActiveForm.CreateGraphics();
          
      
           a.DrawLine(new Pen(Color.Black, 4), EndPoint, _EndPoint);
           a.Dispose();
        }
       
   }

نقطه شروع و پایان رسم تون یکی ئه، درستش کنید رسم می کنه :
کد:
        public void show()
        {
            a = Form1.ActiveForm.CreateGraphics();
            a.DrawLine(new Pen(Color.Black, 4), [B][COLOR="#0000FF"]_StartPoint[/COLOR][/B], _EndPoint);
            a.Dispose();
        }
 

mhabat

Member
سلام مجدد.
عذر خواهی بابت کم دقتی.

یه سوال چرا نمیشه یک کلاس به UserControl1 اضافه کرد و از اون جا به خاصیت های UserControl1 دسترسی پیدا کرد؟

من الان مشکل پیدا کردم مثلا میخوام از داخل کلاس یک خط رو روی usercontrol1 رسم کنم!

یا مثلا می خوام دستور UserControl1.Invalidtion() رو در کلاس اجرا کنم ! ولی نمیشه

واقعا نمیدونم چرا این مشکل چطور حل میشه!
 

the_king

مدیرکل انجمن
سلام مجدد.
عذر خواهی بابت کم دقتی.

یه سوال چرا نمیشه یک کلاس به UserControl1 اضافه کرد و از اون جا به خاصیت های UserControl1 دسترسی پیدا کرد؟

من الان مشکل پیدا کردم مثلا میخوام از داخل کلاس یک خط رو روی usercontrol1 رسم کنم!

یا مثلا می خوام دستور UserControl1.Invalidtion() رو در کلاس اجرا کنم ! ولی نمیشه

واقعا نمیدونم چرا این مشکل چطور حل میشه!

دلیلش اینه که کلاس رو با نمونه ای از اون کلاس یکی فرض کرده اید. خاصیت هایی که شما می خواهید بهشان دسترسی پیدا کنید متعلق به نمونه های کلاس اند،
نه خود کلاس. شما یک کلاس دارید به نام UserControl1، می توانید از این کلاس هیچ نمونه ای نداشته باشید یا 100 تا نمونه از UserControl1 داشته باشید،
محدودیتی در تعداد نمونه ها نیست، می توانید این نمونه هایتان را Invalidate کنید. Invalidate می دونه که روی هر نمونه ای از UserControl1 قابل اجرا است،
اما روی کدوم نمونه از UserControl1 باید اجرا بشه؟ شما باید به یک طریقی نشان دهید که منظورتان کدوم نمونه است. در هر کلاس ای، this نمونه اون کلاس ئه.

فرضا همانطور که StartPoint و StartPoint_ رو تعریف کرده اید، Target و Target_ رو از نوع UserControl تعریف کنید و بعد در کد هایتان Target_ رو Invalidate کنید.
حالا در موقع استفاده از کلاس تان ابتدا مقدار Target رو مشخص کنید، مثلا در داخل کد های UserControl1 ، مقدار this رو داخل Target بنویسید.
 

جدیدترین ارسال ها

بالا