Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2

Создание пользовательского элемента управления: заменить стандартный DropDown у ComboBox

01.07.2015, 02:18. Показов 3058. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
делаю проект, позарез нужен комбобокс с чекбоксами. Куда копать? (я по этой теме не понимаю вообще ничего) vs 2013

Добавлено через 2 минуты
ps. Чем подробнее тем лучше
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.07.2015, 02:18
Ответы с готовыми решениями:

Свойства пользовательского элемента управления
Сделал я пользовательский элемент управления. В нем есть строка: public string str { get { return str; } ...

Доступ к свойствам пользовательского элемента управления
Создал пользовательский элемент управления.Нарисовал на нём круг и линию с помощью Visual Basic PowerPacks. Как осуществить доступ к нему...

Глубокое копирование пользовательского элемента управления
Здравствуйте! Ну вопрос практически описан в шапке. Есть пользовательский контрол. Надо сделать его глубокую копию. Поскольку это...

12
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
01.07.2015, 09:09
danyasworld, http://www.codeproject.com/Art... a-Dropdown
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
01.07.2015, 14:58  [ТС]
Storm23, а не могли бы вы дать ссылку на ресурс, где ПОДРОБНО рассказывается о том как создавать такое самому?

Добавлено через 11 минут
Storm23,
Цитата Сообщение от Storm23 Посмотреть сообщение
http://www.codeproject.com/Articles/...-as-a-Dropdown
это конечно хорошо, но не совсем то что мне нужно
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
05.07.2015, 00:50  [ТС]
наверное я не умею задавать вопросы. мне нужно создать combo box, с возможностью выбора нескольких элементов и дописывания своего текста после них. Combo box не дает писать текст. Значит надо начинать мудрить с TextBox. я засунул в него кнопку со значением "\/" . И это прекрасно!!! Но потом начались проблемымне явно не хватает опыта и знаний, по этому сразу куча вопросов... Как сделать checkedlistbox всплывающим поверх всех остальных элементов? как заставить его появиться прямо под text box?как сделать это все красиво и без говнокода?
P.s скоро будет еще вопросов

Добавлено через 6 минут
как сделать красивую кнопочку dropdown-а как в ComboBox?
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
11.07.2015, 00:23  [ТС]
для одного проэкта потребовалось сделать элемент, отличный от стандартных. Visual studio поставил недели 2 назад и в такие дебри еще пока не лазал. Гайд с офф сайта microsoft мне не очень помог. Что можно почитать/посмотреть, что бы понять как это вообще устроено? Пытался разобрать код Checked combo box, но для меня это пока сложновато... помогите пожалуйста)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
11.07.2015, 03:53
Что твой элемент управления должен уметь?
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
11.07.2015, 08:52  [ТС]
ViterAlex, ну как комбо бокс, только с возможностью выбора нескольких сразу (в dropdown - checked list box) , на listbox 2 кнопки (addControl?) , и возможность вручную дописать нужный текст...
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
12.07.2015, 23:45  [ТС]
ViterAlex, вот моя жалкая попытка заменить стандартный dropdown на checked list box. Что я не дописал/не обратил внимание пока копипастил?)
вот код:
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
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace FOND
{
    public partial class FONDComboBox : ComboBox
    {
        public FONDComboBox()
        {
            InitializeComponent();
        }
        internal class dropdown : Form
        {
 
            internal class cclb : CheckedListBox
            {
                public cclb()
                    : base()
                {
                    this.SelectionMode = SelectionMode.One;
                    this.HorizontalScrollbar = true;
                }
 
            }
            
                internal class button1 : Button
                {
 
                }
                internal class button2 : Button
                {
 
                }
 
            private FONDComboBox fcb;
            private cclb cuchlibo;
            public cclb list
            {
                get { return cuchlibo; }
                set { cuchlibo = value;  }
            }
            public dropdown(FONDComboBox fcb)
            {
                this.fcb = fcb;
                InitializeComponent();
                this.ShowInTaskbar = false;
            }
            private void InitializeComponent(){
                this.cuchlibo = new cclb();
                this.SuspendLayout();
                //
                //cuchlibo
                //
                this.cuchlibo.BorderStyle = System.Windows.Forms.BorderStyle.None;
                this.cuchlibo.Dock = System.Windows.Forms.DockStyle.Fill;
                this.cuchlibo.FormattingEnabled = true;
                this.cuchlibo.Location = new System.Drawing.Point(0, 0);
                this.cuchlibo.Name = "cclb";
                this.cuchlibo.Size = new System.Drawing.Size(47, 15);
                this.cuchlibo.TabIndex = 0;
                // 
                // Dropdown
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.BackColor = System.Drawing.SystemColors.Menu;
                this.ClientSize = new System.Drawing.Size(47, 16);
                this.ControlBox = false;
                this.Controls.Add(this.cuchlibo);
                this.ForeColor = System.Drawing.SystemColors.ControlText;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
                this.MinimizeBox = false;
                this.Name = "ccbParent";
                this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
                this.ResumeLayout(false);
 
            }
            }
       
 
       
 
        private void InitializeComponent()
        {
            this.SuspendLayout();
            this.ResumeLayout(false);
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
        }
    }
}
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
23.07.2015, 00:48  [ТС]
переделал вот так.
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
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text;
 
namespace FOND
{
    public partial class FONDComboBox : ComboBox
    {
        
        internal class Dropdown : Form
        {
            internal class CheckBoxItem : CheckedListBox
            {
                internal class Ok : Button
                {
 
                }
                internal class Cansel : Button
                {
 
                }
            }
            private FONDComboBox parent;
            private Dropdown dropdown;
            private CheckBoxItem ni;
            public CheckBoxItem List{
                get { return ni;}
                set { ni = value; }
             
            }
            
            public Dropdown( FONDComboBox parent)
            {
                this.parent = parent;
                IC();
                this.ShowInTaskbar = false;
            }
            private void IC()
            {
                this.ni = new CheckBoxItem();
                this.SuspendLayout();
 
                this.ni.Name = "ni";
 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.BackColor = System.Drawing.SystemColors.Menu;
                this.ClientSize = new System.Drawing.Size(47, 16);
                this.ControlBox = false;
                this.Controls.Add(this.ni);
                this.ForeColor = System.Drawing.SystemColors.ControlText;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
                this.MinimizeBox = false;
                this.Name = "parent";
                this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
                this.ResumeLayout(false);
 
            }
        }
        private Dropdown dropdown;
        public FONDComboBox()
            : base()
        {
            this.DrawMode = DrawMode.OwnerDrawVariable;
            this.dropdown = new Dropdown(this);
            this.DropDownHeight = 1;
        }
        protected override void OnDropDown(EventArgs e)
        {
            base.OnDropDown(e);
            if (!dropdown.Visible)
            {
                Rectangle rect = RectangleToScreen(this.ClientRectangle);
                dropdown.Location = new Point(rect.X, rect.Y + this.Size.Height);
                dropdown.Size = new Size(this.Size.Width, this.Size.Height);
                dropdown.Show(this);
            }
        }
        protected override void OnDropDownClosed(EventArgs e)
        {
            base.OnDropDownClosed(e);
            if (dropdown.Visible)
            {
                dropdown.Hide();
            }
        }
    }
}
стандартный дропдовн сжат в полоску размером в один пиксель открывается и сворачивается. НО! как теперь получить доступ к item(collection) CheckedListBox или вытащить их из комбобокса? ( приравнять item(collection) комбобокса и лист бокса не удалось, еще предложения?) )
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,098
23.07.2015, 01:53
A ComboBox with a CheckedListBox as a Dropdown
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
23.07.2015, 09:57  [ТС]
nedel, спасибо, конечно, но код именно этого варианта я и копаю, но там невозможно изменить Item такого комбобокса в настройках компонента в дизайнере формы...
0
15.10.2015, 16:26
 Комментарий модератора 
danyasworld, темы дублировать запрещено.
Предупреждение.
0
 Аватар для danyasworld
10 / 9 / 2
Регистрация: 12.04.2015
Сообщений: 238
Записей в блоге: 2
13.11.2015, 00:36  [ТС]
и снова здравствуйте. Почти через 4(!!!) месяца я возвращаюсь к этому вопросу. Плюнул я на наследование от combobox. Создал юзер контрол, на нем поставил текстбокс (рамки нет) и кнопку(тоже без рамки) , на юзер контроле сделал рамку. Похоже на комбо бокс, но немного отличается. Теперь такой вопрос - на "стандартном" при наведении мыши рамка подсвечивается синим, при фокусе - рамка становится толще и еще сильнее синеет. Так вот, возможно ли реализовать подобное на user control? Присваивание цвета Fore color-y не дало должного результата
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2015, 00:36
Помогаю со студенческими работами здесь

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

Взаимодействие пользовательского элемента управления и формы
Здравствуйте, формучане. Эксперементировал с пользоватльскими элементами и возникли два вопроса: 1. Создал пользовательский элемент на...

Ошибка при создании пользовательского элемента управления
Я создал пользовательский элемент управления "UserControl1", в него добавил label и назвал его txt. Вот его код. public partial...

Добавление пользовательского элемента управления из другого проекта
Добрый день. Нашел на форуме ссылочку на материал, в котором человек в видео рассказывает, как создавал пользовательский trackbar, скачал...

Проблема с запуском кода пользовательского элемента управления
Поясните, почему не запускается этот код ? Что надо ещё дописать, чтобы он работал ? То есть я именно этот код и вставляю в visual studio. ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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