Announcement

Collapse
No announcement yet.

VS2005, C#, WindowsForms, MDI, Icon auf MDI-Child

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VS2005, C#, WindowsForms, MDI, Icon auf MDI-Child

    Bilder siehe: http://www.strike-soft.info/fuer_etwicklerforum/MDI_Icon_VS2005.pdf

    <b>Ausgangssituation:</b>
    MDI-Anwendung mit einem MDI-Parent und einem MDI-Child.
    Beide haben jeweils einen MenuStrip und einen ToolStrip.
    Beide haben jeweils ein Icon (32x32 Pixel).
    Wenn das MDI-Child angezeigt wird, soll es maximiert dargestellt werden. Der Aufruf sieht dann sinngemäß so aus:
    ... mdiChild.mdiParent = this; mdiChild.windowstate = ...maximized;
    mdiChild.show();

    Das/die Problem(e):

    <b>Szenario 1:</b>
    Anwendung starten, MDI-Child öffnen:
    Problem 1.1: Für das MDI-Child wird nur das VS Standard-Icon angezeigt, jedoch nicht das in der IDE spezifizierte.
    Siehe Bild 1

    Wird nun die Größe des MDI-Parent zur Laufzeit verändert (größer oder kleiner ist egal) wird das richtige Icon angezeigt, allerdings viel zu groß, wodurch die Menüleiste 'Aufgeblasen' wird.
    Siehe Bild 2

    <b>Szenario 2:</b>
    Wenn man die Menüleiste daran hindert sich 'aufzublasen' (menustrip.maximumsize.height = 24) und so vorgeht wie in Szenario 2 wird das Icon noch immer zu groß dargestellt, nun aber eben abgeschnitten.
    Siehe Bild 3

    <b>Szenario 3:</b>
    Selbst wenn man aufgibt und auf das Icon auf dem MDI-Child verzichten will (mdiChild.showIcon = false) wird man enttäuscht:
    Es wird trotzdem das Standard-Icon angezeigt, nicht mal beim Ändern der Größe des Hauptfensters (mit der Maus) verschwindet das Icon. Erst wenn man das MDI-Child in einen anderen Zustand als Maximized versetzt.

    Bei Thema 'maximized' kommt man zum nächsten Problem:
    Das MDI-Child ist nur dann wirklich 'maximized', wenn man es im Code auf 'maximized' setzt.
    Setzt man die Eigenschaft WindowState in der IDE auf maximized, wird das MDI-Child nach dem Öffnen in der in der IDE festgelegten Größe dargestellt (wenn diese nicht zufällig größer ist, als der Client-Bereich im Parent. Erst wenn man das enthaltente Parent-Fenster zur Laufzeit mit der Maus vergrößert/verkleinert, passt sich das MDI-Child an.

    Als bekennender Überläufer von Delphi (7) nach Visual Studio 2005 muss ich sagen, dass man sich über SOWAS unter Delphi keine Gedanken machen musste.
    Die Icons werden da (wie man das gewohnt ist) automatisch so verkleinert, daß sie in die Titelleiste des Fensters passen.

  • #2
    Hallo,
    die Darstellung des Icon ist korrekt, wenn die Standardgröße <b>16x16</b> verwendet wird

    Comment


    • #3
      Danke, stimmt, aber mit 16x16 ist es ja kein Kunststück ;-)
      Wie gesagt, Delphi 7 konnte das, aber VS2005 ist ja noch jung. ;-)

      An den anderen seltsamen Verhaltensweisen ändert das aber nichts.
      Ich muß zur Laufzeit erst mal durch Ziehen mit der Maus die Größe des MDI-Parent verändern, damit das richtige Icon angezeigt wird

      Comment


      • #4
        Das Verhalten kann man umgehen, wenn man das MDI-Child wie folgt aufruft:

        Aufruf aus dem MDI-Parent:
        frm_MDI_Child = new FMDI_Child();
        frm_MDI_Child.MdiParent = this;
        frm_MDI_Child.Show();
        //Wichtig: Maximize erst NACH dem Show, sonst wird das Icon nicht richtig angezeigt
        frm_MDI_Child.WindowState = FormWindowState.Maximized

        Comment

        Working...
        X