/ / jak odzyskać tekst przycisków klikniętych w formularzu systemu Windows za pomocą jednej metody - c #, winforms, button

jak odzyskać tekst przycisków klikniętych w formularz okna za pomocą jednej metody - c #, winformy, przycisk

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 № 1

Uż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
  1. 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.