Laden...

Andere Form nur ausführen, wenn diese nicht schon aktiv ist -> dann Fokus auf diese

Erstellt von DaNeubi vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.580 Views
DaNeubi Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren
Andere Form nur ausführen, wenn diese nicht schon aktiv ist -> dann Fokus auf diese

Hallo Leute,

ich hab ne kurze Frage und weiß jetzt nicht ganz genau ob es dieses Thema schon gibt, bzw. wie ich das ganze in ne passende Überschrift packen soll.

Folgendes:
Ich möchte per Button klick auf meinem "MainWindow" das "SettingsWindow" aufrufen.
Jedoch, wenn man schonmal auf den Button geklickt hat, soll sich das Fenster nicht unendlich oft öffnen lassen, sondern der Fokus auf dieses Fenster gehen.

Ich habs mit ner If Abfrage probiert, jedoch ohne Erfolg.

            settings_window settings_window = new settings_window();

            if (!settings_window.IsVisible)
            {
                settings_window.Show();
            }
            else
            {
                settings_window.Focus();
            }

Mir würde auch schon ein Link zum Themenbereich helfen.

Danke im vorraus

DaNeubi

Wenn du Rechtschreibfehler findest, darfst du die gerne behalten 😉

87 Beiträge seit 2016
vor 7 Jahren

Hallo,

mit deinem Code erzeugst du jedes mal ein neues Window.

Also prüfen ob schon erzeugt und nur wenn noch nicht, das Window neu erzeugen.

glandorf

DaNeubi Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

und wie kann ich dass an besten überprüfen?
Mit IsVisible, IsFocusable, IsActive, IsEnabled, IsHittestVisible und Is Initialized geht das anscheinend nicht.

Wenn du Rechtschreibfehler findest, darfst du die gerne behalten 😉

M
33 Beiträge seit 2012
vor 7 Jahren

Hallo DaNeubi,

eine Settings Window würde ich immer mit
"settings_window.ShowDialog();" anzeigen,
der rest der Anwendung ist dann nicht mehr zugänglich
solange der Dialog "Settings Window" geöffnet ist.

Somit kann nicht mehr wie ein Settings Window geöffnet werden.

IMO die saubere Variante 😃

Falls fallend du vom Dach verschwandest, brems bevor du Unten landest.

3.003 Beiträge seit 2006
vor 7 Jahren

Du möchtest über die Lebenszeit deines Hauptfensters nur eine Instanz des Einstellungsfensters haben. Instanzvariable also, oder besser noch eine Property.



public class MainWindow : Window
{
    private SettingsWindow SettingsWindow { get; } = new SettingsWindow();


//...
    private void OnClickDingens(object sender, EventArgs e)
    {
        if(!SettingsWindow.IsVisible) SettingsWindow.Show();
        else SettingsWindow.Focus();
    }
}

Edit: @MrWasabi: ShowDialog ist besser, ja, löst aber sein Problem nicht, dass das Fenster jedes mal neu erstellt wird.

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

DaNeubi Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Du möchtest über die Lebenszeit deines Hauptfensters nur eine Instanz des Einstellungsfensters haben. Instanzvariable also, oder besser noch eine Property.

Danke. Funktioniert 😃

Wenn du Rechtschreibfehler findest, darfst du die gerne behalten 😉