none
Button_Click einer "fremden" Form auslösen RRS feed

  • Frage

  • Hallo,

    in meiner Anwendung habe ich einige Forms und einige davon beherbergen Buttons mir einer Menge Code.
    Nun bin ich an einer Stelle, bei der ich innerhalb meiner aktuellen Form eine Änderung vornehme, die sich auf die ListBox auswirkt.
    Dazu muss ich im Programm

    1. Eine PictureBox anklicken und
    2. Einen Button.

    Für den Button gibt es ja die Methode Button1.PerformClick()
    Gibt es so etwas auch für eine PictureBox?


    Liebe Grüße Stefan
    Freitag, 9. April 2010 23:44

Antworten

  • Hallo Stefan,

    PerformClick simuliert tatsächlich einen Click auf den Button. Dadurch wird nicht nur das Click Ereignis gefeuert, sondern auch die Validierung der einzelnen Controls ausgelöst. Wenn das gewünscht ist, muss man natürlich sogar mit PerformClick arbeiten. Der Button ist auch das einzige Control, das über eine solche Methode verfügt.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    • Als Antwort markiert Giftzwockel Samstag, 10. April 2010 16:50
    Samstag, 10. April 2010 16:23
  • Hi,

    das sinnvollste wäre wohl, den ganzen Code aus der Button_click- bzw. PictureBox_click- Methode in eine eigene, als public deklarierte Methode auszulagern. Diese musst du dann nur noch in den click-Methoden aufrufen. Außerdem kannst du sie dann auch von außerhalb, also von deiner anderen Form aus, aufrufen.

    mfg

    Imperium_Romanum


    MAY THE SOURCE BE WITH YOU!
    Samstag, 10. April 2010 08:06

Alle Antworten

  • Guten Morgen Stefan

    Hatte das hier neulich auch. Habe dann aber lieber ne Sub vom Code gemacht.

    LG Peter


    Wer sonst keine Probleme hat schafft sich einen Computer an.
    Samstag, 10. April 2010 06:30
  • Hi,

    das sinnvollste wäre wohl, den ganzen Code aus der Button_click- bzw. PictureBox_click- Methode in eine eigene, als public deklarierte Methode auszulagern. Diese musst du dann nur noch in den click-Methoden aufrufen. Außerdem kannst du sie dann auch von außerhalb, also von deiner anderen Form aus, aufrufen.

    mfg

    Imperium_Romanum


    MAY THE SOURCE BE WITH YOU!
    Samstag, 10. April 2010 08:06
  • Hallo,

    genau das ist nein Problem. Button Click als Button1.PerformClick() kenne ich.
    Ich muss aber erst PictureBox1 klicken und PictureBox1.PerformClick() gibt es m.W. nicht.
    Wie klicke ich per Code eine PictureBox an?


    Liebe Grüße Stefan
    Samstag, 10. April 2010 13:21
  • Hallo,

    also die Antwort ist jetzt nicht mehr soooo dringen.
    Ich habe doch den Code meiner PictureBox1.Click übernommen und danach Button1.PerformClick() gemacht.  Das Programm liefert nun das gewünschte Ergebnis. Dennoch würde mich der kurze Weg schon interessieren. Ich habe den Code von Private nach Public geänert:

    Aus

    Private

     

    Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

     

    Try .....

    wurde

    Public

     

    Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

     

    Try .....

     

    Reicht das schon aus???? Das erscheint mir ZU einfach.
    Dann blieb aber noch das Problem, dass ich erst die PictureBox1 (hier habe ich Code eines Buttons eingefügt, das hat aber nichts direkt mit meinem aktuellen Programm zu tun) klicken muss, da ich hierdurch das Verzeichnis und die komplette Anzeige meiner Form beeinflusse. Erst, wenn ich in das übergerordnete Verzeichnis gewechselt habe, kann das Programm die Folgschritte abarbeiten.


    Liebe Grüße Stefan
    Samstag, 10. April 2010 13:44
  • Hallo Stefan,

    Du möchtest nichts "anklicken", sondern Methoden ausführen. Dazu muss nichts angeklickt werden. Das Klicken ist nur eine Art einen Methodenaufruf anzustoßen. Damit Du Methoden eines anderen Formulars aufrufen kannst, müssen diese entweder öffentlich (Public) oder projektintern (Friend) deklariert werden. Theoretisch kannst Du natürlich die Ereignismethode "Button1_Click" öffentlich zur Verfügung stellen und vom anderen Formular aus aufrufen. Hat jedoch den Nachteil, dass Du immer zwei Parameter mitgeben musst, für die Du keine sinnvolle Verwendung hast, wenn der Aufruf von einem anderen Formular aus erfolgt. Zudem ergibt sich ein Problem, wenn der Button1 mal aus Deinem Formular verschwindet, die Funktion aber nach wie vor gegeben sein soll. Daher die Empfehlung die Funktion in eine eigene öffentliche/projektinterne Methode auszulagern, die einen sprechenden Namen hat aus dem man ableiten kann, was diese Methode macht.  Diese Methode kannst Du dann sowohl von Button1, Deiner PictureBox und eben von dem anderen Formular aus aufrufen.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Samstag, 10. April 2010 14:14
  • Hallo Thorsten,

    ok, habe ich verstanden. Manchmal ist es ohnhin besser, wenn man erst selber noch mal prüft, was von vorhandenen Methode für das, was man neu  vor hat, überhaupt benötigt wird. Ich bin eben ein bequemer Mensch.
    Eure Antworten haben mir einige Denkanstöße gegeben und nun bin ich dann relativ leicht zu meinen gewünschten Ergebnis gekommen ohne all das, was in der anderen Methode benötigt wird, übernehmen zu müssen. Der Code wurde schlanker und die Arbeistgeschwindigkeit in diesem Fall ebenfalls extrem, weil der Zugriff über einen FTP-Server läuft.

    Deine Ausführungen habe ich nun auch prinzipiell verstanden.
    ABER dennoch gibt es einen Befehl um einen Button_Click von einem anderen Formular aus zu initiieren. Ok, ich weiß nun, dass ich damit die Methode, die dem Button zugrunde liegt auslöse. Bei anderen Controls (sind das Controls?) geht das scheinbar nicht so einfach. Wenn ich das weiß, solls mir fürs Erste genügen und mit den anderen Methoden setzte ich mich dann auseinander.


    Liebe Grüße Stefan
    Samstag, 10. April 2010 15:58
  • Hallo Stefan,

    PerformClick simuliert tatsächlich einen Click auf den Button. Dadurch wird nicht nur das Click Ereignis gefeuert, sondern auch die Validierung der einzelnen Controls ausgelöst. Wenn das gewünscht ist, muss man natürlich sogar mit PerformClick arbeiten. Der Button ist auch das einzige Control, das über eine solche Methode verfügt.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    • Als Antwort markiert Giftzwockel Samstag, 10. April 2010 16:50
    Samstag, 10. April 2010 16:23
  • Hallo Thorsten, Aha, jetzt bin ich zufrieden ;-) Danke!
    Liebe Grüße Stefan
    Samstag, 10. April 2010 16:54