Forms unter Vista dynamisch austauschen

19/09/2007 - 13:42 von Patrick Bär | Report spam
Hallo,

meine Anwendung tauscht teile der GUI dynamisch aus.
Die austauschabren Einheiten sind Forms.
Die Anwendung ist mit dem Framework 2.0 lauffàhig.
Unter Vista stellt sich nun das Phànomen ein, dass der Austausch der Forms
nicht mehr funktioniert. Die zum Start des Programms sichtbare Form ist zu
sehen, der Wechsel auf eine andere Form per Code misslingt.

Hier die Methoden zum Ein- und Ausblenden:

internal void ShowSubDialog(object visualPresentation)
{
Form childForm = (Form) visualPresentation;

childForm.Anchor = AnchorStyles.Bottom | AnchorStyles.Top |
AnchorStyles.Left | AnchorStyles.Right;
childForm.AutoScaleMode = AutoScaleMode.Font;
childForm.AutoScroll = true;
childForm.Dock = DockStyle.Fill;
childForm.FormBorderStyle = FormBorderStyle.None;
childForm.TopLevel = false;
childForm.Parent = _form._dialogPanel;
childForm.BringToFront();

childForm.Show();
}

internal void HideSubDialog()
{
Form childForm = (Form) _form._dialogPanel.Controls[0];
childForm.Hide();
}

Für Ideen, wie dieser C# Code auch unter Vista korrekt funktioniert wàre ich
sehr dankbar.

Viele Grüße
Patrick Bàr
 

Lesen sie die antworten

#1 Harald M. Genauck
19/09/2007 - 14:41 | Warnen spam
Hallo Patrick,

meine Anwendung tauscht teile der GUI dynamisch aus.
Die austauschabren Einheiten sind Forms.
Die Anwendung ist mit dem Framework 2.0 lauffàhig.
Unter Vista stellt sich nun das Phànomen ein, dass der Austausch der
Forms
nicht mehr funktioniert. Die zum Start des Programms sichtbare Form
ist zu
sehen, der Wechsel auf eine andere Form per Code misslingt.

Hier die Methoden zum Ein- und Ausblenden:

internal void ShowSubDialog(object visualPresentation)
{
Form childForm = (Form) visualPresentation;

childForm.Anchor = AnchorStyles.Bottom | AnchorStyles.Top |
AnchorStyles.Left | AnchorStyles.Right;
childForm.AutoScaleMode = AutoScaleMode.Font;
childForm.AutoScroll = true;
childForm.Dock = DockStyle.Fill;
childForm.FormBorderStyle = FormBorderStyle.None;
childForm.TopLevel = false;
childForm.Parent = _form._dialogPanel;
childForm.BringToFront();

childForm.Show();
}

internal void HideSubDialog()
{
Form childForm = (Form) _form._dialogPanel.Controls[0];
childForm.Hide();
}

Für Ideen, wie dieser C# Code auch unter Vista korrekt funktioniert
wàre ich
sehr dankbar.



Wenn ich das richtig verstehe, fügst Du Forms als GUI-Elemente in ein
anderes Form ein? Dazu sind Forms aber eigentlich nicht gedacht.

Für diesen Zweck gibt es UserControls. Diese funktionieren im Prinzip
wie Forms, nur mit dem Unterschied, dass sie eben nicht eigenstàndig
angezeigt werden, sondern wie andere (komplexe) Controls in einem
anderen Form. Und mit UserControls funktioniert das Austauschen auch
unter Vista problemlos.


Viele Grüße

Harald M. Genauck

ABOUT Visual Basic http://www.aboutvb.de (Herausgeber)
"visual studio one" - http://www.visualstudio1.de (Chefredakteur)

Ähnliche fragen