Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание и сохранение button пользователем 
:(
    Опции темы
soros26
Дата 16.1.2010, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



Поясняю ситуацию. Допустим у нас есть пустое WPF приложение с одной единственной "служебной" кнопкой button по нажатию на которую автоматически создается кнопка button1 (свойства все прописаны в коде-размер, расположение и т.д.), если пользователь еще раз нажмет на кнопку button, то под button1 создается кнопка button2 с такими же свойствами как и button1 и т.д.
Главный вопрос над которым я уже несколько месяцев думаю думаю и не могу придумать: вот пользователь создал кнопки, выбрал из списка функции для этих кнопок, но ГДЕ и КАК можно все это сохранить, чтобы при следующем запуске приложения все это снова отображалось  в приложении? Ведь в наличии только exeшник программы и все.  Если только в  xml файл каким-то образом записывать...
Но вообще  в моем случае все равно будет использовать MsSQL - может всю эту информацию каким-то образом туда писать?...
На самом деле это очень важный вопрос: пользователи должны кастомизировать приложения под себя, так как им нужно - это вектор для программирования десктопных приложений на ближайшее будущее...
В Windows Form тоже нет никаких  готовых решений... 
Помогайте кто чем может...если кто сталкивался с подобным - напишите хотя бы какой-нибудь примерчик простенький. 
Всем заранее спасибоsmile
PM   Вверх
tol05
Дата 16.1.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



При выходе из приложения можно записывать контролы XamlWriter-ом, а при следующем запуске приложения - считывать этот XAML при помощи XmlReader-а.

пример из msdn иллюстрирует именно Ваш случай ИМХО.

Это сообщение отредактировал(а) tol05 - 16.1.2010, 22:17


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
WolfTheGrey
Дата 17.1.2010, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



можно создать потомок класса (class myButton:button{}) с содержанием нужных параметров кнопки и  записывать все созданные кнопки в List<myButton> масив. И сохранять этот масив.
PM MAIL   Вверх
soros26
Дата 17.1.2010, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



Примерчик самый простой хотя быsmile
PM   Вверх
tol05
Дата 17.1.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



Цитата(soros26 @  17.1.2010,  03:27 Найти цитируемый пост)
Примерчик самый простой хотя быsmile 

в моем посте есть линк

Цитата(WolfTheGrey @  17.1.2010,  01:33 Найти цитируемый пост)
можно создать потомок класса (class myButton:button{}) с содержанием нужных параметров кнопки и  записывать все созданные кнопки в List<myButton> масив. И сохранять этот масив. 

а вот на пример этого подхода действительно хотелось бы посмотреть )


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
WolfTheGrey
Дата 17.1.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



а вот на пример этого подхода действительно хотелось бы посмотреть 

примерно так, только осталось отучить BinaruFormater от класса Button.

Без кружки пива код не смотрите smile

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  ConsoleServer_Client.zip 50,16 Kb
PM MAIL   Вверх
tol05
Дата 17.1.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



WolfTheGrey, коротко о Вашей идее:
- Вы выбрали только несколько свойств из того великого множества данных, с которыми может быть ассоцииирована кнопка. При каждом чихе (грубо говоря) Вам нужно будет дорабатывать свой серилизуемый класс.
- если нужно будет сохранять восстанавливать другие контролы - Вы очевидно будете создавать для каждого из них подобный класс. Приложение будет требовать перекомпиляции и доставки нового варианта клиентам.
И чем Вы замените тогда List<myButton> ? Объектом List<myUnknownButAnywayBeautifulControl> ? Тогда десерилизация (в List конкретных типов) может быть проблематичной.

Ведь основная проблема - как восстановить данные при повторном запуске
Цитата(soros26 @  16.1.2010,  20:22 Найти цитируемый пост)
чтобы при следующем запуске приложения все это снова отображалось  в приложении?

Вы на этот вопрос не ответили.

И последнее. Сохранение\восстановление графического интерфейса приложения - это простая и далеко не самая важная задача этого самого приложения... Если таким образом подходить к решению каждой из таких задач.. 

Это сообщение отредактировал(а) tol05 - 17.1.2010, 17:06


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
WolfTheGrey
Дата 18.1.2010, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



пространство имен: System.Windows.Markup не плохая тема smile

Это сообщение отредактировал(а) WolfTheGrey - 18.1.2010, 07:04
PM MAIL   Вверх
math64
Дата 18.1.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 2
Всего: 72



tol05: Ваш пример из msdn не будет сохранять обработчик кнопки. Если набор обработчиков фиксирован и заранее известен, можно использовать метод предоженный мной в теме сохранение-созданных-пользователем-кнопок
PM   Вверх
tol05
Дата 18.1.2010, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



math64, просто я полагал вопрос состоял в сохранении\восстановлении графического состояния - дерева элементов. 
Цитата

(свойства все прописаны в коде-размер, расположение и т.д.)
Чтение\запись XAML это сделать позволяет и, очевидно, для этого и придумано. 

Да ведь и Вы в своей теме об этом же рассуждали. Я не видел Вашей темы просто )
Кстати, мне понравился Ваш подход. Единственное, что бы я сделал - вместо enum сделал бы иерархию объетов Action (наподобие того как сделан паттерн Command в WPF), где каждому Action ставился бы в соответствие свой хандлер и, таким образом, убрал бы switch.

То, что обработчики событий не сохраняются (поведение т.е.) - это указано в msdn (Сериализация ограничений XamlWriter.Save)... Что делать! Но, с другой стороны, это не всегда и плохо )
Например, когда Вы хотите внедрить фрагмент чужеродной разметки в свое приложение. Какая это будет разметка, каких она будет требовать хандлеров (да и будут ли там вообще какие-нибудь хандлеры) - этого Вы не узнаете, пока не прочитаете эту разметку в рантайме. 
Соответственно, нельзя объять необъятное ))

вот так я примерно рассуждал


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.2066 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.