Как программно свернуть форму? Не WindowState

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Как программно свернуть форму? Не WindowState

Сообщение viter.alex » 29.10.2009 (Чт) 13:41

С помощью WndProc я отлавливаю сворачивание формы и показываю иконку в трее.
Код: Выделить всё
  Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    Select Case m.Msg
      Case WM_ACTIVATE And m.WParam = &H200000 And My.Settings.MinToTray
        Me.Hide()
        DisplayIcon()
    End Select
    MyBase.WndProc(m)
  End Sub

Если кликнуть на кнопке сворачивания формы, то все работает.
А как ее свернуть при старте программы?
Понимаю, что можно просто скрыть форму и показать иконку, но это не совсем то. Ведь я уже ловлю сворачивание в одном месте, зачем его писать еще в одном? Установка WindowState в значение FormWindowState.Minimized не подходит, т.к. при этом не генерируется событие сворачивания формы
Лучше день потерять — потом за пять минут долететь!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как программно свернуть форму? Не WindowState

Сообщение FireFenix » 29.10.2009 (Чт) 14:00

Код: Выделить всё
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.WindowState = FormWindowState.Minimized
    End Sub

И правильнее вроде проверку заводить на событие Resize, типа
Код: Выделить всё
    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Select Case Me.WindowState
            Case FormWindowState.Normal
                MsgBox("Мну вернули!")
            Case FormWindowState.Maximized
                MsgBox("Мну развернули!")
            Case FormWindowState.Minimized
                MsgBox("Мну свернули!")
        End Select
    End Sub
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как программно свернуть форму? Не WindowState

Сообщение Денис » 29.10.2009 (Чт) 14:50

Просто делай иконку при старте, а форму и не показывай вовсе.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Как программно свернуть форму? Не WindowState

Сообщение viter.alex » 29.10.2009 (Чт) 14:54

Ага, так это Resize! Пробовал писать в загрузку формы Me.Hide, но ведь форма еще не показана! Поэтому не срабатывает. Записал в Paint:
Код: Выделить всё
  Private Sub frmMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    If My.Settings.MinToTrayAtStart Then Me.WindowState = FormWindowState.Minimized
  End Sub

Работает, но форма на мгновение появляется
Денис писал(а):Просто делай иконку при старте, а форму и не показывай вовсе.

Т.е. ставить Visible = False?
Лучше день потерять — потом за пять минут долететь!

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Как программно свернуть форму? Не WindowState

Сообщение viter.alex » 29.10.2009 (Чт) 15:03

И при реакции на Paint у меня форма сворачивается в трей всегда, а не только при старте. Даже когда я ее вызываю из контекстного меню иконки в трее.

И еще проблема. Когда я показываю форму из контекстного меню, то она почему-то остается свернутой на панели задач
Лучше день потерять — потом за пять минут долететь!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как программно свернуть форму? Не WindowState

Сообщение FireFenix » 29.10.2009 (Чт) 22:01

viter.alex писал(а):И еще проблема. Когда я показываю форму из контекстного меню, то она почему-то остается свернутой на панели задач

эм....
Код: Выделить всё
Me.WindowState = FormWindowState.Normal
Me.Show()

?

Код: Выделить всё
И при реакции на Paint у меня форма сворачивается в трей всегда

ну блин... Paint вызывается при отрисовки формы, где единичный случай - изменение размера. Естественно если что-то заставляет перерисовывать, то всегда будет обработка этого события => лучше поместить в Resize
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Как программно свернуть форму? Не WindowState

Сообщение viter.alex » 29.10.2009 (Чт) 22:39

FireFenix писал(а):
Код: Выделить всё
Me.WindowState = FormWindowState.Normal
Me.Show()

?

Наоборот!
Код: Выделить всё
  Me.Show()
  Me.WindowState = FormWindowState.Normal
Лучше день потерять — потом за пять минут долететь!

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Как программно свернуть форму? Не WindowState

Сообщение 1Steps » 30.10.2009 (Пт) 0:55

Код: Выделить всё
    Private m_startInVisible As Boolean = True
    Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
        If m_startInVisible Then
            MyBase.SetVisibleCore(False)
            m_startInVisible = False
        Else
            MyBase.SetVisibleCore(value)
        End If
    End Sub

При старте невидима. А иконка уже в трэйе. :D
Удалена за ненадобностью.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Как программно свернуть форму? Не WindowState

Сообщение viter.alex » 30.10.2009 (Пт) 13:36

1Steps, то, что надо!
Лучше день потерять — потом за пять минут долететь!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList