Slideshow



  • Stop den Timer für den Bildwechsel im ResizeBegin Event und starte ihn wieder im ResizeEnd Event.

    Z. B. so:

    private: System::Void Form1_ResizeBegin(System::Object^  sender, System::EventArgs^  e) {
                     this->timer1->Stop();
                 }
    private: System::Void Form1_ResizeEnd(System::Object^  sender, System::EventArgs^  e) {
                     this->timer1->Start();
                 }
    


  • Danke, das funktioniert gut. 👍
    Kann mir nochjemand sagen, welches Events durch Klicken der Maximieren/Minimieren-Schaltflächen ausgelöst werden?

    Ich finde leider nur MaximizedBoundsChanged bzw MinimumSizeChanged und das ist ja leider was anderes.
    Komisch, dass es nicht unter this->MaximizeBox->Click oder so zu finden ist.

    In der Hilfe habe ich dann entdeckt, dass durch das Klicken dieser Schaltflächen ein Resize-Ereignis ausgelöst wird, blöderweise scheint das durch meine ResizeBegin und ResizeEnd jedoch nicht abgedeckt zu sein.
    Schafft man es nämlich, genau im Moment des Bildwechsels auf Maximieren zu klicken, schmiert es mir nach wie vor mit genannter Meldung ab.

    Man findet zwar auch noch this->Resize, wo man einen Eventhandler einfügen könnte ... nur wie starte ich den Timer dann wieder? Bzw. ist das überhaupt das Richtige?

    Hilfe, hätte ich am Anfang gewusst, dass dieses kleine Ding so in Arbeit ausartet, hätte ich es gelassen 😡
    Aber wenn, dann soll es natürlich auch bugfrei sein 🙄



  • Dann ruf im Resize Event noch folgendes auf:

    System::Void Form1::Form1_Resize(System::Object^ sender, System::EventArgs^ e)
    {
        this->OnResizeBegin(e->Empty);
        this->OnResizeEnd(e->Empty);
    }
    

    Dies löst nacheinander Form1_ResizeBegin und Form1_ResizeEnd aus, welche ja den Timer stoppen und starten.

    HTH Micha



  • Das funktioniert leider nicht 😞

    Der Code lässt sich zwar kompilieren, das Problem ist aber trotzdem noch da.
    Hab's auch zusätzlich mit sowas probiert, weil ich dachte, den Timer so auf jeden Fall erst einmal stoppen zu können:

    private: System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e) {
    			this->tTimer->Stop();
    			this->OnResizeEnd(e->Empty);
    		 }
    

    Liefert aber das gleiche Ergebnis 😞



  • Wie hoch bzw. niedrig ist den dein Timerinterval? Ich lass zwar nur nen Counter im Label hochzählen, sehe aber deutlich das der Timer angehalten und wieder gestartet wurde.



  • Da es nicht so einfach ist, genau im passenden Moment auf Maximieren zu klicken, hab ich den Timer in diesem Fall auf 1s gestellt.



  • Hmm, dann versuch doch die ArgumentException zu fangen im Resize Event.

    System::Void Form1::Form1_Resize(System::Object^ sender, System::EventArgs^ e)
    {
        try
        {
            this->OnResizeBegin(e->Empty);
        }
        catch (System::ArgumentException^ e)
        {
            //MessageBox::Show(e->Message); // oder auch e->StackTrace
        }
        finally
        {
            this->OnResizeEnd(e->Empty);
        }
    }
    

    Im try wird der Timerstop ausgelöst, im Falle eines Falles die ArgumentException gefangen(im catch) und im finally der Timer wieder gestartet.
    Mangels Absturz auf meiner Seite, kann ich jetzt nicht sagen ob es dir tatsächlich hilft.



  • Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in System.Drawing.dll aufgetreten.
    
    Zusätzliche Informationen: Ungültiger Parameter.
    

    Hatte aber Haltepunkte gesetzt und kann sagen, dass er sowohl try, catch, als auch finally durchlaufen hat. Gleich danach kam es dann zum Absturz.

    Vielleicht sollte ich die Maxi- und Minimieren-Schaltflächen einfach entfernen 😞

    Übrig bleibt wahrscheinlich das Problem, dass es zum Absturz kommt, wenn man ein weiteres Dialogfenster zum Zeitpunkt des Bildwechsels über meiner PictureBox bewegt. Dieses Problem kann ich aber zur Zeit auch nicht nachstellen, da es auf meinen PC nicht vorkommt; wohl aber auf dem Notebook meiner Freudnin und auf PCs von Bekannten, die es freundlicherweise für mich getestet haben.



  • Oh man, Problem gelöst 🤡

    Nach

    delete(this->pictureBox1->Image);
    

    musste einfach ein

    this->pictureBox1->Image = nullptr;
    

    eingefügt werden. Nun scheint's zu laufen 😮



  • 🤡

    My sorry war meine schuld hab vergessen das mit zuschreiben...

    🙄



  • Helfer schrieb:

    🤡

    My sorry war meine schuld hab vergessen das mit zuschreiben...

    🙄

    😃 Das macht Dich zwar sehr sympathisch, ist aber natürlich Unsinn. Ein Bisschen muss ich auch selber können 🤡 Bin Dir für das, was Du geschrieben hast, mehr als dankbar.


Anmelden zum Antworten