Wywoływanie zdarzeń - co robię źle ?

1

Mam grouboxa1 w środku jest richbox1.
Chciałbym aby po kliknięciu w tego richbox1 ramka groupboxa1 zmieniła kolor.
Przygotowałem wszystko i przy starcie wszystko działa ale jeśli chciałbym aby ramka zmieniła kolor po kliknięciu w richbox1 to nie działa...

public Formularz1()
        {
            InitializeComponent();
            **groupBox2.Paint += Rysuj;  // Tu działa** 
        }

 private void richTextBox1_Click(object sender, EventArgs e)
        {
            **groupBox2.Paint += Rysuj;  // Tu nie działa**
        }


        private void Rysuj(object sender, PaintEventArgs p)
        {
            GroupBox box = (GroupBox)sender;

            Graphics g = p.Graphics;
            Brush tło = new SolidBrush(Control.DefaultBackColor);
            SizeF długośćNapisu = g.MeasureString(box.Text, box.Font);
            Brush kolorPióra5 = new SolidBrush(Color.FromArgb(056, 091, 021));
            Pen pióro5 = new Pen(kolorPióra5);

            p.Graphics.Clear(SystemColors.Control);
            p.Graphics.DrawRectangle(pióro5, 0, 6, box.Size.Width - 1, box.Size.Height - 10);
            p.Graphics.FillRectangle(tło, 6, 0, długośćNapisu.Width + 10, długośćNapisu.Height);
            p.Graphics.DrawString(box.Text, box.Font, kolorPióra5, 10, 0);
        }

       
1

Bo nie uruchamiasz zdarzenia w OnClick, a tylko je przypisujesz ponownie. Zrób po prostu: Rysuj(null, null) i powinno być ok. "Działa" za pierwszym razem, bo przypisujesz zdarzenie, a ono gdzieś się automatycznie uruchamia.

0

Panowie ok. Zabrałem się za coś co widocznie jest dla mnie za trudne ale naprawdę zależy mi na tym aby to mimo wszystko wdrożyć a nie rozumiem jakie obiekty mam przesłać... czy możecie mi pokazać na przykładzie ??? :(

1

Jak masz zdarzenie Paint, na swoim GroupBoxie wywołujesz na nim

      private void groupBox1_Paint(object sender, PaintEventArgs e)
        {
            Rysuj(sender, e);
        }

ewentualnie w konstruktorze

      public Form1()
        {
            InitializeComponent();
            groupBox1.Paint += Rysuj; 
     
        }

lub na textboxie

     private richTextBox1_Click(object sender, EventArgs e)
        {
            groupBox1.Paint += Rysuj;
            Refresh();  
        }
1
 private void richTextBox1_Click(object sender, EventArgs e)
        {
            groupBox1.Paint -= Rysuj;
            groupBox1.Paint += Rysuj;
            groupBox1.Invalidate();
        }
0

Dzięki panowie wszystko działa! :-) W sumie byłem blisko tylko nie wiedziałem, że -= też istnieje teraz już chyba łapię jak to działa. Na pewno nie wiedziałem, że trzeba odświeżyć nawet nie przyszło mi to do głowy. Muszę to sobie potestować.

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