• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zmiana obrazka buttona do momentu kliknięcia innego

Object Storage Arubacloud
+1 głos
113 wizyt
pytanie zadane 19 kwietnia 2023 w C# przez Mati336 Użytkownik (560 p.)

Witam!  Wykonałem przycisk z wykorzystaniem opcji hover i leave według tego poniższego schematu:

private void btnIncome_MouseHover(object sender, EventArgs e)
        {
            this.btnIncome.Image = Properties.Resources.income_btn_hover;
            this.Cursor = Cursors.Hand;

        }


private void btnIncome_MouseLeave(object sender, EventArgs e)
        {
            this.btnIncome.Image = Properties.Resources.income_btn_normal;
            this.Cursor = Cursors.Arrow;
        }

i działa ok.

I teraz mam menu wykonane  takich buttonów. I zależy mi aby button który został wciśnięty był inny (inny image) do momentu jak nie wcisnę innego buttona. Da się to jakoś wykonać ?

 

 

1 odpowiedź

+1 głos
odpowiedź 20 kwietnia 2023 przez VBService Ekspert (254,480 p.)
edycja 20 kwietnia 2023 przez VBService

Proponuje przypisać jedno zdarzenie Click do wszystkich button-ów w menu i posłużyć się zmienną, która będzie "pamiętać" ostatnio kliknięty button.

Prosty przykład (zmiana koloru tła - zamiana na Properties.Resources ... leży już w Twojej gestii smiley)

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private static Button menu_last_clicked;
        
        public Form1()
        {
            InitializeComponent();

            /*
            button1.Click += new EventHandler(menuButton_Click);
            button2.Click += new EventHandler(menuButton_Click);
            button3.Click += new EventHandler(menuButton_Click);
            button4.Click += new EventHandler(menuButton_Click);
            */

            foreach (Button button in new Button[] { button1, button2, button3, button4 })
            {
                button.Click += new EventHandler(menuButton_Click);
            }
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            Button menu_current_clicked = (Button)sender;

            Color color = Color.Transparent; // domyślny gdy niekliknięty
            if (menu_last_clicked != null) menu_last_clicked.BackColor = color;

            switch (menu_current_clicked.Name.ToString())
            {
                case "button1": color = Color.Gold; break;
                case "button2": color = Color.Red; break;
                case "button3": color = Color.ForestGreen; break;
                case "button4": color = Color.BlueViolet; break;
            }

            menu_current_clicked.BackColor = color;
            menu_last_clicked = menu_current_clicked;
        }
    }
}

 

komentarz 20 kwietnia 2023 przez VBService Ekspert (254,480 p.)

Analogicznie możesz przypisać też jedno zdarzenie MouseHover i MouseLeave wink

 

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private static Button menu_last_clicked;
        
        public Form1()
        {
            InitializeComponent();

            foreach (Button button in new Button[] { btnIncome, button2, button3, button4 })
            {
                button.Click += new EventHandler(menuButton_Click);
                button.MouseHover += new EventHandler(menuButton_MouseHover);
                button.MouseLeave += new EventHandler(menuButton_MouseLeave);
            }
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            Button menu_current_clicked = (Button)sender;

            ...
            menu_last_clicked = menu_current_clicked;
        }

        private void menuButton_MouseHover(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
            Button button = (Button)sender;

            Image image;
            switch (button.Name.ToString())
            {
                case "btnIncome": image = Properties.Resources.income_btn_hover; break;
                ...
            }
            if (image != null) button.Image = image;
        }

        private void menuButton_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Default;
            Button button = (Button)sender;

            Image image;
            switch (button.Name.ToString())
            {
                case "btnIncome": image = Properties.Resources.income_btn_normal; break;
                ...
            }
            if (image != null) button.Image = image;
        }
    }
}

 

komentarz 27 kwietnia 2023 przez Mati336 Użytkownik (560 p.)

Cholera Wielkie dzięki za pomoc ale ani jedno ani drugie mi nie działa :(

W pierwszym się włączają różne kolory a przerobiłem to tak (dla uproszczenia dla dwóch buttonów):



namespace button1
{
    public partial class Form1 : Form
    {

        private static Button menu_last_clicked;
        public Form1()
        {

            InitializeComponent();
            
            foreach (Button button in new Button[] { button1, button2})
            {
                button.Click += new EventHandler(menuButton_Click);
            }
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            Button menu_current_clicked = (Button)sender;

            Image image1 = Properties.Resources.buttonblue;
            if (menu_last_clicked != null) menu_last_clicked.Image = image1;

            switch (menu_current_clicked.Name.ToString())
            {
                case "button1": image1 = Properties.Resources.buttongreen; break;
                case "button2": image1 = Properties.Resources.buttonred; break;                   
            }

            menu_current_clicked.Image = image1;
            menu_last_clicked = menu_current_clicked;
        }
    }
}

plik_c#

A w drugim mam jakiś błąd dla image:

namespace buttontestimage
{
    public partial class Form1 : Form
    {

        private static Button menu_last_clicked;
        public Form1()
        {
            InitializeComponent();

            foreach (Button button in new Button[] { btnIncome, button2 })
            {
                button.Click += new EventHandler(menuButton_Click);
                button.MouseHover += new EventHandler(menuButton_MouseHover);
                button.MouseLeave += new EventHandler(menuButton_MouseLeave);
            }
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            Button menu_current_clicked = (Button)sender;

            menu_last_clicked = menu_current_clicked;
        }

        private void menuButton_MouseHover(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
            Button button = (Button)sender;

            Image image;
            switch (button.Name.ToString())
            {
                case "btnIncome": image = Properties.Resources.income_btn_hover; break;
                case "button2": image = Properties.Resources.income_btn_color; break;
            }
            if (image != null) button.Image = image;
        }

        private void menuButton_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Default;
            Button button = (Button)sender;

            Image image;
            switch (button.Name.ToString())
            {
                case "btnIncome": image = Properties.Resources.income_btn_normal; break;
                case "button2": image = Properties.Resources.income_btn_color; break;
            }
            if (image != null) button.Image = image;
        }
    }
}

plik_c#

gdzie tu jest błąd? W jednym lub drugim? :((

 

komentarz 27 kwietnia 2023 przez VBService Ekspert (254,480 p.)

Sprawdź (ustaw dla 3 button-ów dla lepszej prezentacji)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace button1
{
    public partial class Form1 : Form
    {

        private static Button menu_last_clicked;
        public Form1()
        {
            InitializeComponent();         

            foreach (Button button in new Button[] { button1, button2, button3 })
            {
                button.Click += new EventHandler(menuButton_Click);
                // domyślnym obrazkiem jest buttonblue.png
                button.Image = Properties.Resources.buttonblue;
            }
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            Button menu_current_clicked = (Button)sender;

            Image image = null;
            if (menu_last_clicked != null) menu_last_clicked.Image = Properties.Resources.buttonblue;

            switch (menu_current_clicked.Name.ToString())
            {
                case "button1": image = Properties.Resources.buttongreen; break;
                case "button2": image = Properties.Resources.buttonred; break;
                case "button3": image = Properties.Resources.buttongreen; break;
            }

            if (image != null) menu_current_clicked.Image = image;
            menu_last_clicked = menu_current_clicked;
        }
    }
}

 

chyba, że chcesz mieć default-owy wygląd dla button-ów

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace button1
{
    public partial class Form1 : Form
    {

        private static Button menu_last_clicked;
        public Form1()
        {
            InitializeComponent();         

            foreach (Button button in new Button[] { button1, button2, button3 })
            {
                button.Click += new EventHandler(menuButton_Click);
            }
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            Button menu_current_clicked = (Button)sender;

            Image image = null;
            if (menu_last_clicked != null) menu_last_clicked.Image = null;

            switch (menu_current_clicked.Name.ToString())
            {
                case "button1": image = Properties.Resources.buttongreen; break;
                case "button2": image = Properties.Resources.buttonred; break;
                case "button3": image = Properties.Resources.buttonblue; break;
            }

            if (image != null) menu_current_clicked.Image = image;
            menu_last_clicked = menu_current_clicked;
        }
    }
}

 

1
komentarz 27 kwietnia 2023 przez Mati336 Użytkownik (560 p.)
Kurcze, VBService Królu Złoty, wielkie dzięki o to mi chodziło !!!! Za nic nie mogłem sobie z tym poradzić.

Podobne pytania

0 głosów
2 odpowiedzi 753 wizyt
pytanie zadane 30 czerwca 2020 w HTML i CSS przez asdsad Początkujący (420 p.)
0 głosów
1 odpowiedź 706 wizyt
pytanie zadane 8 lutego 2016 w C# przez marioosu Dyskutant (9,260 p.)
0 głosów
0 odpowiedzi 194 wizyt
pytanie zadane 20 maja 2020 w JavaScript przez Klaudiaaa Początkujący (390 p.)

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...