Wywołanie funkcji OnPaint z klasy

0

Cześć,
Potrzebuję wywołać funkcję OnPaint tak, z poziomu klasy

chartX.Points.Add(new Point(1,1));

Czy da się to tak zrobić, żeby przy tworzeniu Points nie trzeba było przekazywać kontrolki?
Poniżej przykład.

namespace xLibrary
{
    public partial class chartX: UserControl
    {
       _Points Points;  
     
        public chartX()
        {
            InitializeComponent();
            Points = new _Points(this)
        }
        
        protected override void OnPaint(PaintEventArgs e)
        {
            // odrysowanie kontrolki
        }
    }
    
    public class _Points
    {
        Control _control;

        public _Points(Control control)
        {
             _control = control;
        }

        public void Add()
        {
             _control.Invalidate();
        }
    }
}    

0

ktokolwiek widział, ktokolwiek wie o co chodzi?

0

Przepraszam, źle się wyraziłem. Chodzi mi o to, żeby funkcja OnPaint (a właściwie Invalidate) mogłaby być wywoływana z poziomu jakiejś tam klasy. W C zrobiłbym to przekazując wskaźnik na funkcję, natomiast nie wiem jak to zrobić w C#?

1

chyba wiem już o co chodzi :). To się robi inaczej - klasa _Points powinna mieć zdarzenie np. OnChange, które jest wywoływane zawsze przy zmianie. Następnie w klasie chartX powinieneś obsłużyć zdarzenie OnChange dla obiektu klasy _Points i ją odrysować.

0

Mniej więcej coś takiego?

namespace xLibrary
{
    public partial class chartX : UserControl
    {
        _Points Points;

        public chartX()
        {
            InitializeComponent();
            Points = new _Points();
            /********************************
            dodanie obsługi zdarzenia OnPaint 
            przy wywołaniu Points.OnChange()
            ********************************/
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            // odrysowanie kontrolki
        }
    }

    public class _Points
    {
        public void OnChange()
        {
            // odrysowanie kontrolki
        }
    }
}
1

nie nie tak. Mam wrażenie, że po pierwsze masz ogromne braki w podstawach a po drugie w ogóle nie rozumiesz co Ci się pisze.

    public class _Points
    {
        public event EventHandler OnChange;

        public _Points()
        {

        }
 
        public void Add()
        {
             //...
                OnChange(this, EventArgs.Empty);
        }
    }

public partial class chartX: UserControl
    {
       _Points Points;  
 
        public chartX()
        {
            InitializeComponent();
            Points = new _Points();
            Points.OnChange += Points_OnChange;
        }

        private static void Points_OnChange(object sender, EventArgs e)
        {
            this.Invalidate;
        }
    }
0

Przez praktykę do celu :) Dzięki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1