diverse Toolstripmenüpunkte reagieren nicht (mehr)

recreation

Grünschnabel
Aloa~
bin der neue, komm jetzt öfter :)
Eins vorne weg, ich bin völlig neu im Sharp-Bereich und hab nur etwas php und js erfahrung.

Also es geht um Folgendes:
Für den Einstieg hab ich mir was simples zum basteln rausgesucht, einen Image-Viewer via Windows Forms.
Derzeit häng ich am Context-Menü bei dem ein mir unverständlicher Fehler auftgetreten ist:
Ich hab erst funktionen zum drehen, spiegeln und Slideshow usw erstellt, was auch wunderbar geklappt hat.
Dann habe ich das Windows-Eigene "Eigenschaften"-Fenster und eine Full-Screen Funktion eingebaut...
...was auch geklappt hat.
Nun hab ich allerdings gestern festgestellt das auf einmal die vorher genannten Funktionen (drehen, spiegeln, etc) nicht mehr funktionieren.
Okay dachte ich, kann ja nur an den Eigenschaften oder der Fullscreen Funktion liegen und hab beide jeweils auskommentiert, ganz rausgenommen und diverse andere Dinge getestet.
Ergebniss: Keins.
Ich bekomme leider auch keinerlei Fehlereldung, kann also überhaupt nicht nachvolziehen woran es jetzt liegen könnte :(
Wäre klasse wenn mir jemand hier weiterhelfen könnte.

Hier der Teil der nicht mehr funktioniert:
Code:
        //rotate Image right 90°
        private void rechts90ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                Image img = pictureBox1.Image;
                img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                pictureBox1.Image = img;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        //rotate Image left 90°
        private void links90ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Image img = pictureBox1.Image;
            img.RotateFlip(RotateFlipType.Rotate270FlipNone);
            pictureBox1.Image = img;
        }
        //rotate Image 180°
        private void tool180StripMenuItem2_Click(object sender, EventArgs e)
        {
            Image img = pictureBox1.Image;
            img.RotateFlip(RotateFlipType.Rotate180FlipNone);
            pictureBox1.Image = img;
        }
        //mirror Image
        private void spiegelnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Image img = pictureBox1.Image;
            pictureBox1.Image.RotateFlip(RotateFlipType.RotateNoneFlipX);
            pictureBox1.Image = img;
        }

und hier der Teil der es (wahrscheinlich) irgendwie verursacht hat:
Code:
        /************Image Properties************/
        //[StructLayout(LayoutKind.Sequential)]
        public struct SHELLEXECUTEINFO
        {
            public int cbSize;
            public uint fMask;
            public IntPtr hwnd;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string lpVerb;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string lpFile;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string lpParameters;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string lpDirectory;
            public int nShow;
            public IntPtr hInstApp;
            public IntPtr lpIDList;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string lpClass;
            public IntPtr hkeyClass;
            public uint dwHotKey;
            public IntPtr hIcon;
            public IntPtr hProcess;
        }
        public static void ShowFileProperties(string getfile)
        {
            SHELLEXECUTEINFO info = new SHELLEXECUTEINFO();
            info.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(info);
            info.lpVerb = "properties";
            info.lpFile = getfile;
            info.nShow = SW_SHOW;
            info.fMask = SEE_MASK_INVOKEIDLIST;
            ShellExecuteEx(ref info);
        }
        private void eigenschaftenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            getfile = label1.Text.ToString();
            ShowFileProperties(getfile);
        }
        private void goFullstcreen()
        {
            if (Fullscreen == true)
            {
                this.WindowState = FormWindowState.Maximized;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
                Fullscreen = false;
            }
            else
            {
                this.WindowState = FormWindowState.Normal;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.Bounds = Screen.PrimaryScreen.Bounds;
                Fullscreen = true;
            }
        }

        private void delToolStripMenuItem_Click(object sender, EventArgs e)
        {
            getfile = label1.Text.ToString();
            if (System.IO.File.Exists(@getfile))
            {
                ++imagefile;
                //next Image
                if (imagefile >= folders.Length)
                    imagefile = 0;
                ShowCurrentImage(folders, imagefile);
                // Use a try block to catch IOExceptions, to
                // handle the case of the file already being
                // opened by another process.
                try
                {
                    System.IO.File.Delete(@getfile);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }

Ich häng mal den kompletten Code noch an, falls Jemand reinschauen möchte.

Greetz~icke
 

Anhänge

  • new.cs
    11,2 KB · Aufrufe: 9

Spyke

Premium-User
Mal Breakpoint bei den Menü Click Ereignissen gesetzt?
Vielleicht haste ja ausversehen die Ereignisse deabonniert.

Wüsste jetzt auch nicht warum das Eigenschaftenfenster das drehen "zerstören sollte/könnte".
Höchstens ev. weil das Eigenschaftenfenster dann das Bild sperrt, aber das kann ich mir erstmal nicht vorstellen.
 

recreation

Grünschnabel
Wie genau funktioniert das denn mit Breakpoints. Der ist bei mir direkt bei "Application.Run" stehengeblieben, was ja nicht so sein sollte oder? o_O
 

Spyke

Premium-User
Glaube Shortcut wäre F9, bin mir aber gerade nicht sicher.
Alternativ links am Rand des Quellcodefenster mit der Maus einen setzen.

Diesen innerhalb einer Methode setzen und beim ausführen des Programms, im VS, stoppt VS an besagter Stelle, wenn diese vom Programm angesprochen wird.

Du setzt also in besagten Click Methoden die Breakpoints startest das Programm und klickst auf deine Menüpunkte.
Hält nun VS an den Breakpoints an weißt du schonmal das die Ereignisse noch abonniert sind und dein Problem irgendwo anders liegt.
Hält VS nicht an sind wohl die Ereignisse nicht mehr abonniert und damit funktionieren deine Click MEthoden nicht mehr, in diesem Falle neu setzen.

P.S.: Im Designer der Form im Eigenschaftenfenster siehste natürlich auch ob die Ereignisse noch abonniert sind.
Aber spiel dennoch mit den Breakpoints rum so kannst du selbst schauen wie dein Code durchläuft.
Wenn VS bei einem Breakpoint hält kannst du dann zum Beispiel mit F10 oder F11 "weiter springen", die Anweisungen einzelnen ausführen lassen.
 

recreation

Grünschnabel
Okay thx schonmal.
Ich hab jetzt alles mit Breakpoints durchgetestet und es ist genau am besagten Code stehen geblieben.
Woran genau erkenn ich denn ob die Ereignisse noch Aboniert sind? Für mich sieht in den Eigenschaften alles so aus wie es (mMn) sein sollte.
Ich bin übrigens der Meinung irgendwas von "unsave Method" gelesen zu haben?!


Edit: Habs rausgefunden, waren wirklich nicht (mehr) registriert.
Aber wie kommt sowas eigentlich zustande? Grade in der .designer.cs hab ich nichts geändert o_O
 
Zuletzt bearbeitet:

Spyke

Premium-User
Unachtsamkeit, oder machmal spinnt auch der designer.

Zum Beispiel einfaches kopieren von Componenten, da werden die Ereignisse nicht immer mit kopiert (muss man bissel was beachten).

Aber in der Regel ist es eher unachtsamkeit ;)