2010-07-06 16 views
5

Mam etykietę łącza formularza Windows "Odśwież", która odświeża ekran.Wywoływanie zdarzenia "kliknięcie" bez wprowadzenia użytkownika

W innej części mojego kodu, części oddzielnego formularza okna, mam okno dialogowe, które zmienia dane załadowane na wyświetlacz w pierwszej kolejności. Po wykonaniu tego drugiego kodu, naciśnięcie "Odśwież" aktualizuje dane poprawnie.

Czy istnieje prosty sposób, aby menu dialogowe kliknęło "Odśwież" etykietę łącza po zakończeniu zmiany danych?

Korzystanie z Visual Studio 2008.

Odpowiedz

9

Na przycisku jest bardzo proste, wystarczy użyć:

button.PerformClick() 

Zresztą wolałbym zrobić coś takiego:

private void button_Click(object sender, EventArgs e) 
{ 
    DoRefresh(); 
} 

public void DoRefresh() 
{ 
    // refreshing code 
} 

i nazywają DoRefresh() zamiast PerformClick()


EDIT (zgodnie ze zmianami OP):

Można nadal używać mojego drugiego rozwiązania, które jest o wiele lepsze:

private void linkLabel_Click(object sender, EventArgs e) 
{ 
    DoRefresh(); 
} 

public void DoRefresh() 
{ 
    // refreshing code 
} 

i spoza postaci, można zadzwonić DoRefresh() jak to jest oznaczone jako publiczne.

Ale jeśli naprawdę trzeba programowo generować kliknięcia, wystarczy spojrzeć na Yuriy-Faktorovich's Answer

+0

+1 za alternatywę dla PerformClick. PerformClick to hackowe podejście do kodu produkcyjnego. Myślę, że powinno to na ogół ograniczać się do testowania. –

+0

Moja wina; Zakładałem, że to przycisk, ale w rzeczywistości jest to etykieta linku, która działa jak przycisk. Czy istnieje podobna metoda dla tych? –

+0

http://msdn.microsoft.com/en-us/library/bb337532.aspx, ale jak powiedziałeś, oddzielna metoda jest lepsza. –

5

Można wywołać PerformClick method. Ale generalnie lepiej jest, aby zdarzenie Click przycisku wywoływało metodę Refresh, którą piszesz. A menu również wywołuje tę metodę. W przeciwnym razie twoje menu zależy od przycisku.

Edit:

LinkLabel realizuje IButtonControl wyraźnie. Więc można używać:

((IButtonControl)button).PerformClick();

0

można użyć metody refrech wyświetlacza, bouton_click i połączenia DialogBox tej metody

public void refrechDate() 
{ 
} 


private void button_click(...) 
{ 
    refrechData(); 
} 
0
private void MyMethod() 
{ 
    // ... 

    // calling refresh 
    this.button1_Click(this.button1, EventArgs.Empty); 

    // ... 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    // refresh code 
} 
Powiązane problemy