Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794

Привязка контролов к настройкам

08.08.2013, 08:14. Показов 3095. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, возникла проблема при привязке контролов в настройкам приложения.
Суть такая - есть форма, на ней контролы (в основном это ТабКонтрол и чекбоксы на вкладках),
я забиндил свойства Чекед к настройкам приложения (Сеттинг.Дефолт)
так вот - при загрузке приложения настройки не считываются, т.е. не применяются пока не будет открыта вкладка с этим контролом - например параметр из файла настройки имеет значение true, чекбокс к которому он прикреплен соответственно cheked - но при использовании в коде значения параметра или чекбокса его значение другое (фалс).
Кто ниб сталкивался с таким? как бороться? и мб кто видел хорошее описание процесса биндинга контролов к настройкам приложения.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2013, 08:14
Ответы с готовыми решениями:

Привязка контролов к окну
Форумчане ни как не могу догнать при уменьщении окма мои лэйблы и текстбоксы ни куда не двигаются а выходят за кулисы программы как мне их...

[WPF] Привязка свойств контролов к значениям локальных переменных
Имеется List, в котором, допустим, по индексу 0 содержится булевое значение, определяющее должен ли быть checkbox ischecked (true) или...

XAML. Выравнивание контролов в ToolBar и StatusBar. + ширина контролов в процентах
Выравнивание контролов в ToolBar и StatusBar с помощью Grid или без. + ширина контролов в процентах. Есть главный Grid, в нем лежат...

21
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
08.08.2013, 14:07
Привет, по хорошему у тебя должен быть объект который ты биндишь, используй его, а не контролы.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
08.08.2013, 22:38  [ТС]
а Setting чем не объект?
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
09.08.2013, 10:05
Ну так в чем проблема? В том что в check box нет актуального значения?
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.08.2013, 18:00  [ТС]
Цитата Сообщение от Grishaco Посмотреть сообщение
Ну так в чем проблема? В том что в check box нет актуального значения?
да, так и есть. значения не совпадают до того момента пока контрол не станет видимым
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
09.08.2013, 18:11
Я тогда не понимаю какое поведение требуется. Контрол не виден тогда какая разница какое у него состояние, есть же класс хранящий состояние контрола его вполне можно использовать. Даже если пользователь изменил состояние контрола произойдет изменение свойства в классе.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
12.08.2013, 07:35  [ТС]
действительно, состояние контрола не имеет значения, но происходит вот такая картина (мб я как то не так привязку использую).
вот есть две вкладки на табконтроле, на вкладке 1 - чекбокс "включить звук", на вкладке 2 - чекбокс "показать подсказки". при выходе из приложения оба чекбокса включены, это видно в файле конфигурации, сохраненном на диске после выхода из приложения.
при запуске приложения видна вкладка один, видно что чекбокс 1 (включить звук) включен и звук есть.
но подсказок нет, хотя чекбокс 2 (включить подсказки) тоже должен быть активен,
т.к. в настройках загруженных с диска привязанный к нему параметр активен, так же как и параметр привязанный к чекбоксу звук. но в реалиях пока вкладка два не будет активна - т.е. пока визуально чекбокс не виден правильное состояние не выставится.
вроде понятно надеюсь объяснил картину...
как быть то?

п.с. получается чтоб применились сохраненные настройки - нужно пооткрывать все вкладки чтоб все контролы стали видимымы.
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
12.08.2013, 09:59
Как осуществляется привязка данных?

Вот так?

Класс для привязки
C#
1
2
3
4
5
public class Setting
    {
        public bool EnabledAudio { get; set; }
        public bool ShowToolTip { get; set; }
    }
Сама привязка (можно делать в дизайнере студии)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
var dataSource = new Setting();
 
            settingBindingSource = new BindingSource {DataSource = dataSource};
            checkBoxEnabledAudio.DataBindings.Add(new Binding("Checked", settingBindingSource, "EnabledAudio", true));
            checkBoxShowToolTip.DataBindings.Add(new Binding("Checked", settingBindingSource, "ShowToolTip", true));
            
            //Принудительное обновление связей
            checkBoxShowToolTip.ResetBindings();
 
            if(dataSource.EnabledAudio && dataSource.ShowToolTip)
            {
                //Что то делаем
            }
При такой привязке, нет смысла работать со свойствами контролов, т.е. все данные нужно смотреть в классе, который привязывается. При изменении свойства контрола автоматически (в зависимости от настройки) произойдет изменение свойства объекта.

C#
1
2
3
4
 if(dataSource.EnabledAudio && dataSource.ShowToolTip)
            {
                //Что то делаем
            }
Возможно я не прав, но мне кажется пока объект не прорисовался он не привязывается к данным. Возможно я ошибаюсь.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
12.08.2013, 16:36  [ТС]
примерно так и есть, ток реализовано штатными средствами студии, т.е. все через дизайнер. сами свойства контролов в коде я не задействую, использую поля класса, а контролами пользователь только меняет из формы настройки.
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
12.08.2013, 17:09
В принципе поведение предсказуемого, если постараться то можно заставить объекты обновить привязку, вот только зачем. Ну висит CheckBox не видимый, некорректное у него состояние, ну и пускай, самое главное что мы работает с корректным состоянием, которое находится в привязываемом объекте.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
12.08.2013, 17:20  [ТС]
если бы так было то и вопроса бы не было, а вот в объекте тоже не верное значение, - правильное получается когда контрол становится видимым
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.08.2013, 17:39
hepper, вариантов у вас несколько:
1. В коде используются свойства контрола, вместо класса настроек.
2. Конфиг не сохраняется при выходе или настройка имеет область application.
3. Свойство Checked привязано более чем к одному свойству другого класса (классов).
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
12.08.2013, 18:54  [ТС]
1. нет контролы не используются.
2. сохранятся, после сохранения открывал блокнотом перепроверял
3. ммм...тут надо проверить...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.08.2013, 20:25
Цитата Сообщение от hepper Посмотреть сообщение
тут надо проверить...
Заодно проверьте, чтобы настройка в классе не была забиндена на какой-нибудь еще контрол
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
12.08.2013, 20:50  [ТС]
проверил, все бинды верные. еще заметил происходит "пропадания" значения... значение забинденое на контрол меняется самопроизвольно... вообще косяк с этими настройками...
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
13.08.2013, 09:32
Что удалось откопать.

Если контрол не видимый, тогда привязка не работает.
Я создал TextBox привязался к Visible, так вот если свойство установить в false, то контрол пропадает и обратное выставление свойства в true не помогает.

Думаю так задумали в Microsoft.

Ссылка на тему
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
13.08.2013, 11:38  [ТС]

бидаа....
спасибо за помощь.... оказывается при отрисовке/появлении вкладки надо обновлять биндинг...
правда хз как обновить все сразу...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
13.08.2013, 16:22
Цитата Сообщение от hepper Посмотреть сообщение
оказывается при отрисовке/появлении вкладки надо обновлять биндинг...
Зачем?!

Вот минимальный пример с привязкой двух чекбоксов на разных закладках к двум свойствам в классе настроек:
Sample.zip

Пример тестирования после компиляции:
1. Запустить приложение
2. Тыкнуть по кнопке Show values
3. Чекнуть контрол на второй закладке (можно и на первой).
4. Тыкнуть кнопку — посмотреть на значения.
5. Закрыть приложение.
6. Открыть приложение.
7. Тыкнуть кнопку, чтобы проверить значения, не открывая вторую закладку.
8. Посмотреть на состояние контрола на второй закладке.

Проверено на XP SP3: значения нормально сохраняются и восстанавливаются.
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
13.08.2013, 17:37
kolorotur, вы все правильно указали, только ваш код напрямую присваивает значение свойству Check из ресурсов.
C#
1
this.checkBox1.Checked = global::ControlBindings.Properties.Settings.Default.Check1;
Это все равно, что сделать в коде

C#
1
2
3
4
var dataSource = new Setting(); 
settingBindingSource = new BindingSource {DataSource = dataSource};
checkBoxEnabledAudio.DataBindings.Add(new Binding("Checked", settingBindingSource, "EnabledAudio", true));
checkBoxShowToolTip.DataBindings.Add(new Binding("Checked", settingBindingSource, "ShowToolTip", true));
checkBox2.Checked = dataSource.ShowToolTip;
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
13.08.2013, 17:54
Цитата Сообщение от Grishaco Посмотреть сообщение
ваш код напрямую присваивает значение свойству Check из ресурсов.
Дык это не мой код, а сгенерированный студией.
Автор же тоже мышкой биндинги выставляет — у него студия, получается, какой-то другой код генерит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.08.2013, 17:54
Помогаю со студенческими работами здесь

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

По настройкам сети
Сеть в организации 192.168.1.x , маска 255.255.255.0 На одном из компьютеров настроено VPN. Работа с удаленным сервером ведется через...

Что это жесткая привязка к точке входа, физическое смещение в файле, окрестность точки входа в файл, привязка?
Что это жесткая привязка к точке входа, физическое смещение в файле, окрестность точки входа в файл, привязка к смещению сигнатуры...

Подскажите по настройкам видео...
Я недавно купил новый комп с новой видео картой (NVIDIA GeForce 9600 GT). Проблема получилась такая: если я устанавливаю заставку 3D (либо...

Сброс к заводским настройкам
Здравствуйте, имеется ноутбук, который шел вначале с win 8, потом его обновили до 8.1, затем до 10. Если сделать сброс к заводским...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru