Zapamatování kliknutí na tlačítko   otázka

VB.NET

Jak mohu program naučit ,aby si zapamatoval na který tlačítko jsem kliknul?

Mám 20 tlačítek (button1,button2,...) jak mám udělat aby program zapamatoval že jsem kliknul na button4 a button6?

Děkuji

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Napadají mě dvě realizace:

1) u každého tlačítka využít vlastnost Tag, při stisku jí nastavit hodnotu True a následně kontrolovat.

2) v aplikaci mít pole typu boolean, a při stisku opět nastavit příznak na daném indexu v poli.

Navím jak máte deklarovaná tlačítka, asi by zde bylo výhodnější deklarovat tlačítka v poli s ohledem na 2. způsob.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Vytvořte si datový objekt (například slovník - Dictionary), který ponese informace o zobrazeném formuláři včetně tlačítek, na které uživatel kliknul.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud vytváříte tlačítka dynamicky tak je asi nejjednodušší zpusob s Tag.

Pokud chcete kontrolovat jen vybraná tlačítka na formuláři lze použít např. toto:

        private readonly Dictionary<Button, bool> _kolekceStisknute;

        public Form1()
        {
            InitializeComponent();
            _kolekceStisknute = new Dictionary<Button, bool>();

            //Přihlášení událostí
            button1.Click += OnButtonClick;
            button2.Click += OnButtonClick;
            button3.Click += OnButtonClick; 
            button4.Click += OnButtonClick;
            button5.Click += OnButtonClick;
            button6.Click += OnButtonClick;

            //Kontrolovaná tlačítka
            _kolekceStisknute.Add(button1, false);
            _kolekceStisknute.Add(button2, false);
            _kolekceStisknute.Add(button3, false);
            _kolekceStisknute.Add(button4, false);
            _kolekceStisknute.Add(button5, false);
            _kolekceStisknute.Add(button6, false);

        }

        //Událost stisknutí tlačítka
        void OnButtonClick(object sender, EventArgs e)
        {

            var btn = sender as Button;
            if (btn == null) return;

            //pokud není tlačítko ve slovníku (nechci ho kontrolovat) -> return;
            if (!_kolekceStisknute.ContainsKey(btn)) return;

            if (!_kolekceStisknute[btn])
            {
                //tlačítko je stisknuto poprvé
                _kolekceStisknute[btn] = true;
                label1.Text = string.Format("Tlačítko {0} je stisknuto poprvé.", btn.Name);
            }
            else
            {
                //tlačítko již bylo stisknuto
                label1.Text = string.Format("Tlačítko {0} již bylo stisknuto.", btn.Name);
            }
        }
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Na úplně nejjednodušší jednoúčelové úlohy se to dá akceptovat. Na cokoliv složitějšího je to ale nevhodné řešení a vyplatí se používat buď potomka s novými vlastnostmi a metodami a nebo mít popisný model oddělený od UI komponenty.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback