Страница: 1 |
Страница: 1 |
Вопрос: Помогите разобраться
Добавлено: 19.11.06 11:54
Автор вопроса: Lipastron
Заранее прошу не швыряться в меня помидорами, старыми клавами и (в особенности!) ЭЛТ-мониторами.
Я новичок в мире VB 2005, и только начинаю делать первые шаги в освоении этой очень интересной системы. Весь опыт работы с VB5 и VB6 сильно обесценился в результате изменений синтаксиса... Но вопрос не об этом...
Можно считать меня глупым человеком, но ваш покорный пытается писать программы для увеличения КПД собственного рабочего места, хоть я и не программер...
И вот моя проблема:
Я пишу текстовый редактор и необычным для виндов интерфейсом, и мине крайне важно понять, как настройки этого самого интерфейса сохранять. Т.е. как, не обращаясь к таблицам SQL, сделать файл с установками, который прога могла бы подгружать при запуске?
Вопрос, конечно, детский, но ответу буду рад в любом случае.
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #1
Добавлено: 19.11.06 13:01
Юзай реестр...
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 19.11.06 13:32
Ну какой еще реестр???? Что за тяга к извращениям?
В 2005 студии для этих целей предусмотрена специальная фишка которая называется My.Settings и она, как нельзя лучше, для всего этого подойдет.. Все необходимые данные есть в MSDN.
Номер ответа: 3
Автор ответа:
Lipastron
Вопросов: 2
Ответов: 7
Профиль | | #3
Добавлено: 19.11.06 14:28
Огромное спасибо! Вы мне очень помогли!
[img]http://smiles.elze.ru/ani/bow.gif[/img]
Номер ответа: 4
Автор ответа:
Lipastron
Вопросов: 2
Ответов: 7
Профиль | | #4
Добавлено: 19.11.06 14:52
Чего-то я не въехал...
Итак, у меня три чекбокса, на каждый запоминаем свойство checked в двух состояниях: true / false.
Первый чекбокс работает без проблем, второй вызывает ошибку.
Кад такой:
'Итак, первая система запоминания значения (она работает):
If ComboColor.Enabled = True Then
ComboColor.Enabled = False
PictureBox1.Visible = False
My.Settings.Theme_Change = False
Else
ComboColor.Enabled = True
PictureBox1.Visible = True
My.Settings.Theme_Change = True
End If
'Вторая система запоминания значения (не пашет ((  :
Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
If CheckBox3.Checked = True Then
My.Settings.AutoShow_Toolbox = False
CheckBox3.Checked = False
PictureBox3.Visible = False
Else
CheckBox3.Checked = True
My.Settings.AutoShow_Toolbox = True
PictureBox3.Visible = True
End If
'И писалось это все для того, чтобы:
If My.Settings.AutoShow_Toolbox = True Then
Me.Show()
Me.CheckBox3.Checked = True
Me.PictureBox3.Visible = True
Me.MaximizeBox = False
End If
Что посоветуете?
Номер ответа: 5
Автор ответа:
Lipastron
Вопросов: 2
Ответов: 7
Профиль | | #5
Добавлено: 19.11.06 14:55
Кстати, код ошибки привел к разделу справки "Infinite loop"! И откуда у меня там взялся бесконечный цикл????
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 19.11.06 15:14
А ты сам не видишь?
...
CheckBox3.Checked = False
Эти строчки СНОВА вызывают событие CheckBox3_CheckedChanged, дальше цикл идет по ветке Else.. там мы снова видим.. CheckBox3.Checked = True .. и снова срабатывает CheckBox3_CheckedChanged.. ну и т.д..
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 19.11.06 15:20
И еще.. чтобы сохранить значение настройки, совершенно не обязательно указывать это явно
Фишка в том, что у каждого контрола в окне свойств есть такой раздел ApplicationSettings.. Так вот достаточно там связать одно из свойств котрола ( в данном случае Checked ) с соответствующей переменной вашей настройки (AutoShow_Toolbox) и все изменения этого свойства будут фиксироваться автоматически без Вашего участия. И соответственно будут восстанавливать свое состояние в момент загрузки формы..
Номер ответа: 8
Автор ответа:
Lipastron
Вопросов: 2
Ответов: 7
Профиль | | #8
Добавлено: 19.11.06 15:20
И как мне это обойти?..
Номер ответа: 9
Автор ответа:
Lipastron
Вопросов: 2
Ответов: 7
Профиль | | #9
Добавлено: 19.11.06 15:22
Опс... Написал это до поста о связях в свойствах...
Большущее спасибо!
Номер ответа: 10
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #10
Добавлено: 19.11.06 15:29
Если вы правильно все свяжете, то весь ваш код из события CheckBox3_CheckedChanged вседется к одной единственной строчке
Все остальное можно выкинуть т.к. эти действия будут выполняться автоматически..
Номер ответа: 11
Автор ответа:
Lipastron
Вопросов: 2
Ответов: 7
Профиль | | #11
Добавлено: 19.11.06 15:32
Как просто!
Спасибо - ни в одной книжке еще такого не встречал...
Номер ответа: 12
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 19.11.06 15:38
В книжках, как правило, мало пишут о таких вещах.. А если и пишут, то очень расплывчато.. приходится доходить методом научного тыка..
Читай между строк..
Удачи!
Номер ответа: 13
Автор ответа:
Lipastron
Вопросов: 2
Ответов: 7
Профиль | | #13
Добавлено: 19.11.06 16:06
Кстати, может быть, Вы мне еще одну вещицу подскажете?
Проблема такая: у меня есть панель с элементами управления внутри нее, нона может изменять свою высоту параллельно с формой. Однако это всегда должно осуществляться так, чтобы на панели помещались _все_ инструменты - скроллбар очень портит вид.
А инструменты у меня можно сворачивать и разворачивать - отсюда вместимость панели каждый раз требуется разная...
Я тыкался-тыкался, но ничего кроме вот этого не натыкал:
form1.minimumsize = 220, 30 + panel1.minimumsize + panel2.minimumsize...
Вот не хочет кушать, и все. Я даже переменные загонял - не есть, хоть тресни!
Ограничил максимальным значением высоты панели вручную, но хочется большего...
Номер ответа: 14
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 19.11.06 19:14
minimumsize, это тип Size.. А значит писать надо примерно так:
Номер ответа: 15
Автор ответа:
Viktor
Вопросов: 2
Ответов: 18
Профиль | | #15
Добавлено: 02.07.07 17:05
Если я правильно понял смысл вопроса, то вставь свою панель в ToolStripContainer. Сам контейнер можно заанкорить или поставить свойство Dock в значение "Fill" ну и т.д. В самом контейнере всё будет всегда оставаться на своих места без Resize'а