Mam aplikację formularza Windows z wielomaguziki. Muszę pobrać właściwość tekstową dowolnego klikniętego przycisku, aby utworzyć zapytanie do bazy danych. jedyny sposób, jaki znam, to utworzenie zdarzenia kliknięcia przycisku i obsadzenie nadawcy jako przycisku, a następnie wykonanie przypadku przełącznika dla każdego identyfikatora przycisku, co wydaje się bardzo gorączkowe, ponieważ prawdopodobnie będę mieć ponad 100 przycisków w całej aplikacji. Więc mam pytanie, czy istnieje ogólna metoda naciskania klawiszy, którą mogę utworzyć, która może pobrać właściwość tekstową dowolnego przycisku naciśniętego / klikniętego w formularzu? Przepraszam, jeśli pytanie nie jest bardzo jasne. Każda pomoc będzie mile widziana
Odpowiedzi:
3 dla odpowiedzi № 1Użyj obsługi zdarzeń pojedynczego kliknięcia dla wszystkich podobnychrodzaj przycisków. W ten sposób będzie przypisane zdarzenie kliknięcia dla każdego przycisku, ale tylko jedna metoda, która zostanie wykonana dla wszystkich przycisków. Możesz określić, który przycisk został naciśnięty w następujący sposób. Używanie obiektu nadawcy w następujący sposób;
private void button_Click(object sender, EventArgs e)
{
var buttonText = ((Button)sender).Text;
//Query using buttonText
}
Aktualizacja: Powyższa odpowiedź nadal wymaga subskrypcji zdarzenia kliknięcia dla każdego przycisku. Jeśli nie chcesz tego, spójrz na następujące podejście;
Możesz użyć (ClickTransparentButton lub) wyłącz (Enabled=false)
wszystkie te przyciski i dodaj zdarzenie kliknięcia w formularzu nadrzędnym. Po otrzymaniu zdarzenia kliknięcia można uzyskać przycisk, który został kliknięty w następujący sposób;
private void Form1_Click(object sender, EventArgs e)
{
var p = PointToClient(Cursor.Position);
var control = GetChildAtPoint(p);
if(control is Button)
{
var buttonText = ((Button)control).Text;
//Query using buttonText
}
}
Ma to jednak kilka wad, takich jak brak możliwości obsługi tych przycisków za pomocą klawiatury. i więcej...
0 dla odpowiedzi nr 2
Utwórz jakąś funkcję jako moduł obsługi przycisków:
private void buttonClickHandler(object sender, EventArgs e) { string buttonName = (sender as Button).Text; }
2A. Połączyć Kliknij zdarzenie każdego przycisku dla tego modułu obsługi.
2B. Aby zautomatyzować połączenie modułu obsługi kliknięć przycisków, użyj czegoś takiego:
private void connectButtonsHandlers()
{
foreach(var c in this.Controls)
{
if(c is Button)
{
(c as Button).Click += buttonClickHandler;
}
}
}
Dodaj ten kod, aby utworzyć konstruktor w celu wykonania połączenia przy uruchomieniu programu.