Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C# Выбрать текстовый файл Есть папка с текстовыми файлами(1.txt...9.txt). Как открыть один из них используя combobox? Т.е в нем должны быть названия этих файлов. https://www.cyberforum.ru/ windows-forms/ thread1558172.html C# Передача данных из одного приложения в другое
У меня есть программа С# Windows Form, на выходе которой имею два массива. Я запустил эту программу и получаю каждую секунду новые массивы, вывожу их на график. Пришла пора их как-то передать в совсем другую программу. Просто, вот создам я пустой Windows Forms и надо бы написать что-то типа Idata,Qdata get(data from Windows Forms 1); Text1 = Idata; И чтобы после запуска второго приложения оно...
C# Исправьте алгоритм таким образом, чтобы он учитывал возможность определения палиндрома для строки https://www.cyberforum.ru/ windows-forms/ thread1558041.html
Int64 Factorial2 (Int64 num) { if (num == 0) Factorial2 = 1 else Factorial2 = num * Factorial2 (num-1) return Factorial2; }
C# Необработанное исключение типа System.IO.IOException https://www.cyberforum.ru/ windows-forms/ thread1557997.html
не могу понять в чем причина..
C# Ограничения перемещения формы
Здравствуйте, не получается ограничить перемещение формы, чтобы она не выходила за границы экрана. Сверху и справа ограничение работает, не знаю, как задать ограничение снизу и справа. Нашел в интернете, что есть класс Screen, но при этом не получается им воспользоваться. Как прописать ограничение через класс Screen? Или может есть другой вариант, но при этом без задания каких то констант?...
C# Не виден текст DataGridView Row HeaderText https://www.cyberforum.ru/ windows-forms/ thread1557935.html
Здравствуйте. Подскажите почему не получается сделать нумерацию строк DataGridView. Столбцы без проблем нумеруются. Такой вариант не помог. row.HeaderCell.Value = String.Format("{0}", row.Index + 1); И другие ...
C# Распределения случайной величины https://www.cyberforum.ru/ windows-forms/ thread1557895.html
Здравствуйте, кто может помочь, очень надо..( Задание: Написать программу(С# windows form) (Нужно отобразить графически на charte) для построения распределений с соответствующими параметрами: a. Бернулли p = 1 / (4); b. Биноминальной распределение p = 1 / (5), n = 23; c. распределение Пуассона λ = 23; d. равномерное распределение a = -3 b = 3; e. нормальное распределение со...
C# TabControl скроллинг
Здравствуйте. На TabControl есть длинный TabPage, который сворачивается с появлением полосы прокрутки. Тут все хорошо. В конце TabPage находится GroupBox. Проблема в том, что когда либо наводишь мышкой на groupbox и ждешь, либо нажимаешь на него, скролл сбрасывается в нуль. Т.е. я оказываюсь в начале страницы, и приходится опять опускаться вниз и повторять те же действия. Как это исправить? ...
C# Исправьте ошибку в алгоритме При запуске отображается вместо нуля другое число. То есть не правильно считается общее кол-во пройденных пикселей. https://www.cyberforum.ru/ windows-forms/ thread1557844.html C# Не адкватная реакция кнопки на нажатие https://www.cyberforum.ru/ windows-forms/ thread1557795.html
Суть проста. Надо сделать лабу и в ней "отработать документ". Т.е. сделать эдакую прогу представление документа. Я уже всё сделал и всё такое. И вдруг обнаружил, что на 3 из 3 вызываемых форм у меня галюны какие-то. Если нажимать первые 2 кнопки, то дочерняя форма закрывается! Так не должно быть! Они текст должны показывать! А если на 3 кнопку жать, то показывается текст- так и надо. Почему...
C# Избегание зависания при отправке почты
Тема решена.
C# Настроить взаимодействие происходящего на экране с окружающим миром наткнулся на такое прикольное видео, cut может кто знает как можно сделать похожее ?? заранее спасибо! https://www.cyberforum.ru/ windows-forms/ thread1557762.html
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
21.10.2015, 18:37  [ТС] 0

Архитектура ПО в WinForms (FAQ & HowTo) - C# - Ответ 8225502

21.10.2015, 18:37. Показов 169510. Ответов 12
Метки (Все метки)

Ответ

HowTo: Как сделать панель свойств

Если вы хотите редактировать свойства объектов непосредственно в форме (без открытия диалогового окна), нужно сделать следующее:
  • Создать на главной форме пустую панель (пусть она называется pnProperties)
  • Создать UserControl для редактирования объектов (если типы объектов разные, то для каждого типа должна быть отдельный UserControl).
  • В UserControl создать публичный метод Build(T data), который будет передавать в UserControl объект, который нужно редактировать.
  • Когда пользователь выберет объект для редактирования, создайте нужный UserControl, вызовите у него метод Build() и положите контрол в pnProperties.

Пояснения

Реализация редакторов свойств через UserControl позволяет:

1) Разделить логику приложения на независимые части. Код отображения, парсинга и верификации объекта будет сосредоточен в одном отдельном контроле.

2) Реализуя редакторы свойств в отдельных контролах мы разгружаем код главной формы, делаем его более простым и легко модифицируемым. В идеале - главная форма вообще не должна содержать кода. Весь функционал должен быть сосредоточен в UserControls, лежащих на форме.

3) Разработанный единожды контрол можно использовать во многих местах, где вам потребуется редактирование объектов данного типа.

4) Если класс модели данных меняется, вам нужно будет изменить код только соответствующего UserControl. Код главной формы, остальных форм и контролов - останется прежним.

5) UserControl позволяют распределить разработку GUI между несколькими программистами.

Пример

Главная форма:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public partial class MainForm : Form
    {
        ....
 
        private void tvMain_AfterSelect(object sender, TreeViewEventArgs e)
        {
            //очищаем панель свойств
            pnProperties.Controls.Clear();
            //
            if(e.Node.Tag != null)
            {
                if (e.Node.Tag is Person) new PersonPanel { Parent = pnProperties, Dock = DockStyle.Fill, Applied = OnPropertyPanelApplied }.Build(e.Node.Tag as Person);
                if (e.Node.Tag is CreditCard) new CreditCardPanel { Parent = pnProperties, Dock = DockStyle.Fill, Applied = OnPropertyPanelApplied }.Build(e.Node.Tag as CreditCard);
            }
        }
 
        private void OnPropertyPanelApplied(object sender, EventArgs e)
        {
            if (tvMain.SelectedNode.Tag != null)
                tvMain.SelectedNode.Text = tvMain.SelectedNode.Tag.ToString();
        }
    }
Один из UserControl:
C#
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
    public partial class PersonPanel : UserControl
    {
        public Person Data { get; private set; }
 
        public EventHandler Applied = delegate { };
 
        public PersonPanel()
        {
            InitializeComponent();
        }
 
        public void Build(Person person)
        {
            Data = person;
 
            tbName.Text = Data.Name;
            dtpBirthday.Value = Data.BirthDate;
        }
 
        public void Apply()
        {
            Data.Name = tbName.Text;
            Data.BirthDate = dtpBirthday.Value;
        }
 
        protected void OnApplied()
        {
            Applied(this, EventArgs.Empty);
        }
 
        private void btApply_Click(object sender, EventArgs e)
        {
            try
            {
                Apply();
                OnApplied();
            }catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
Проект целиком: Example4.zip

Упражнение 1

Измените приведенный выше пример так, что бы кнопка Apply была активна только если пользователь изменил поля редактируемого объекта.

Упражнение 2

Измените приведенный выше пример так, что бы кнопки Apply не было, а измененные поля автоматически сохранялись в модель данных.
Подсказка 1

Используйте событие Validating для UserControl.

Подсказка 2

Используйте публичный метод Apply у UserControl. Создайте интерфейс IPropertyPanel.

Решение: Example5.zip

Упражнение 3

Сделайте так, что бы в редакторе свойств CareditCard можно было редактировать свойства держателя карты (класс Person). Редактирование свойств должно быть реализовано через диалоговое окно. Убедитесь, что UserControl для Person может быть использован как внутри главной формы, так и в диалоговых окнах.

Архитектура ПО в WinForms (FAQ & HowTo)


Вернуться к обсуждению:
Архитектура ПО в WinForms (FAQ & HowTo) C#
28
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2015, 18:37
Готовые ответы и решения:

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume...

MVVM & WinForms
у меня есть проект wpf, в котором в главное окно подгружаются юзер контролы, в зависимости от...

error '80020009' Îøèáêà. /lalala/profile.asp, line 28
При простейшем и сто раз работавшем скрипте, вылетает ошибка! след. содержания error...

Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2
pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2 Мультимедиа аудиоконтроллер ...

12
21.10.2015, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2015, 18:37
Помогаю со студенческими работами здесь

немогу найти драйвера на PCI\VEN_1039&DEV_7012&SUBSYS_810D1043&REV_A0\3&61AAA01&0&17
Мультимедиа аудиоконтроллер PCI\VEN_1039&DEV_7012&SUBSYS_810D1043&REV_A0\3&61AAA01&0&17

Нужен драйвера, код PCI\VEN_1039&DEV_7012&SUBSYS_0C98105B&REV_A0\3&B1BFB68&0&17
всем привет !! уменя нет звука нужен драйвер код...

Мультимедиа контролер PCI\VEN_14F1&DEV_8800&SUBSYS_EA3D14F1&REV_05\4&25700A26&0&3020
Помогите пожалуйста найти драйвер на мультимедиа видеоконтролер ...

Драйвера на PCI\VEN_10B7&DEV_1700&SUBSYS_80EB1043&REV_12\4&2E98101C&0&28 F0
помогите плиз - вот ID: PCI\VEN_10B7&DEV_1700&SUBSYS_80EB1043&REV_12\4&2E98101C&0&28F0 ...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru