Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 11.03.2013
Сообщений: 30

Как сохранить настройки пользователя при работе с программой

11.03.2013, 15:30. Показов 4259. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно, чтобы когда пользователь при работе с программой выбирал какой-то параметр в меню и устанавливал его "Checked", то при закрытии программы "FormClosing" и последующем ее открытии "Load" этот параметр был снова установлен.

Пробовал через "My.Settings", но пока ничего не получилось. Помогите, пожалуйста, разобраться.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2013, 15:30
Ответы с готовыми решениями:

Учет действий пользователя при работе с СУБД
Доброго времени суток! Подскажите пожалуйста как можно сделать в СУБД 1. программное создание пользователей с присвоением каждому...

Как сохранить настройки при закрытии программы?
Я совсем новичок в этом деле. Второй день блуждаю по форумам, но никак не смог найти ответ. Знаю, что в c# это можно реализовать с помощью...

Как сохранить настройки приложения при обновлении?
Как сохранить настройки приложения при его обновлении в marketplace? И как это можно проверить?

12
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
11.03.2013, 15:36
Birdy, как вариант, можете использовать текстовый файл для записи параметров.
1
2 / 2 / 0
Регистрация: 11.03.2013
Сообщений: 30
11.03.2013, 15:41  [ТС]
То есть указать, где этот файл будет сохранен и задать имя этого файла при закрытии программы и потом ссылаться на этот файл при ее открытии? Как это выразить в коде? Хоть, примерно, а то я что-то смутно представляю как программа будет брать настройки программы из простого текстового файла.
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
11.03.2013, 15:57
У каждого элемента управления есть Application Settings в свойствах, позволяющий сохранять то или иное свойство.
1
2 / 2 / 0
Регистрация: 11.03.2013
Сообщений: 30
11.03.2013, 16:12  [ТС]
Все равно я не понимаю как правильно сохранить настройки...

Вот например если нужно поставить галочку в меню "Строка Состояния":

VB.NET
1
2
3
4
5
6
     
 
        If СтрокаСостоянияToolStripMenuItem.Checked = True Then
            Dim StatusBar(СтрокаСостоянияToolStripMenuItem.Checked) As String
            IO.File.WriteAllLines(Application.StartupPath & "\settings.txt", StatusBar)
        End If
Файл создался, только пустой.
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
11.03.2013, 16:37
Выделяешь элемент управления, в окне свойств в самом верху находишь Application Settings и указываешь какие свойства нужно сохранять. Всё очень наглядно. И весь код студия пишет за тебя. Файл настроек будет лежать в папке пользователя
1
2 / 2 / 0
Регистрация: 11.03.2013
Сообщений: 30
11.03.2013, 17:00  [ТС]
ViterAlex, спасибо! Но файл настроек так и не появился. Я выбрал параметр, зашёл в свойства справа в Application Settings добавил параметр, который будет сохранятся: Checked. В настройках появилась строка: Settings, Type Boolean, Scope User, True. Но эти настройки при запуске программы не возобновляются.
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
11.03.2013, 17:19
В свойствах проекта должна стоять галочка Save My.Settings on Shutdown
1
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.03.2013, 17:47
Цитата Сообщение от Birdy Посмотреть сообщение
Как сохранить настройки пользователя при работе с программой
в реестр лучше. Но у текстовика (файл .ini) есть свои преимущества - можно скопи ровать файл вместе с программой и настройки перенести на другой комп
1
8 / 8 / 1
Регистрация: 18.04.2012
Сообщений: 54
11.03.2013, 23:33
Можете добиться этому на пример сохранения всех параметров окна и их изменений в плоть до того что будет сохранять не только текст в ТекстБоксах но и размер окна и даже его место на экране...

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
сохранить
Dim fs As New IO.FileStream("c:layout.bin", IO.FileMode.Create)
LayoutSerializer.SaveLayout(Me, fs)
fs.Close()
 
'загрузить
Dim fs As New IO.FileStream("c:layout.bin", IO.FileMode.Open)
LayoutSerializer.LoadLayout(Me, fs, LayoutSerializer.LoadMode.DontCreateExistingControls)
fs.Close()
 
'*******************************************************************
 
Option Strict On
 
'*******************************************************************
'Класс для сохранения/загрузки состояния формы
'*******************************************************************
 
Public Class LayoutSerializer
 
  Public Enum LoadMode
    CreateAllControls
    DontCreateExistingControls
    OnlyCreateExistingControls
  End Enum
 
  Public Shared Sub SaveLayout(ByVal instance As Form, ByVal outputStream As System.IO.Stream)
    Dim ControlInfoList As New List(Of ControlInfo)
 
    Dim formatter As System.Runtime.Serialization.IFormatter = New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
 
    Dim ctl As Control = instance.GetNextControl(instance, True)
    ControlInfoList.Add(New ControlInfo(instance))
    Do Until ctl Is Nothing
      ControlInfoList.Add(New ControlInfo(ctl))
      ctl = instance.GetNextControl(ctl, True)
    Loop
    formatter.Serialize(outputStream, ControlInfoList)
  End Sub
 
  Public Shared Sub LoadLayout(ByVal instance As Form, ByVal inputStream As System.IO.Stream, ByVal Mode As LoadMode)
    Dim ControlInfoList As List(Of ControlInfo)
    Dim formatter As System.Runtime.Serialization.IFormatter = New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
    Dim ctrl As Control
    Dim propEnum As IEnumerator
    Dim dictEntry As System.Collections.Generic.KeyValuePair(Of String, Object)
    ControlInfoList = CType(formatter.Deserialize(inputStream), List(Of ControlInfo))
    Dim ci As ControlInfo
    ci = ControlInfoList.Item(0)
    propEnum = ci.Properties.GetEnumerator
    Do While propEnum.MoveNext
      dictEntry = CType(propEnum.Current, System.Collections.Generic.KeyValuePair(Of String, Object))
      ci.ControlType.GetProperty(dictEntry.Key).SetValue(instance, dictEntry.Value, Nothing)
    Loop
    For i As Integer = 1 To ControlInfoList.Count - 1
      ci = ControlInfoList.Item(i)
      ctrl = CType(Activator.CreateInstance(ci.ControlType, True), Control)
      propEnum = ci.Properties.GetEnumerator
      Do While propEnum.MoveNext
        dictEntry = CType(propEnum.Current, System.Collections.Generic.KeyValuePair(Of String, Object))
        ci.ControlType.GetProperty(dictEntry.Key).SetValue(ctrl, dictEntry.Value, Nothing)
      Loop
      Select Case Mode
        Case LoadMode.DontCreateExistingControls
          If Not instance.Controls.ContainsKey(ctrl.Name) Then
            instance.Controls.Add(ctrl)
          Else
            propEnum.Reset()
            Dim existingControl As Control = instance.Controls(ctrl.Name)
            Do While propEnum.MoveNext
              dictEntry = CType(propEnum.Current, System.Collections.Generic.KeyValuePair(Of String, Object))
              existingControl.GetType.GetProperty(dictEntry.Key).SetValue(existingControl, dictEntry.Value, Nothing)
            Loop
          End If
        Case LoadMode.CreateAllControls
          instance.Controls.Add(ctrl)
        Case LoadMode.OnlyCreateExistingControls
 
          If instance.Controls.ContainsKey(ctrl.Name) Then
            instance.Controls.Add(ctrl)
          End If
      End Select
    Next
  End Sub
 
  <Serializable()> _
  Private Class ControlInfo
    Public ControlType As Type
    Public Properties As New Dictionary(Of String, Object)
    Sub New(ByVal ctrl As Control)
      ControlType = ctrl.GetType
      Dim value As Object
      For Each pi As Reflection.PropertyInfo In ControlType.GetProperties
        If pi.CanWrite Then
          value = pi.GetValue(ctrl, Nothing)
          If value Is Nothing OrElse value.GetType.IsSerializable Then
            Properties.Add(pi.Name, value)
          End If
        End If
      Next
    End Sub
  End Class
 
End Class
1
2 / 2 / 0
Регистрация: 11.03.2013
Сообщений: 30
12.03.2013, 18:28  [ТС]
ViterAlex , голочка стояла...

emenem97 , мне для начала нужно, чтоб хоть один какой-то параметр сохранялся.

Vicktor , спасибо, но у меня с этим кодом пока не получается разобраться.

Error 1 Declaration expected.
Error 2 Declaration expected.
Error 3 'fs' is already declared as 'Private fs As System.IO.FileStream' in this class.
Error 4 Declaration expected.
Error 5 Declaration expected.
Error 6 'Option' statements must precede any declarations or 'Imports' statements.
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
12.03.2013, 18:38
Цитата Сообщение от Birdy Посмотреть сообщение
emenem97 , мне для начала нужно, чтоб хоть один какой-то параметр сохранялся
Visual Basic
1
My.Computer.Registry.SetValue("HKEY_Local_Machine\Software\Serv", "Temp", TextBox5.Text)
записать значение вв реестр

Visual Basic
1
BASEPass = My.Computer.Registry.GetValue("HKEY_Local_Machine\Software\Serv", "BASEPass", "111")
прочитать значение из реестра

обязательно в начале кода написать
Visual Basic
1
2
Imports System
Imports Microsoft.Win32
я сам с чтением реестра не связывался никогда, только записывал значения ( в других программах чтобы менять настройки программно).
Думаю что значение которое записывается в программе является переменной, когда вы меняете параметры то это значение меняется и сохраняется, а при следующем запуске программы опять считывается сохраненное.
1
2 / 2 / 0
Регистрация: 11.03.2013
Сообщений: 30
12.03.2013, 22:06  [ТС]
Цитата Сообщение от emenem97 Посмотреть сообщение
спасибо! попробую.

Добавлено через 1 час 41 минуту
Все! Я разобрался!

Вначале задал переменную:

VB.NET
1
Dim setting As New My.MySettings()
Затем создал в свойствах новую настройку типа Boolean, установил в положение False.

При загрузке формы Load прописал этот код:

VB.NET
1
СтрокаСостоянияToolStripMenuItem.Checked = setting.StatusBar
А при FormClosing этот:

VB.NET
1
2
        setting.StatusBar = СтрокаСостоянияToolStripMenuItem.Checked
                   setting.Save()
Но есть одно большое НО... параметр меню устанавливается в состояние Checked, как и было отмечено при выходе из программы, но сама строка состояния не появляется... Подскажите, пожалуйста, в чем ошибка.

Добавлено через 40 минут
Теперь все точно работает как я и хотел!

А ошибка была в том, что вместо действия СтрокаСостоянияToolStripMenuItem.CheckStateChanged было установлено Click. Теперь все в порядке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2013, 22:06
Помогаю со студенческими работами здесь

Как сохранить время и логин пользователя при запуске программы
Есть такое задание сохранять в таблицу БД данные о том кто и когда зашел программу/подключился к БД как это сделать ? суть в том...

Ошибка при работе с программой
Здравствуйте. Имеется программа, задача которой является нахождение корня функции нелинейного уравнения методом половинного деления на...

Зависает ПК при работе с программой просмотра заявок
Доброго времени суток, подскажите пожалуйста, в чем может быть проблема? При простое компьютера, работает без нареканий, при нагрузке...

При работе с программой выдает не результат, а какие то непонятные символы
Вот скриншот: Собственно что это и как убрать ?

Особенности настройки освещения при работе с нормалями
Вектор нормали к плоскости может иметь 2 направления и из-за этого портится освещение. Подскажите, пожалуйста, какой-нибудь простенький...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru