shogitai
shogitai

Reputation: 1951

Cannot show MainWindow after minimization

I try to avoid the XY Problem by saying immediately what I want and then what I get. 😛

So, first of all, I minimize my MainWindow and thoroguh its NotifyIcon ContextMenu I want that my MainWindow reappears.

The problem: the MainWindow doesn't appear/show as Window, but it appears as Icon in the toolbar (see figure 2).

The code:

This is the TrayIcon initializer:

    private void InitializeTrayIcon()
    {
        KyactusTrayIcon = new NotifyIcon();
        KyactusTrayIcon.Icon = AppIcon;
        KyactusTrayIcon.Visible = true;
        KyactusTrayIcon.ContextMenu = new ContextMenu(new []
        {
            new MenuItem("Chiudi", ExitApplication),
            new MenuItem("Mostra", ShowMainWindow), 
        });

        ShowNotification(@"Ciao " + Globals.CurrentUser.Name + @"!", @"Benvenuto su Kyactus");

    }

This is the delegate responsible to show the minimized MainWindow (not working at all):

    private void ShowMainWindow(object sender, EventArgs e)
    {
        WindowState = WindowState.Normal;
        Topmost = true;
        Show();
        Activate();
    }

This is what happens when the MainWindow is minimized by clicking the [-] button (ie the Hide() method):

    private void MainWindow_OnStateChanged(object sender, EventArgs e)
    {

        switch (this.WindowState)
        {
            case WindowState.Maximized:
                ShowNotification("Bleah!", "Questo è proprio brutto! :(");
                break;
            case WindowState.Minimized:
                Hide();
                ShowNotification("Avviso", "L'applicazione è ora minimizzata qui");
                break;
            case WindowState.Normal:

                break;
        }
    }

Step one. The method MainWindow_OnStateChanged will be invoked when click on [-]:

enter image description here

Step two. The window disappears (ok) and the Tray icon appears (ok). Then I click on 'Mostra' (translated as 'Show') and the ShowMainWindow delegate will be invoked

enter image description here

Step three. This is the final step, that is, what I do not expect. The MainWindos 'lives' as an Icon in the toolbar. But I can't see it as a Window.

enter image description here

Please note that I have not this problem when I close the window by clicking [X] instead of [-]. So, my suspect is the MainWindow's Window.State. I tried to restore it implementing the WindowState.Normal into the ShowMainWindow, but nothing.


Update: if is use WindowState.Maximized in the ShowMainWindow method, I can see the window again, but it is maximized and this is bad and ugly.

Upvotes: 0

Views: 100

Answers (2)

Aousaf Rashid
Aousaf Rashid

Reputation: 5738

Simply,create some class-level integer variables and store the height,width and positioning values there.Then use them to get back the size of your window :

 int height;
 int width;
 double left;
 double top;
  private void MainWindow_SizeChanged
{
  height = this.Height;
  width = this.Widthl
  left = this.Left;
  top = this.Top;
}

private void ShowMainWindow(object sender, EventArgs e)
{
 this.Height = height;
 this.Width = width;
 this.Left = left;
 this.Top = top;
}

Upvotes: 1

ZiggZagg
ZiggZagg

Reputation: 1427

Just change the order of operation when showing the window

private void ShowMainWindow(object sender, EventArgs e)
{
    Show();
    WindowState = WindowState.Normal;
    Topmost = true;
    Activate();
}

Upvotes: 1

Related Questions