Как строится поле с раскрывающимся списком combobox
Перейти к содержимому

Как строится поле с раскрывающимся списком combobox

ComboBox — поле с выпадающим списком

Поле с выпадающим списком позволяет не только выбрать данные из списка, но и добавлять данные в список при вводе, а также поддерживает автозавершение.
За один раз может быть выбран один элемент.

добавление данных

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

Копировать

  • 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» ;
  • >
  • >
  • >

Скачать исходник

добавление данных в список через редактируемое поле

В данном примере, пользователь вводит данные в редактируемо поле. При нажатии на кнопку Добавить данные, в список будет добавлена запись.
При нажатии на кнопку ОК, выбранные данные из списка будут отображены в тестовом поле.
Разумеется, эти данные, которые будут добавлены, при закрытии приложения будут уничтожены.

Копировать

  • 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» ;
  • >
  • >
  • >

Скачать исходник

добавление и удаление данных программно

Копировать

  • 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();
  • >
  • >
  • >

Копировать

  • 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 , то данные первоначальный несортированный вид, ПОЧЕМУ-ТО не принимают.

Копировать

  • 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.

Копировать

  • 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 файла, базы данных.

Копировать

  • 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;
  • >
  • >
  • >

Как строится поле с раскрывающимся списком combobox

Argument ‘Topic id’ is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

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

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Как строится поле с раскрывающимся списком combobox

Как сделать переход по записям формы с помощью поля со списком в Access? Есть форма, в ней отображаются записи таблицы с полями id, name. Нужно чтобы можно было перемещаться по записям формы путем выбора из выпадающего списка одного из значений поля name.

Вот я создаю форму, на ней оказывается два поля id и name. Далее я преобразовываю name в выпадающий список, указываю в качестве data запрос select name from table. Все отображается в списке, можно выбирать. Но не происходит смена записи. Иду другим путем — кидаю на форму новый комбо-бокс, там в мастере указываю что значение его будет использовано для перехода по записям формы. Все ввожу как надо, открываю форму, комбобокс содержит нужные значения поля name, но блин, не разрешает себя изменять, потому что автоматом к нему добавляется поле id (скрытое), а т.к. оно ключевое, аксесс не разрешает его изменять.

Сообщ. #2 , 03.04.07, 08:17

Рейтинг (т): 352
В событие «после обновления» ,поля со списком .
Private Sub Klient_AfterUpdate()
Dim strcrit As String
strcrit = «[NMK] = ‘» & Me![Klient] & «‘»
If Nz(Me![Klient], «») <> «» Then
Me.RecordsetClone.FindFirst strcrit
Me.Bookmark = Me.RecordsetClone.Bookmark
Сообщ. #3 , 03.04.07, 14:16
Рейтинг (т): 42

Bas, не получилось — результат тот же. А разве с помощью гуи-средств нельзя это сделать? Ведь все сделано в акцессе так чтобы и секретарша могла базы делать, все автоматом добавляется, все само понимает куда чего дописать.

Добавлено 03.04.07, 14:22
Кроме того, когда кидаешь на форму комбобокс, появляется мастер, и если выбрать вариант поиск записи в форме на основе значения, которое содержит поле со списком он же сразу создается с такой процедурой как ты указал

Private Sub ПолеСоСписком11_AfterUpdate()
‘ Поиск записи, соответствующей этому элементу управления.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst «[Dish_Id] = » & Str(Nz(Me![ПолеСоСписком11], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Добавлено 03.04.07, 14:27
Кроме того, после попытки добавления на форму комбобокса, базу начинает страшно плющить — постоянно по десять раз при каждом действии вызывающем сохранение формы появляется сообщение «Введенное в поле своства или макросва формы содержит ошибки или указывает на несуществующую форму«

Добавлено 03.04.07, 14:30
В общем я понял что это не мой тупизм, а какие то ошибки с СУБД. Потому что в справке все указано так, как я и делаю, только ничего не выходит, а появляются ошибки которые я указал выше.

Поиск записи по выбранному в списке значению
Показать все
Скрыть все
В форме можно создать список Список. Элемент управления, позволяющий выполнять выбор из списка значений. Элемент «список» состоит из списка и необязательной надписи.) или поле со списком (Поле со списком. Элемент управления в форме, являющийся комбинацией поля и раскрывающегося списка. Пользователь может ввести значение в поле или раскрыть список и выбрать значение из списка.) для поиска записи по значению из списка.

Откройте форму в режиме конструктора (Режим конструктора. Окно, в котором отображается макет следующих объектов базы данных: таблицы, запросы, формы, отчеты, макросы и страницы доступа к данным. В режиме конструктора пользователь создает новые объекты базы данных или изменяет макеты существующих.).
Нажмите кнопку Мастера на панели элементов (Панель элементов. Набор инструментов для создания элементов управления в форме, отчете или на странице доступа к данным в режиме конструктора. Набор инструментов для страницы доступа к данным в режиме конструктора отличается от набора инструментов для формы и отчета в режиме конструктора.), если эта кнопка еще не нажата.
На панели элементов нажмите кнопку Список или Поле со списком .
Щелкните в форме место, в которое нужно поместить список или поле со списком.
В первом диалоговом окне мастера выберите параметр для поиска записи по значению, выбранному в списке или поле со списком.
Выполняйте инструкции, выводящиеся в диалоговых окна мастера. В последнем диалоговом окне нажмите кнопку Готово для вывода списка или поля со списком в режиме конструктора.
Для просмотра процедуры обработки события (Процедура обработки события. Процедура, автоматически выполняемая в ответ на событие, возникающее в результате действий пользователя, выполнения программы или генерируемое системой.), обеспечивающей работу списка или поля со списком, откройте окно свойств элемента управления и нажмите кнопку Построить рядом с ячейкой свойства После обновления (AfterUpdate).

Комбобокс ComboBox

Используйте комбобокс, если значений в справочнике слишком много, чтобы искать их глазами. Если значений не больше 25, можно использовать раскрывающийся список или группу радиокнопок.

Комбобокс может работать в двух режимах — обычном и в режиме автокомплита. Основное их отличие в том, что в режиме автокомплита список вариантов появляется только после ввода первого символа или изменении уже введенного значения.

Виды полей

Комбобокс со стрелкой

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

Используйте этот режим, если вы точно знаете, что справочник не будет содержать больше 50 строк, либо уверены, что пользователю удобней выбирать значение, просматривая список.

Комбобокс без стрелки

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

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

Описание работы

Комбобокс со стрелкой

Состояние по умолчанию

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

Фокус по пустому полю

При получении фокуса плейсхолдер становится чуть светлее, открывается список вариантов.

Когда курсор находится над списком, скроллинг страницы блокируется.

Начало ввода

При вводе первого символа список фильтруется. Первый пункт в списке подсвечивается:

Выбор пункта из списка

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

При выборе значения мышью или клавишей Enter список закрывается, фокус остается в поле. Список будет показан снова при следующем клике в поле или изменении значения.

Фокус по заполненному полю

При получении фокуса введенное значение выделяется, раскрывается список, прокрученный до выбранного значения:

Нет совпадений

Если в справочнике не найдено совпадений с введенным значением, комбобокс показывает соответствующий текст. Важно показать подсказку, чтобы пользователь понял, что поле обработало его запрос.

В этом состоянии, при нажатии на клавиатуре Enter ничего не происходит, фокус остается в поле.

Потеря фокуса без выбора пункта из списка

Если введенное значение совпадает со значением из справочника, при потере фокуса это значение выбирается:

Если ничего не найдено или список не успел загрузиться, покажите ошибку:

Комбобокс без стрелки

В целом комбобокс без стрелки работает так же как со стрелкой с некоторыми исключениями.

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

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

При клике или получению фокуса плейсхолдер в поле становится чуть светлее.

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

Оптимальное количество строк в списке — 5. Если после фильтрации список может быть очень большим, это число можно увеличивать до 20.

При получении фокуса полем с уже введенным значением это значение выделяется:

Поиск запускается и список появляется только после изменения значения.

Варианты использования

Составной список

Если у каждой записи справочника есть несколько параметров, показывайте в списке самые важные. По ним должен работать поиск.

Основное значение — короткое, емкое и уникальное.

Начало ввода

Выбор сделан

После выбора показывайте дополнительное значение в поле серым цветом. Если оно полностью не входит, показывайте при наведении хинт:

Фокус по заполненному полю

При получении фокуса тултип должен исчезнуть.

Поиск по вхождению

Если строка состоит из нескольких слов, то поиск совпадения может работать не только по началу строки, но и по началу каждого слова. Если слово начинается с кавычек, они не должны учитываться при поиске совпадения.

Чтобы понять, стоит ли использовать поиск по вхождению, задайте себе вопрос: точно ли пользователь знает начало строки? Если нет — используйте поиск по вхождению.

Подсвечивайте совпадения жирным начертанием Lab Grotesque K Bold .

Избранные варианты

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

Фокус по пустому полю

Эти варианты показываются над основным списком, отделяются чертой.

Если это комбобокс в режиме автокомплита сразу по фокусу показывайте список из 3-5 вариантов с заголовком. Заголовок нужен для того, чтобы было понятно, что это не полный список:

Указание значения не из справочника

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

Автоматическое добавление значения в справочник

Если пользователь сам наполняет справочник, то при вводе нового значения не показывайте текст «Нет совпадений». Добавляйте значение в список и при следующем заполнении предлагайте его наравне с остальными.

Нет соответствий

Фокус потерян без выбора из справочника

Добавление карточки в справочник

Если пользователь сам наполняет справочник, а каждая запись имеет дополнительный набор полей, показывайте пункт «Добавить» внизу списка, чтобы пользователь мог быстро перейти к добавлению новой карточки:

По клику на него может открываться модальное окно, сайдпейдж, или отдельная страница.

Прежде чем добавлять новую карточку, пользователь, скорее всего, захочет проверить, что такой ещё нет в списке. Он начнёт набирать текст в комбобоксе и если не будет совпадений — последний пункт «+ Добавить» подсветится автоматически.

Ввод первого символа

Дублируйте введенные символы в пункт «Добавить».

Нет совпадений

В открывающемся модальном окне добавления карточки поле «Название» должно быть заполнено введённым пользователем в комбобокс текстом.

Потеря фокуса

Если в предыдущем состоянии поле теряет фокус, срабатывает валидация: поле красится в красный, показывается сообщение об ошибке.

Спиннер

Если обработка запроса для построения списка занимает дольше 0,3 секунды, показываем спиннер минимум 1 секунду. Если список уже открыт, и при получении ответа возникла задержка — показываем спиннер в поле справа, список до обновления остается в прежнем состоянии.

Нажатие Enter при пустом/не загрузившемся списке ни к чему не приводит, фокус остается в этом же поле.

Лоадер специальный, серый, не привлекающий слишком много внимания:

Если происходит ошибка сервера, показываем сообщение:

Размер, расположение

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

Список с подсказками всегда открывается вниз. Оптимальная высота списка 300-450 px. Чтобы список не выходил за границу страницы, проследите чтобы под ним было достаточное количество места.

Фокус и работа с клавиатурой

При клике по полю и при переходе табом поле выглядит одинаково: появляется чёрная рамка, которая сохраняется до потери фокуса.

Работа с клавиатурой

Переход к следующему контролу.

Если открыт список вариантов из нескольких значений — переключение между строками. Переход между строками не цикличен — с последней строки фокус не переходит на первую, как и с первой на последнюю.

Если список cкрыт, содержит только один вариант, сообщение об ошибке или о том, что нет совпадений — перенос текстового курсора в начало или конец строки (стандартное поведение для текстового поля).

Перемещение текстового курсора в поле ввода.

Скрывает список, фокус не исчезает. Список появится вновь при вводе или удалении символа.

Выбор подсвеченного значения из списка и переход к следующему полю в форме. Если список пуст/не успел догрузиться, нажатие Enter ни к чему не приводит.

Валидация

Поле с ошибкой подсвечивается красной рамкой.

Примеры ошибок и предупреждений в комбобоксе описаны в пунктах: 28, 51, 60.

О поведении полей ввода с ошибками читайте в гайде по валидации.

Дизайн

Внешне поле ничем не отличается от обычного поля ввода. Если поле с выбором, в правой части есть стрелочка&nbsp &nbsp— символ из библиотеки интерфейсных иконок.

Название поля выравнивается по базовой линии текста в поле:

Стиль списка подсказок совпадает с раскрывающимся списком.

Ширина списка должна быть не меньше ширины поля. Красиво, когда список шире поля ввода на 30−40 px.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *