Jak sprawdzić, który label został kliknięty?

0

Mam na formie cztery labele, label1, label2, label3, label4. Czy jest jakiś łatwy sposób, aby sprawdzić na który z nich kliknął użytkownik? Czy trzeba każdy za koleją sprawdzać czy został kliknięty czy nie?

0

Napisz procedurę obsługi kliknięcia pierwszego labelka: Label1, w której pobierz z paramertu potrzebne informacje rzutując na typ TLabel.

W Delphi wyglądało by to tak:

procedure TMainForm.Label1Click(Sender: TObject);
begin
  ShowMessage(TLabel(Sender).Name);
end;

W tym przykładzie pobierana jest nazwa komponentu, jeżeli masz jakieś dodatkowe informacje w swoim komponencie, wyciąg je i odpowiednio wykorzystaj.

Nie wiem co jest odpowiednikiem Sender w C#, ale Ty będziesz wiedział. Chyba w C# jest rzutowanie, więc wykorzystaj je.

Jeśli korzystasz z kompilatora pracującego w trybie RAD, przypisz w inspektorze obiektów pozostałym trzem labelom procedurkę pierwszego, a jeśli nie, przypisz programowo w OnCreate formularza.

0

Każemu ustawić te same zdarzenie i odpowiednio zmolestować argument zdarzenia, z niego wyciągniesz jakoś który obiekt wywołał to zdarzenie

0

klikanie labeli to kiepski pomysł, od tego jest lepszy komponent LinkLabel. dlatego na nim pokażę przykład BoZzDoGa w C#:

• kładziesz cztery LinkLabele na formę
• klikasz dwukrotnie pierwszego, piszesz:

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            var klikniety = sender as LinkLabel;
            MessageBox.Show("kliknięto label " + klikniety.Text);
        }

• trzem pozostałym ręcznie ustawiasz w oknie Properties, zakładce Events zdarzenie LinkClicked na linkLabel1_LinkClicked.
• sensowne byłoby zmienienie nazwy tej metody, bo teraz dotyczy nie tylko labela nr 1.

Dla zwykłych Labeli robi się tak samo, tylko zdarzenie nazywa się po prostu Clicked.

0

Azarien, sam pomysł z siebie nie wygląda źle, jeżeli autorowi chodzi o to, by efekt był taki, jak w TLinkLabel to owszem, masz całkowitą rację.

A jeśli nie to i tak można link label przerobić w dowolny sposób i odwrotnie, zwyczajny label zrobić na kształt i wygląd tego pierwszego, poprzez zdarzenia OnMouseEnter i OnMouseLeave.

W każdym razie po to jest LinkLabel by z niego korzystać :)

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