Страница: 1 | 2 | 3 |
Вопрос: Как сохранить изменение размеров формы? (-)
Добавлено: 21.06.06 16:01
Автор вопроса: Sergey
Ответы
Всего ответов: 43
Номер ответа: 16
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #16
Добавлено: 23.06.06 14:13
offtop: сериализация - пока моё слабое место в VB[dot]NET. В vb6 ничего подобного не было, вот терь с чем-то мучаюсь))
Номер ответа: 17
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #17
Добавлено: 23.06.06 16:04
Sacred Phoenix
уверяю тебя.. сериализация не сложнее пареной репы.. и что особенно радует это очень мощный инструмент.. я теперь без него как без рук..
так что не поленись, обязательно разберись с этой фишкой..
Номер ответа: 18
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #18
Добавлено: 23.06.06 19:27
Припмер с реестром:
Private sub F_Load(byval sender as object,byval e as EventArgs) Handles MyBase.Load
const RPath as string = "SOFTWARE\\MyAppSettings"
Dim RK As Microsoft.Win32.RegistryKey
Dim RG As Microsoft.Win32.Registry
RK = RG.LocalMachine.OpenSubKey(RPath, True)
Me.Width = RK.GetValue("MainWin_Width"
Me.Height = RK.GetValue("MainWin_Height"
Me.Left = RK.GetValue("MainWin_Left"
Me.Top = RK.GetValue("MainWin_Top"
End Sub
Private sub F_Closing(byval sender as object,byval e as System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
const RPath as string = "SOFTWARE\\MyAppSettings"
Dim RK As Microsoft.Win32.RegistryKey
Dim RG As Microsoft.Win32.Registry
RK = RG.LocalMachine.CreateSubKey(RPath, True)
RK.SetValue("MainWin_Width", Me.Width)
RK.SetValue("MainWin_Height", Me.Height)
RK.SetValue("MainWin_Left", Me.Left)
RK.SetValue("MainWin_Top", Me.Top)
End Sub
Номер ответа: 19
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #19
Добавлено: 23.06.06 19:28
RK = RG.LocalMachine.CreateSubKey(RPath, True)
>>
RK = RG.LocalMachine.CreateSubKey(RPath)
' Ошибочка, тут же нет второго параметра...
Номер ответа: 20
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #20
Добавлено: 23.06.06 20:04
а кто знает, куды сохраняются настройки, которые из My.Settings?
Номер ответа: 21
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #21
Добавлено: 23.06.06 20:10
в одну из скрытых папок в Data Application..
запусти поиск по системному диску.. ищи файл user.config
это как раз то, что ты ищешь...
Номер ответа: 22
Автор ответа:
Алексей
ICQ: 207504159
Вопросов: 1
Ответов: 14
Web-сайт:
Профиль | | #22
Добавлено: 23.06.06 20:28
Блин! Вот читаю - такие сложности люди придумывают! Хотя уже выдуман способ проще:
Private Sub Form_Load()
Dim A As Integer
A = GetSetting(App.ProductName, "1", "LEFT"
If A <> 0 Then Me.Left = A
A = GetSetting(App.ProductName, "1", "TOP"
If A <> 0 Then Me.Top = A
End Sub
Private Sub Form_Resize()
If Me.WindowState = 0 Then
SaveSetting App.ProductName, "1", "LEFT", Me.Left
SaveSetting App.ProductName, "1", "TOP", Me.Top
End If
End Sub
Номер ответа: 23
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #23
Добавлено: 23.06.06 21:30
Алексей,
Методы SaveSetting и GetSetting - это атавизмы VB6 и оставлены лишь для облегчения перехода на .NET.
Во всех справочных материалах Microsoft настоятельно рекомендует НЕ использовать подобные функциии, поскольку нет никакой гарантии, что их поддержка будет продолжена в следующих версиях FW...
Так что если уж писать настройки в реестр, то способ K&M в данном случае более приемлем(имхо)...
Хотя и он нуждается в доработке.. как минимум:
- возврат дефолтовых значений в случае отсутствия ключа при первой загрузе
- обработка ошибок доступа к реестру
Но это уже на совести разработчика..
Номер ответа: 24
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #24
Добавлено: 23.06.06 21:32
Ненавижу GetSetting и SaveSetting! Пишут всё в HKCU\Software\VB and VBA Program Settings! Если уж и писать в реестр, то по-человечески, через API Reg*.
Номер ответа: 25
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #25
Добавлено: 23.06.06 21:44
Тут я с тобой не соглашусь... ибо целесообразнее использовать встроенный класс(см. пример K&M)
Зачем использовать неуправляемый код, когда есть возможность все сделать по людски?
Номер ответа: 26
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #26
Добавлено: 23.06.06 21:50
Хотя и он нуждается в доработке.. как минимум:
- возврат дефолтовых значений в случае отсутствия ключа при первой загрузе
- обработка ошибок доступа к реестру
Но это уже на совести разработчика..
Помилуйте! Я бы написал, но у меня рука сломана! Одной пишу, так пусть начинающие найдут ошибки и исправят - полезней будет.
Номер ответа: 27
Автор ответа:
K&M
ICQ: 225442067
Вопросов: 20
Ответов: 170
Профиль | | #27
Добавлено: 23.06.06 21:52
Private Sub Form_Resize()
Кстати, вот ты человек, о сложности говоришь, а сам додумался запихнуть код в Form.Resize
Номер ответа: 28
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #28
Добавлено: 23.06.06 21:59
))
поддерживаю.. именно поэтому и написал, что это остается на совести разработчика..(не твоей, а того, кто будет использовать твой код)
А что касается Form_Resize, то Алексей по ходу просто форумы попутал по неопытности.. он код-то для VB6 выложил.. ))
Номер ответа: 29
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #29
Добавлено: 23.06.06 21:59
Здесь я сам с собой не соглашусь)) я настолько привык к vb6, что до сих пор хочеЦа в реестр лезть через API))
Номер ответа: 30
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #30
Добавлено: 23.06.06 22:02
Ну это во-первых)) А во-вторых, наскока я понял K&M, он имел в виду то, что Алексей сунул код в Form_Resize, а не в Form_Unload (если уж это vb6)