开发者

How to stop a new window to be opened every time?

开发者 https://www.devze.com 2023-03-02 17:25 出处:网络
I have a WPF application in which on a click of a menu item a window is opened. If the same menu item is clicked again when the window is already open, it is opening a new window but I don\'t want a n

I have a WPF application in which on a click of a menu item a window is opened. If the same menu item is clicked again when the window is already open, it is opening a new window but I don't want a new window to be opened every time.

What I 开发者_StackOverflow中文版need is, if the window is already open, the same window should be focused not a new window.


//First we must create a object of type the new window we want the open.
NewWindowClass newWindow;

private void OpenNewWindow() {
    //Check if the window wasn't created yet
    if (newWindow == null)
    {
        //Instantiate the object and call the Open() method 
        newWindow= new NewWindowClass();
        newWindow.Show();
        //Add a event handler to set null our window object when it will be closed
        newWindow.Closed += new EventHandler(newWindow_Closed);
    }
    //If the window was created and your window isn't active
    //we call the method Activate to call the specific window to front
    else if (newWindow != null && !newWindow.IsActive)
    {
        newWindow.Activate();
    }
}
void newWindow_Closed(object sender, EventArgs e)
{
    newWindow = null;
}

I think this solve your problem.

Att,


If your opened windows is used as simple dialog box you can use following code

window.ShowDialog();

when the dialog will show you cannot press any menu items unit you close this window


A rather brute force approach like this also works:

        bool winTest = false;

        foreach (Window w in Application.Current.Windows)
        {
            if (w is testWindow)
            {
                winTest = true;
                w.Activate();
            }
        }

        if (!winTest)
        {
            testWindow tw = new testWindow();
            tw.Show();
        }


You can create a field and check if it's set:

private Window _dialogue = null;
private void MaekWindowButton_Click(object sender, RoutedEventArgs e)
{
    if (_dialogue == null)
    {
        Dialogue diag = new Dialogue();
        _dialogue = diag;

        diag.Closed += (s,_) => _dialogue = null; //Resets the field on close.
        diag.Show();
    }
    else
    {
        _dialogue.Activate(); //Focuses window if it exists.
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消