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?
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.
Każemu ustawić te same zdarzenie i odpowiednio zmolestować argument zdarzenia, z niego wyciągniesz jakoś który obiekt wywołał to zdarzenie
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 Label
i robi się tak samo, tylko zdarzenie nazywa się po prostu Clicked
.
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ć :)