none
Button Klick aufrufen RRS feed

  • Frage

  • Hallo

     

    ich habe eine kleines Problem. In meinem Programm habe ich mehrere Button definiert mit entsprechender Funktion. Jetzt möchte ich aus einer beliebigen stelle im Programm die Funktion hinter dem Button aufrufen. Also die Button Funktion aufrufen ohne den Button zu drucken. Aber irgendwie finde ich nicht den richtigen weg. Es gibt doch sicherlich eine einfache Lösung für das Problem, kann mir jemand auf die Sprünge helfen?

    DANKE!

    Samstag, 12. November 2011 09:00

Antworten

  • Beim Button-Klick wird eine Methode im Code aufgerufen, die so aussehen kann:
     
      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
    Diese Methode kannst Du beliebig aufrufen, z.B. so:
     
    Button1_Click(Nothing, Nothing)
     
    Das setzt voraus, dass in der Methode die formalen Parameter sender und e nicht genutzt werden.
     
    --
    Viele Gruesse
    Peter
    • Als Antwort markiert Micha456 Samstag, 12. November 2011 12:50
    Samstag, 12. November 2011 10:20
  • Also zum einen kannst Du wie Peter schon gesagt hat, den Eventhandler direkt aufrufen.

    Es gibt evtl. aber auch andere Möglichkeiten nur eben ist da wichtig, welche Technologie Du verwendest.

    Ein Windows Forms Button hat z.B. InvokeOnClick. Damit triggerst Du das Click Event.

    (Im Gegensatz zur Lösung von Peter hast Du damit wirklich das Event ausgelöst. Dies kann z.B. notwendig sein, wenn die Eventhandler dynamisch sind und Du nicht weisst, wer alle das Event behandeln möchte.)

    Mit den besten Grüßen,

    Konrad

    • Als Antwort markiert Micha456 Samstag, 12. November 2011 12:50
    Samstag, 12. November 2011 11:00

Alle Antworten

  • Beim Button-Klick wird eine Methode im Code aufgerufen, die so aussehen kann:
     
      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
    Diese Methode kannst Du beliebig aufrufen, z.B. so:
     
    Button1_Click(Nothing, Nothing)
     
    Das setzt voraus, dass in der Methode die formalen Parameter sender und e nicht genutzt werden.
     
    --
    Viele Gruesse
    Peter
    • Als Antwort markiert Micha456 Samstag, 12. November 2011 12:50
    Samstag, 12. November 2011 10:20
  • Also zum einen kannst Du wie Peter schon gesagt hat, den Eventhandler direkt aufrufen.

    Es gibt evtl. aber auch andere Möglichkeiten nur eben ist da wichtig, welche Technologie Du verwendest.

    Ein Windows Forms Button hat z.B. InvokeOnClick. Damit triggerst Du das Click Event.

    (Im Gegensatz zur Lösung von Peter hast Du damit wirklich das Event ausgelöst. Dies kann z.B. notwendig sein, wenn die Eventhandler dynamisch sind und Du nicht weisst, wer alle das Event behandeln möchte.)

    Mit den besten Grüßen,

    Konrad

    • Als Antwort markiert Micha456 Samstag, 12. November 2011 12:50
    Samstag, 12. November 2011 11:00
  • Erst einmal Danke für die rasche Antwort.

    Beide Versionen helfen mir weiter. Mir war bis dato der Term „Nothing“ nicht bekannt. Ich hatte es zwar schon mit der Bezeichnung „null“ probiert, aber die gibt es nur in c++.

    Noch mal Danke für die Infos.

     

    Mit freundlichem Gruß

    Michael

    Samstag, 12. November 2011 12:51
  • Hallo Micha,
    ich habe eine kleines Problem. In meinem Programm habe ich mehrere Button definiert mit entsprechender Funktion. Jetzt möchte ich aus einer beliebigen stelle im Programm die Funktion hinter dem Button aufrufen. Also die Button Funktion aufrufen ohne den Button zu drucken.

    nur so als Anmerkung: Es ist meistens keine gute Idee, in der Methode für den Button Anwendungslogik zu hinterlegen. Hier sollte man eher eine entsprechende Methode erstellen, die die Logik enthält und aus dem Button.Click Eventhandler heraus nur diese Methode aufrufen. Die kann man dann auch von anderer Stelle aus aufrufen ohne solche Konstrukte fabrizieren zu müssen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 12. November 2011 14:36
    Moderator
  •  

    Hallo Stefan,

    über diese Variante habe ich auch nach gedacht.

    Allerdings macht das nach meiner Meinung den Code nicht gerade übersichtlicher.In meinem Fall werden mit den verschiedenen Button nur einige Steuerwerte an eine Maschine übergeben. Jetzt kommt es vor das die Maschine im zustand Button1 steht und Button2 wird gedrückt, nach kurzer zeit soll sie wieder in den zustand der unter Button1 beschrieben ist zurückgestellt werden.

    Jetzt kann man für jeden Zustand eine eigene Funktion erstellen die von der Button Funktion aufgerufen wird. Dann habe ich aber für jeden zustand zwei Funktionen. Gerade in Visual Basic finde ich das nicht ideal, da ich ja aus dem Form Editor sofort in die Funktion abspringen kann. Wenn hier nur eine verwies auf die nächste Funktion steht wird die Sache unübersichtlich.

    Gruß

    Michael

     

    Samstag, 12. November 2011 17:42
  • Hallo Michael,

    nuja, wenn Du den Code so "komisch" aufbaust, ist das klar, dass es unübersichtlich wird.

    Ggfs. wäre es hier sinnvoll, mal über den Gesamtaufbau des Codes nachzudenken. Aber das wäre hier fehl am Platz, da das doch ein ziemlich umfangreiches Thema ist.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 12. November 2011 20:34
    Moderator
  • Ich sehe es genau so wie Stefan.
     
    Wenn hier nur eine verwies auf die nächste Funktion steht wird die Sache unübersichtlich.
     
    Genau umgekehrt wird wird es übersichtlich. Die Zustandslogik wird in eine Klasse ausgelagert und bietet passende Methoden, um diese Zustände zu beeinflussen. Aus der Oberfläche, resp. Ereignismethoden im Codebehind (der Oberfläche) werden dann nur die Methoden dieser Zustandslogik-Klasse aufgerufen. Erst damit wird das Projekt wirklich übersichtlich.
     
    --
    Viele Gruesse
    Peter
    Sonntag, 13. November 2011 09:22
  • Da muss ich euch natürlich recht geben.

    Bei Projekten in denen man die Bereiche in verschiedene Klassen aufteilt sollte man keine Logik direkt unter die Button Funktion schreiben. Bei mir handelt es sich momentan aber nur um eine kleines Hilfsprogramm. Alle Funktionen stehen in einer Klasse. Hier habe ich mir die Aufteilungen in mehre Bereiche gespart. Was sicherlich Technisch nicht der beste weg ist, mich aber momentan schneller ans Ziel führt.

    Gruß

    Michael

    Sonntag, 13. November 2011 11:00
  • Bei mir handelt es sich momentan aber nur um eine kleines Hilfsprogramm. Alle Funktionen stehen in einer Klasse. ... mich aber momentan schneller ans Ziel führt.
     
    Allein Deine Bemerkungen in diesem thread zeigen, dass diese letzte Aussage von Dir nicht ganz stimmen kann. Durch die 1 bzw. 3 zusätzlichen Codezeilen verlierst Du ggf. 20 Sekunden Programmierzeit.
     
    --
    Viele Gruesse
    Peter
    Sonntag, 13. November 2011 14:09
  •  Na wie schon gesagt, Ihr habt ja recht. Und ich bin schon am überlegen das Programm umzustellen. Meine Problem ist nur immer ein gute Kommunikation unter den Klassen hin zu bekommen. Aber ich werde es wohl hinbekommen. Ob das Projekt schon als groß oder klein anzusehen ist ist Geschmackssache.

    Gruß

    Michael

    Sonntag, 13. November 2011 16:13