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

Odpowiedz Nowy wątek
2019-02-24 01:41
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);
        }

Pozostało 580 znaków

2019-02-24 10:23
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.

To mu nie zadziała, bo w metodzie Rysuj odwołuje się do sendera. - kzkzg 2019-02-24 11:56
No to zamiast null jako sender musi tam odpowiedni obiekt przekazać. - somekind 2019-02-24 15:34
A także wykorzystuje PaintEventArgs - no nic, trzeba przekazać odpowiedni obiekt w te miejsca, zamiast nulli, nie zauważyłem. - Ktos 2019-02-24 18:03

Pozostało 580 znaków

2019-02-25 21:12
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 ??? :(

Pozostało 580 znaków

2019-02-26 07:31
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();  
        }

Lubię miodek :)

Pozostało 580 znaków

2019-02-26 09:28
1
 private void richTextBox1_Click(object sender, EventArgs e)
        {
            groupBox1.Paint -= Rysuj;
            groupBox1.Paint += Rysuj;
            groupBox1.Invalidate();
        }

Pozostało 580 znaków

2019-02-28 20:29
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ć.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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