Поле с выпадающим списком позволяет не только выбрать данные из списка, но и добавлять данные в список при вводе, а также поддерживает автозавершение.
За один раз может быть выбран один элемент.
За один раз может быть выбран один элемент.
добавление данных
добавление данных в список через редактируемое поле
добавление и удаление данных программно
сортировка
связывание элемента управления с базой данных
заполняем элемент данными из разных источников данных
программно раскрыть список
программно подогнать ширину элемента под текст
автозавершение
добавление данных в список через редактируемое поле
добавление и удаление данных программно
сортировка
связывание элемента управления с базой данных
заполняем элемент данными из разных источников данных
программно раскрыть список
программно подогнать ширину элемента под текст
автозавершение
добавление данных
Добавить данные можно с помощью диалогового окна или конструктора формы.
Выберите свойство Items и нажмите на кнопку или раскройте треугольник в элементе и нажмите на Edit Items, появится диалоговое окно, где можно добавить данные.
Выберите свойство Items и нажмите на кнопку или раскройте треугольник в элементе и нажмите на Edit Items, появится диалоговое окно, где можно добавить данные.

Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0034 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0034 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
}
}

добавление данных в список через редактируемое поле
В данном примере, пользователь вводит данные в редактируемо поле. При нажатии на кнопку Добавить данные, в список будет добавлена запись.
При нажатии на кнопку ОК, выбранные данные из списка будут отображены в тестовом поле.
Разумеется, эти данные, которые будут добавлены, при закрытии приложения будут уничтожены.
При нажатии на кнопку ОК, выбранные данные из списка будут отображены в тестовом поле.
Разумеется, эти данные, которые будут добавлены, при закрытии приложения будут уничтожены.
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0035 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
//кнопка Добавить данные
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
if
(comboBox1.Text !=
string
.Empty) {
-
comboBox1.Items.Add(comboBox1.Text);
-
}
-
}
-
//кнопка OK
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0035 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
//кнопка Добавить данные
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
if
(comboBox1.Text !=
string
.Empty) {
-
comboBox1.Items.Add(comboBox1.Text);
-
}
-
}
-
//кнопка OK
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
}
}

добавление и удаление данных программно
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0036 {
-
public
partial
class
Form1 : Form {
-
//промежуточное свойство, которому будут передаваться данные из дочерней формы
-
public
ComboBox Between {
-
set
{
-
comboBox1.Items.Add(value);
-
}
-
get
{
-
return
comboBox1;
-
}
-
}
-
public
Form1() {
-
InitializeComponent();
-
}
-
//кнопка Добавить
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
//очищаем редактируемое поле выпадающего списка
-
comboBox1.Text =
string
.Empty;
-
//открываем дочернюю форму и передаем ей ссылку
-
new
Form2().ShowDialog(
this
);
-
}
-
//кнопка Удалить
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
comboBox1.Items.Remove(comboBox1.SelectedItem);
-
//очищаем редактируемое поле выпадающего списка
-
comboBox1.Text =
string
.Empty;
-
}
-
//кнопка Удалить все
-
private
void
button5_Click(
object
sender, EventArgs e) {
-
comboBox1.Items.Clear();
-
//очищаем редактируемое поле выпадающего списка
-
comboBox1.Text =
string
.Empty;
-
}
-
//кнопка OK
-
private
void
button3_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
//кнопка Clear
-
private
void
button4_Click(
object
sender, EventArgs e) {
-
textBox1.Clear();
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0036 {
-
public
partial
class
Form1 : Form {
-
//промежуточное свойство, которому будут передаваться данные из дочерней формы
-
public
ComboBox Between {
-
set
{
-
comboBox1.Items.Add(value);
-
}
-
get
{
-
return
comboBox1;
-
}
-
}
-
public
Form1() {
-
InitializeComponent();
-
}
-
//кнопка Добавить
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
//очищаем редактируемое поле выпадающего списка
-
comboBox1.Text =
string
.Empty;
-
//открываем дочернюю форму и передаем ей ссылку
-
new
Form2().ShowDialog(
this
);
-
}
-
//кнопка Удалить
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
comboBox1.Items.Remove(comboBox1.SelectedItem);
-
//очищаем редактируемое поле выпадающего списка
-
comboBox1.Text =
string
.Empty;
-
}
-
//кнопка Удалить все
-
private
void
button5_Click(
object
sender, EventArgs e) {
-
comboBox1.Items.Clear();
-
//очищаем редактируемое поле выпадающего списка
-
comboBox1.Text =
string
.Empty;
-
}
-
//кнопка OK
-
private
void
button3_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
//кнопка Clear
-
private
void
button4_Click(
object
sender, EventArgs e) {
-
textBox1.Clear();
-
}
-
}
}
Form2.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0036 {
-
public
partial
class
Form2 : Form {
-
public
Form2() {
-
InitializeComponent();
-
}
-
//кнопка OK
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
/*создаем переменную родительской формы (Form1)и присваиваем
-
ей значение через ссылку на родительскую форму*/
-
Form1 F1 = (Form1)
this
.Owner;
-
//присваиваем значение свойству в родительской форме
-
F1.Between.Items.Add(textBox1.Text);
-
//очищаем поле ввода
-
textBox1.Clear();
-
//передаем фокус
-
textBox1.Select();
-
}
-
//кнопка Close
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
this
.Close();
-
}
-
private
void
textBox1_KeyPress(
object
sender, KeyPressEventArgs e) {
-
if
(e.KeyChar == (
char
)Keys.Enter) {
-
//после нажатия клавиши Enter активируем кнопку OK
-
button1.Select();
-
//перехватываем нажатие клавиши, удаляем системный звук
-
e.Handled =
true
;
-
}
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0036 {
-
public
partial
class
Form2 : Form {
-
public
Form2() {
-
InitializeComponent();
-
}
-
//кнопка OK
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
/*создаем переменную родительской формы (Form1)и присваиваем
-
ей значение через ссылку на родительскую форму*/
-
Form1 F1 = (Form1)
this
.Owner;
-
//присваиваем значение свойству в родительской форме
-
F1.Between.Items.Add(textBox1.Text);
-
//очищаем поле ввода
-
textBox1.Clear();
-
//передаем фокус
-
textBox1.Select();
-
}
-
//кнопка Close
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
this
.Close();
-
}
-
private
void
textBox1_KeyPress(
object
sender, KeyPressEventArgs e) {
-
if
(e.KeyChar == (
char
)Keys.Enter) {
-
//после нажатия клавиши Enter активируем кнопку OK
-
button1.Select();
-
//перехватываем нажатие клавиши, удаляем системный звук
-
e.Handled =
true
;
-
}
-
}
-
}
}

сортировка
Если задать свойству Sorted значение true, данные будут отсортированы, а вот после того, как данные будут отсортированы, задать свойству Sorted значение false, то данные первоначальный несортированный вид, ПОЧЕМУ-ТО не принимают.
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0037 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
//флажок
-
private
void
checkBox1_CheckedChanged(
object
sender, EventArgs e) {
-
comboBox1.Sorted =
true
;
-
}
-
//кнопка ОК
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
//кнопка Clear
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox1.Clear();
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0037 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
//флажок
-
private
void
checkBox1_CheckedChanged(
object
sender, EventArgs e) {
-
comboBox1.Sorted =
true
;
-
}
-
//кнопка ОК
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
}
-
//кнопка Clear
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox1.Clear();
-
}
-
}
}

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

Выберите флажок Use Data Bound Items.

Раскройте поле с выпадающим списком Data Source.

Добавьте источник данных. Кликните на Add Project Data Source. Выберите Database.

Выберите DataSet.

Выберите соединение.

Запомните имя соединения, если хотите, можете его изменить.

Выберите таблицы.

После того, как Visual Studio успешно создало соединение с базой данных, опять раскройте поле с выпадающим спискомData Source. Раскройте Other Data Sources. Раскройте starDataSet и выберите таблицу Colors.

Раскройте поле с выпадающим списком Display Member и выберите столбец Color. Данные этого столбца будут отображаться в списке. Данные этого столбца можно вывести с помощью свойства SelectedItem.

Если Вам нужно, то раскройте поле с выпадающим списком Value Member и выберите столбец id. Данные этого столбца можно вывести с помощью свойства SelectedValue.

Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0038 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
Form1_Load(
object
sender, EventArgs e) {
-
// TODO: This line of code loads data into the 'starDataSet.Book' table. You can move, or remove it, as needed.
-
this
.bookTableAdapter.Fill(
this
.starDataSet.Book);
-
// TODO: This line of code loads data into the 'starDataSet.Colors' table. You can move, or remove it, as needed.
-
this
.colorsTableAdapter.Fill(
this
.starDataSet.Colors);
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
}
-
//кнопка OK
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
//ВНИМАНИЕ!!! при работе с базой данных, использование
-
//SelectedItem приводит к выводу не выбранного элемента, а
-
//System.Data.DataRowView
-
textBox1.Text +=
" "
+ comboBox1.SelectedItem +
"\r\n"
;
-
textBox2.Text +=
" "
+ comboBox1.SelectedValue +
"\r\n"
;
-
textBox3.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
}
-
//кнопка Clear
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox1.Clear();
-
textBox2.Clear();
-
textBox3.Clear();
-
}
-
//кнопка OK
-
private
void
button3_Click(
object
sender, EventArgs e) {
-
//ВНИМАНИЕ!!! при работе с базой данных, использование
-
//SelectedItem приводит к выводу не выбранного элемента, а
-
//System.Data.DataRowView
-
textBox4.Text +=
" "
+ comboBox2.SelectedItem +
"\r\n"
;
-
textBox5.Text +=
" "
+ comboBox2.SelectedValue +
"\r\n"
;
-
textBox6.Text +=
" "
+ comboBox2.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
}
-
//кнопка Clear
-
private
void
button4_Click(
object
sender, EventArgs e) {
-
textBox4.Clear();
-
textBox5.Clear();
-
textBox6.Clear();
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0038 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
Form1_Load(
object
sender, EventArgs e) {
-
// TODO: This line of code loads data into the 'starDataSet.Book' table. You can move, or remove it, as needed.
-
this
.bookTableAdapter.Fill(
this
.starDataSet.Book);
-
// TODO: This line of code loads data into the 'starDataSet.Colors' table. You can move, or remove it, as needed.
-
this
.colorsTableAdapter.Fill(
this
.starDataSet.Colors);
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
}
-
//кнопка OK
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
//ВНИМАНИЕ!!! при работе с базой данных, использование
-
//SelectedItem приводит к выводу не выбранного элемента, а
-
//System.Data.DataRowView
-
textBox1.Text +=
" "
+ comboBox1.SelectedItem +
"\r\n"
;
-
textBox2.Text +=
" "
+ comboBox1.SelectedValue +
"\r\n"
;
-
textBox3.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
}
-
//кнопка Clear
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox1.Clear();
-
textBox2.Clear();
-
textBox3.Clear();
-
}
-
//кнопка OK
-
private
void
button3_Click(
object
sender, EventArgs e) {
-
//ВНИМАНИЕ!!! при работе с базой данных, использование
-
//SelectedItem приводит к выводу не выбранного элемента, а
-
//System.Data.DataRowView
-
textBox4.Text +=
" "
+ comboBox2.SelectedItem +
"\r\n"
;
-
textBox5.Text +=
" "
+ comboBox2.SelectedValue +
"\r\n"
;
-
textBox6.Text +=
" "
+ comboBox2.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
}
-
//кнопка Clear
-
private
void
button4_Click(
object
sender, EventArgs e) {
-
textBox4.Clear();
-
textBox5.Clear();
-
textBox6.Clear();
-
}
-
}
}

заполняем элемент данными из разных источников данных
В данном примере, наш элемент будет заполнен данными из: коллекции, текстового документа, XML файла, базы данных.
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
//подключить пространство имен
using
System.IO;
//подключить пространство имен для кодировки
using
System.Text;
//подключить пространство имен
using
System.Xml;
//подключить пространство имен
using
System.Data.SqlClient;
namespace
_0039 {
-
public
partial
class
Form1 : Form {
-
List<
string
> Array =
new
List<
string
> {
-
"red"
,
-
"green"
,
-
"blue"
-
};
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
Form1_Load(
object
sender, EventArgs e) {
-
//заполняем данными из коллекции
-
foreach
(
string
i
in
Array) {
-
comboBox1.Items.Add(i);
-
}
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
//заполняем данными из текстового файла
-
//путь
-
string
pathTxt =
@"a.txt"
;
-
//если файл существует
-
if
(File.Exists(pathTxt)) {
-
//создаем байтовый поток и привязываем его к файлу
-
//в конструкторе указываем: путь кодировка
-
using
(StreamReader sr =
new
StreamReader(pathTxt, Encoding.UTF8)) {
-
while
(!sr.EndOfStream) {
-
comboBox2.Items.Add(sr.ReadLine());
-
}
-
}
-
}
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
//заполняем данными из XML файла
-
//путь
-
string
pathXml =
@"a.xml"
;
-
//если файл существует
-
if
(File.Exists(pathXml)) {
-
XmlDocument XmlDoc =
new
XmlDocument();
-
//загружаем XML документ
-
XmlDoc.Load(pathXml);
-
//получаем все дочерние элементы корневого элемента
-
//xmlDoc.DocumentElement - корневой элемент
-
foreach
(XmlNode i
in
XmlDoc.DocumentElement.ChildNodes) {
-
foreach
(XmlNode j
in
i.ChildNodes) {
-
comboBox3.Items.Add(j.InnerText);
-
}
-
}
-
}
-
//очищаем редактируемое поле
-
comboBox3.Text =
string
.Empty;
-
//заполняем данными из базы данных
-
//строка подключения к источнику данных
-
string
connectSting =
@"Data Source=.\MSSQLSERVER2012;Initial Catalog=star;Integrated Security=True"
;
-
//sql запрос
-
string
sql =
"select Color from Colors"
;
-
//создаем подключение
-
using
(SqlConnection myConnection =
new
SqlConnection(connectSting)) {
-
//применяем запрос к источнику данных
-
SqlCommand myCommand =
new
SqlCommand(sql, myConnection);
-
try
{
-
//открываем соединение
-
myConnection.Open();
-
//создаем объект для извлечения данных
-
SqlDataReader myReader = myCommand.ExecuteReader();
-
//извлекаем данные
-
while
(myReader.Read()) {
-
comboBox4.Items.Add(myReader[0]);
-
}
-
}
-
catch
(Exception ex) {
-
MessageBox.Show(
" Соединение не установлено!"
);
-
}
-
}
-
//очищаем редактируемое поле
-
comboBox4.Text =
string
.Empty;
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
//подключить пространство имен
using
System.IO;
//подключить пространство имен для кодировки
using
System.Text;
//подключить пространство имен
using
System.Xml;
//подключить пространство имен
using
System.Data.SqlClient;
namespace
_0039 {
-
public
partial
class
Form1 : Form {
-
List<
string
> Array =
new
List<
string
> {
-
"red"
,
-
"green"
,
-
"blue"
-
};
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
Form1_Load(
object
sender, EventArgs e) {
-
//заполняем данными из коллекции
-
foreach
(
string
i
in
Array) {
-
comboBox1.Items.Add(i);
-
}
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
//заполняем данными из текстового файла
-
//путь
-
string
pathTxt =
@"a.txt"
;
-
//если файл существует
-
if
(File.Exists(pathTxt)) {
-
//создаем байтовый поток и привязываем его к файлу
-
//в конструкторе указываем: путь кодировка
-
using
(StreamReader sr =
new
StreamReader(pathTxt, Encoding.UTF8)) {
-
while
(!sr.EndOfStream) {
-
comboBox2.Items.Add(sr.ReadLine());
-
}
-
}
-
}
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
//заполняем данными из XML файла
-
//путь
-
string
pathXml =
@"a.xml"
;
-
//если файл существует
-
if
(File.Exists(pathXml)) {
-
XmlDocument XmlDoc =
new
XmlDocument();
-
//загружаем XML документ
-
XmlDoc.Load(pathXml);
-
//получаем все дочерние элементы корневого элемента
-
//xmlDoc.DocumentElement - корневой элемент
-
foreach
(XmlNode i
in
XmlDoc.DocumentElement.ChildNodes) {
-
foreach
(XmlNode j
in
i.ChildNodes) {
-
comboBox3.Items.Add(j.InnerText);
-
}
-
}
-
}
-
//очищаем редактируемое поле
-
comboBox3.Text =
string
.Empty;
-
//заполняем данными из базы данных
-
//строка подключения к источнику данных
-
string
connectSting =
@"Data Source=.\MSSQLSERVER2012;Initial Catalog=star;Integrated Security=True"
;
-
//sql запрос
-
string
sql =
"select Color from Colors"
;
-
//создаем подключение
-
using
(SqlConnection myConnection =
new
SqlConnection(connectSting)) {
-
//применяем запрос к источнику данных
-
SqlCommand myCommand =
new
SqlCommand(sql, myConnection);
-
try
{
-
//открываем соединение
-
myConnection.Open();
-
//создаем объект для извлечения данных
-
SqlDataReader myReader = myCommand.ExecuteReader();
-
//извлекаем данные
-
while
(myReader.Read()) {
-
comboBox4.Items.Add(myReader[0]);
-
}
-
}
-
catch
(Exception ex) {
-
MessageBox.Show(
" Соединение не установлено!"
);
-
}
-
}
-
//очищаем редактируемое поле
-
comboBox4.Text =
string
.Empty;
-
}
-
}
}

программно раскрыть список
В этом примере, пользователь кликает на кнопку ОК и список раскрывается. Для этого нужно свойству DroppedDown установить значение true.
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
WindowsFormsApplication1 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
comboBox1.DroppedDown =
true
;
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
WindowsFormsApplication1 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
comboBox1.DroppedDown =
true
;
-
}
-
}
}

программно подогнать ширину элемента под текст
Запускается приложение. Поле с выпадающим списком имеет стандартную ширину. После нажатия на кнопку ОК, ширина элемента изменяется и подгоняется под ширину самого длинного элемента.
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
WindowsFormsApplication1 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
Graphics G = comboBox1.CreateGraphics();
-
float
maxWidth = 0;
-
foreach
(
object
obj
in
comboBox1.Items) {
-
float
w = G.MeasureString(obj.ToString(), comboBox1.Font).Width;
-
if
(w > maxWidth) {
-
maxWidth = w;
-
}
-
}
-
G.Dispose();
-
comboBox1.Width = (
int
)maxWidth;
-
comboBox1.DroppedDown =
true
;
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
WindowsFormsApplication1 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
Graphics G = comboBox1.CreateGraphics();
-
float
maxWidth = 0;
-
foreach
(
object
obj
in
comboBox1.Items) {
-
float
w = G.MeasureString(obj.ToString(), comboBox1.Font).Width;
-
if
(w > maxWidth) {
-
maxWidth = w;
-
}
-
}
-
G.Dispose();
-
comboBox1.Width = (
int
)maxWidth;
-
comboBox1.DroppedDown =
true
;
-
}
-
}
}


автозавершение
Выберите стиль автозавершения в свойстве AutoCompieteMode:
None — по умолчанию, автозавершение отключено
Suggest — используются значения из раскрывающегося списка
Append — список не раскрывается, значения дополняются при вводе
SuggestAppend — комбинация Suggest и Append
None — по умолчанию, автозавершение отключено
Suggest — используются значения из раскрывающегося списка
Append — список не раскрывается, значения дополняются при вводе
SuggestAppend — комбинация Suggest и Append

В свойстве AutoCompleteSource выберите источник данных, для автозавершения CustomSource.

В свойстве AutoCompleteCustomSource раскройте список коллекции и заполните значениями, которые будут отображаться при автозавершении.

Второе поле с выпадающим списком, мы заполним ключевыми словами C# из текстового файла.
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
//подключить пространство имен
using
System.IO;
//подключить пространство имен для кодировки
using
System.Text;
namespace
_0040 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
}
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox2.Text +=
" "
+ comboBox2.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
}
-
private
void
Form1_Load(
object
sender, EventArgs e) {
-
var source =
new
AutoCompleteStringCollection();
-
//заполняем данными из текстового файла
-
//путь
-
string
pathTxt =
@"a.txt"
;
-
//если файл существует
-
if
(File.Exists(pathTxt)) {
-
//создаем байтовый поток и привязываем его к файлу
-
//в конструкторе указываем: путь кодировка
-
using
(StreamReader sr =
new
StreamReader(pathTxt, Encoding.UTF8)) {
-
while
(!sr.EndOfStream) {
-
source.Add(sr.ReadLine());
-
}
-
}
-
}
-
comboBox2.AutoCompleteCustomSource = source;
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
//подключить пространство имен
using
System.IO;
//подключить пространство имен для кодировки
using
System.Text;
namespace
_0040 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
textBox1.Text +=
" "
+ comboBox1.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox1.Text =
string
.Empty;
-
}
-
private
void
button2_Click(
object
sender, EventArgs e) {
-
textBox2.Text +=
" "
+ comboBox2.Text +
"\r\n"
;
-
//очищаем редактируемое поле
-
comboBox2.Text =
string
.Empty;
-
}
-
private
void
Form1_Load(
object
sender, EventArgs e) {
-
var source =
new
AutoCompleteStringCollection();
-
//заполняем данными из текстового файла
-
//путь
-
string
pathTxt =
@"a.txt"
;
-
//если файл существует
-
if
(File.Exists(pathTxt)) {
-
//создаем байтовый поток и привязываем его к файлу
-
//в конструкторе указываем: путь кодировка
-
using
(StreamReader sr =
new
StreamReader(pathTxt, Encoding.UTF8)) {
-
while
(!sr.EndOfStream) {
-
source.Add(sr.ReadLine());
-
}
-
}
-
}
-
comboBox2.AutoCompleteCustomSource = source;
-
}
-
}
}
