Wywołanie klika

0

Visual 2008, frejmwork 3.5

W klasie mam liste kontrolek z przekazanego widoku

List<Control> controls = userControl.Controls.OfType<Control>().Where(p => p.GetType() == typeof(System.Windows.Forms.TextBox) || p.GetType() == typeof(System.Windows.Forms.Button) || p.GetType() == typeof(System.Windows.Forms.ComboBox)).OrderBy(p => p.TabIndex).ToList();

I kręce się po tej liście, i w pewnym przypadku chciałbym zasymulować zdarzenie klik

for (int i = 0; i < controls.Count; i++)
{
   if (controls[i].Focused && i + 1 <= controls.Count && controls[i].GetType() != typeof(System.Windows.Forms.Button))
   {
         Klik?
    }
}

Czy ktoś ma pomysł jak to zrobić? Funkcji PerformClick() w tym frejmworku nie ma

1

Według dokumentacji PerformClick() jest od wersji 1.1 Button.PerformClick Metoda

Nie masz tej metody ponieważ obiekt typu Control nie ma PerformClick(), musisz mu "powiedzieć", że to Button

if(controls[i].GetType() == typeof(Button))
{
    Button btn = (Button)controls[i];
    btn.PerformClick();
}
0

Już tak robiłem, niestety nie mam metody PerformClick();

1

Nie będę specjalnie instalować Visual Studio 2008 żeby ci w pełni udowodnić, że to tam jest.
Visual Studio 2017, projekt w .NET Framework 3.5
https://imgur.com/7XPLeuj

1

Jaki to jest typ projektu? WPF, czy WinForms?

0

WinForms

1

No bo PerformClick jest w Button. A Ty operujesz na Control. Ktoś nie przemyślał, i klasa bazowa nie ma wszystkich metod wszystkich swoich klas pochodnych, a szkoda.

W ogóle co to jest to: List<Control> controls = userControl.Controls.OfType<Control>(), wybierasz kontrolki, które są kontrolkami? No to chyba wszystkie będą, więc tak trochę bez efektu.

Zrób tak:

var buttons = userControl.Controls.OfType<Button>();
foreach (var butt in buttons)
    butt.PerformClick();
2

Aż normalnie wyciągnąłem starego lapka z szafy.

vs2k8.PNG

SOA#1.

2

Nie widać moich postów? :-D Ja to wszystko pisałem. Zwyczajnie olałem dalszą próbę pomocy, ponieważ albo nie piszę tutaj wszystkiego, albo nie robi tak jak się mu mówi.

2

Gdyby to było jednak w WPF to może to pomoże. (ściągnięte z https://stackoverflow.com/questions/4734482/button1-performclick-in-wpf)

Aby użyć stylu aplikacji Windows Form, musisz napisać następującą metodę rozszerzenia:

namespace System.Windows.Controls
{
    public static class MyExt
    {
         public static void PerformClick(this Button btn)
         {
             btn.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
         }
    }
}

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