Сохранение положения окна

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

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

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

Сохранение положения окна

Сообщение viter.alex » 02.11.2009 (Пн) 13:29

Связал положение формы с ApplicationSettings. Всё работает, до тех пор, пока я форму не свернул. Дело в том, что при сворачивании я форму прячу, а показываю иконку в трее. Так вот, при сворачивании Location формы переносится в точку {X=-32000,Y=-32000}, запоминается в ApplicationSettings и больше не восстанавливается. Если сворачивать окно на панель задач, то все работает правильно.
Можно ли это решить без введения дополнительной переменной?
Лучше день потерять — потом за пять минут долететь!

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

Re: Сохранение положения окна

Сообщение viter.alex » 02.11.2009 (Пн) 13:44

Уточню: это происходит, когда я закрываю форму из контекстного меню иконки в трее. Там стоит просто: Me.Close(), а поскольку координаты окна в это время {X=-32000,Y=-32000}, то они и запоминаются
Лучше день потерять — потом за пять минут долететь!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сохранение положения окна

Сообщение MIT » 02.11.2009 (Пн) 13:51

В запоминалку добавь условие, что бы не запоминала эту координату. Ну или состояние формы проверяй.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

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

Re: Сохранение положения окна

Сообщение viter.alex » 02.11.2009 (Пн) 15:20

Да, действительно, как это я сам не допер. В Settings.Designer.vb нужно дописать
Код: Выделить всё
      Set(ByVal value As Global.System.Drawing.Point)
        If value <> New Global.System.Drawing.Point(-32000, -32000) Then Me("frmMainLocation") = value
      End Set
Лучше день потерять — потом за пять минут долететь!

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сохранение положения окна

Сообщение Joo » 03.11.2009 (Вт) 8:19

А нельзя запоминать в событии формы ResizeEnd? Это событие не реагирует на свертывание и развертывание!
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

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

Re: Сохранение положения окна

Сообщение viter.alex » 03.11.2009 (Вт) 10:37

Joo, я же не сам пишу код для запоминания. Я просто связал свойство формы Location с настройками приложения. И теперь каждый раз, когда это свойство меняется, оно запоминается в настройках.
Лучше день потерять — потом за пять минут долететь!

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сохранение положения окна

Сообщение Joo » 03.11.2009 (Вт) 12:05

viter.alex писал(а):Joo, я же не сам пишу код для запоминания. Я просто связал свойство формы Location с настройками приложения. И теперь каждый раз, когда это свойство меняется, оно запоминается в настройках.


Я просто не понял. Ну ладно.
К стати, как раз эту багу описывали по моему на RSDN
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

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

Re: Сохранение положения окна

Сообщение viter.alex » 03.11.2009 (Вт) 15:47

Переделал на такое выражение, а то мало ли какие там могут быть координаты:
Код: Выделить всё
      Set(ByVal value As Global.System.Drawing.Point)
        If frmMain.WindowState <> FormWindowState.Minimized Then
          Me("frmMainLocation") = value
        End If
      End Set
Лучше день потерять — потом за пять минут долететь!


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

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

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

    TopList