MDI ChildForm Problem...

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich lade in meinem MDI Programm in den Child-Forms Bilder in eine PictureBox. Beim öffnen eines Bildes wird es auch entsprechend richtig geladen. Das Child-Form soll nun Maximiert dargestellt werden, aber es hat nur eine Größe von 100 * 100 (was ich als Standard eingestellt habe). Wie bekomme ich es hin, dass es auch richtig über die komplette Größe angezeigt wird? Zusätzlich soll sich das Bild immer Mittig und nicht Links positionen im Child-Form. Wie kann ich das realisieren?


Gruß Radhad
 
Ich verstehe dein Problem leider nicht genau -.-

Was soll sich mitändern wenn das ChildForm maximiert wird?
Das Bild? Die Picture Box?

Verwendest du einen Anchor?
Damit kannst du Abhängigkeiten zum Rand der Form setzen,
sodass bei einer Vergrößerung z.B. die PictureBox mitgezogen wird...

Ansonsten fällt mir einfach BackGroundImageLayout ein... damit kannst du das Bild der Größe seiner Umgebung anpassen

Oder zeichnest du das Bild innerhalb der Picture Box selber
mit DrawUnscalled (and Clipped) kannst du auch die Gößenabhängigkeit steuern
^^

Hoffe, das hat dir irgendwie weitergeholfen

mfG
Leitman
 
Schau dir mal das Bild im Anhang an. Die geöffnete Grafik wird nicht maximiert dargestellt. Die PictureBox richtet sich an der Form aus. Wenn das Hauoptfenster neu gezeichnet wird, ist die Grafik auch richtig maximiert...

Prinzipeill versuche ich teilweise das Tool XnView nachzubauen, da mir die GUI gut gefällt - allerdings wird das Programm viel kleiner...

Kann ich denn ein Bild später in einer PictureBox irgendwie einen Rahmen ziehen und zuschneiden?
 

Anhänge

  • Icon statt Maximized.jpg
    Icon statt Maximized.jpg
    21,1 KB · Aufrufe: 89
Als was setzt du denn das Image?

Als BackgroundImage?
Dann kannst du auch als Property der PictureBox "BackgroundImageLayout" auf "Strech" setzten.
Dadurch wird das Bild immer der Größe der PictureBox angepasst, auch wenn die Größe geändert wird...

Um selber die Größe des Bildes per Maus zu ändern oder es zuzuschneiden, musst du mit MouseClick Events arbeiten, denke ich....
Das du eben die Actionen selber handlest
 
Das mit dem BackgroundImage hat nicht geklappt, da das Child-Form nur als 100*100 geöffnet wird und nicht wirklich maximiert angezeigt wird.

Ich hab das Child-Form mal größer gesetzt, dann sieht man das Problem besser. Siehe Anhang.

Zusätzlich kann ich das Child-Form mit der Maus nicht größer ziehen :( obwohl es auf "Sizable" steht.
 

Anhänge

  • Icon statt Maximized.jpg
    Icon statt Maximized.jpg
    40,7 KB · Aufrufe: 55
Hy Radhad!

Hier eine Lösung für dein Problem.
Ich habe ein TreeView genommen und in die Auflistung drei Knoten genommen.
"Doc 1"
"Doc 2"
"Doc 3"

Für jeden Knoten habe ich eine Form erstellt und eine PictureBox genommen und die Dock-Eigenschaft auf "FILL" gesetzt.
Wenn "Doc 1" gewählt wurde wird dir frmDoc1 aufgerufen und beim Auswahl von "Doc 2" wird der frmDoc2 aufgerufen usw.

Wählt man jetzt bsp. "Doc 2" wird ein OpenFileDialog geöffnet um eine Bilddatei zu öffnen.
Diese Datei wird als Hintergrundbild verwendet.

Dazu muss die frmDoc2 außer die frmDoc2_Load Methode auch die frmDoc2_Resize Methode haben.

Folgende Vars sind Global deklariert
Code:
Dim file As String
Dim btm As Bitmap
Dim img As Image
Kommen wir zum frmDoc2_Load. Hier laden wir die Datei, geben es einem Image objekt.
Diese, einem neuen Bitmap mit der Breite und Höhe vom PictureBox angeben.
Das Bitmapobjekt dann als Hintergrundbild verwenden
Code:
Dim ofd As New OpenFileDialog
ofd.ShowDialog()
file = ofd.FileName
img = Image.FromFile(file)
btm = New Bitmap(img, ptbImages.Width, ptbImages.Height)
ptbImages.BackgroundImage = btm
jetzt die frmDoc2_Resize Methode. Da diese Methode auch aufgerufen wird, auch wenn die frmDoc2 noch nicht geöffnet wurde muss eine Überprüfung stattfinden ob das Bildobjekt Nothing ist. Wenn nicht, einfach ein neues Bitmap mit der neuen Breite und Höhe von der PictureBox.
Code:
If Not btm Is Nothing Then
    btm = New Bitmap(img, ptbImages.Width, ptbImages.Height)
    ptbImages.BackgroundImage = btm
End If

Es ist egal in welcher größe das Bild geöffnet wird. Wichtig ist die "_Resize" Methode.

Ich hoffe das hilf dir.


ksk
 
Den oberen teil hab ich C# übernehmen können bei Form2_Load, aber wie bau ich das Resize ein? hat jemand dafür ein kleines Snippet, wo ich mir das mal anschauen kann? Wäre echt hilfreich!
 
Form2_Resize ist ein Event...
Das kannst du in C# ganz einfach über den Designer implementieren lasssen

Einfach bei der zu öffnenden Form in den Properties auf den Blitz drücken um die Events anzuzeigen und dann Doppelklick auf OnResize (oder so ähnlich)

Dann bekommst du eine Methode in deinem File, in der du nur noch eintragen musst, was ausgeführt werden soll ^^
 
Als Nicht-Kenner der IDE und als Anfänger fällt mir dazu nur folgendes ein: Häh? :)

[EDIT]
OK, gefunden - aber ich es funktioniert nicht - es wird immer noch nicht maxiomiert und Größe ändern geht auch nicht. Ich hab noch die Events "ResizeBegin" und "ResizeEnd" gefunden, sollte ich die nehmen anstatt "SizeChanged" ?

Hier mal der Quellcode:
Code:
private void Form2_Load(object sender, EventArgs e)
        {
            int x = 0;
            int y = 0;

            img = Image.FromFile(PictureFile);
            MyImage = new Bitmap(img, pictureBox1.Width, pictureBox1.Height);
            //pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
            pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;
            pictureBox1.BackgroundImage = MyImage;
        }

        private void Form2_SizeChanged(object sender, EventArgs e)
        {
            if (img != null)
            {
                MyImage = new Bitmap(img, pictureBox1.Width, pictureBox1.Height);
                pictureBox1.BackgroundImage = MyImage;
            }
        }
 
Zuletzt bearbeitet:
**seufz**

Weiß nicht genau, wie es in C# geht, aber managed C++ Code:
C++:
// z.B. der PictureBoX das Event abonnieren lassen:
this->pictureBox1->Resize += gcnew System::EventHandler(this, &Form1::pictureBox1_Resize);

// Resize Methode:
private: System::Void pictureBox1_Resize(System::Object^  sender, System::EventArgs^  e) {
    MessageBox::Show("Picture Box Resized!");
}

Wenn du eh mir C# arbeitest, kannst du sich auf den Designer zugreifen?
Also dort, wo du deine Form und Buttons und halt alles, was du verwendest sortieren, Farbe ändern, was sonst noch alles kannst....
Wenn du dort ein Control anklickst, hast du irgendwo im Designer so eine "property" Liste, in der du die Eigenschaften des angewählten Controls einstellen kannst...

Wenn du dort (oben auf der Sortierung) anstatt der Properties die Events anzeigen lässt (BlitzSymbol) kannst du die Events triggern ^^

Hoffe das sagt dir zumindest soviel, um die MSDN zu durchforsten,

mfG
Michael Leithner
 
Zurück