Wywołanie klika

DL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Visual 2008, frejmwork 3.5

W klasie mam liste kontrolek z przekazanego widoku

Kopiuj
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

Kopiuj
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

AdamWox
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Jastrzębie-Zdrój
  • Postów: 2180
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

Kopiuj
if(controls[i].GetType() == typeof(Button))
{
    Button btn = (Button)controls[i];
    btn.PerformClick();
}
DL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

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

AdamWox
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Jastrzębie-Zdrój
  • Postów: 2180
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

DL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
AdamWox
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Jastrzębie-Zdrój
  • Postów: 2180
1

Jaki to jest typ projektu? WPF, czy WinForms?

DL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

WinForms

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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:

Kopiuj
var buttons = userControl.Controls.OfType<Button>();
foreach (var butt in buttons)
    butt.PerformClick();
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2

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

vs2k8.PNG

SOA#1.

AdamWox
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Jastrzębie-Zdrój
  • Postów: 2180
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.

Grzegorz Świdwa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 385
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)

Kopiuj
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));
         }
    }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.