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

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

  • автор:

Как строится поле с раскрывающимся списком 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

Как правило поле со списком открывается в подчиненной таблице (на стороне связи М), а в списке отображаются данные из общего атрибута из основной таблицы находящейся на стороне связи типа 1.

Выбираем правой кнопкой поле, которое мы сделаем полем со списком.

Открывается список, в котором выбираем:

Преобразовать элемент вÆПоле со списком Открываем свойства этого поля.

В открывшемся меню выбираем Источник строк, куда вводим оператор

Если, например, мы хотим, чтобы в поле Deptid таблицы Employee открывался список номеров отделов таблицы Department, то оператор будет:

Select deptid from department

В некоторых случаях можно добавить и условие отбора:

В гостинице показать только свободные номера:

Select roomNumber from roomtable where room = free Оператор отберет те строки, которые появятся в ComboBox

Специальные объекты в форме

Формы могут также содержать графику, гиперссылки на Web-страницы и документы, объекты OLE (объекты, связанные с другими приложениями Windows) и другие специальные объекты.

Позже вы сможете выполнить несколько упражнений по созданию учебных форм и их элегантному оформлению в окне конструктора форм (Form Design).

Предполагается существование в таблице поля со свойствами объекта

Чтобы ввести в таблицу изображение необходимо щелкнуть правой кнопкой на этом поле, в раскрывающемся списке выбрать «Вставить объект», откроется окно:

Выби раем ÆСоздать из файла ÆОбзор и выбираем фотографию Флажок Связь позволяет либо вставить объект в таблицу базы данных,

либо установить с ним связь. При этом объект останется вне базы данных и может изменяться независимо.

Добавление в форму дополнительных элементов

Для вставки дополнительных элементов существует панель элементов в Конструкторе форм:

В ней можно выбрать элемент для вставки. Это может быть поле с текстом(TextBox), переключатель, кнопка. Вставляем кнопку:

Для этого в режиме конструктора открываем форму. В открытом окне выбираем, какая операция при нажатии кнопки будет выполняться. Например, приложение. После нажатия кнопки Далее:

Выбираем рисунок и название кнопки:

Добавление на форму дополнительных элементов позволяет создать различные операции.

Варианты заданий

1. Создайте формы для всех таблиц вариантов первой лабораторной работы. В формах для таблиц на стороне связи М создать поля типа ComboBox. База данных состоит из 4 таблиц:

Кодификатор особых случаев эксплуатации (Код особого случая, Название особого случая), Самолет (Номер_борта, Тип_ВС, модификация, год_выпуска, Владелец, Место базирования, Изображение самолета), Инцидент (Номер_борта, Код_особого_случая, Дата_инцидента, Код_оператора, Дата_ввода_записи), Операторы (Фамилия, Код_оператора, Должность).

Определите индексы таблиц, соедините таблицы в соответствии с индексами. Введите 12-14 записей в таблицы.

2. Разработать проект базы данных: База данных состоит из 4 таблиц: Ремонтный завод (Номер_завода, Название, Адрес), Ремонт

(Номер_завода, намер_борта, номер_ремонта, Дата_начала_ремонта, Дата_окончания, Код_оператора, Дата_ввода_записи), Самолет (Номер_борта, Тип_вс, модификация, год_выпуска, Владелец, Место базирования, Изображение самолета), Операторы (Фамилия, Код_оператора, Должность).

Определите индексы таблиц, соедините таблицы в соответствии с индексами. Введите 12-14 записей в таблицы.

3. Разработать проект базы данных: База данных состоит из 4 таблиц: Отдел_универмага (Номер_отдела, Название, Руководитель_отдела, Этаж),

Продавец (Фамилия, Имя, Номер_продавца), Номер_отдела, Стаж), Товар

(Номер_товара, Наименование, Цена, Тип, Изображение товара), Продажи (Номер_товара, Номер_продавца, Дата_продажи).

Определите индексы таблиц, соедините таблицы в соответствии с индексами. Введите 12-14 записей в таблицы.

4. Разработать проект базы данных: База данных состоит из 4 таблиц:

Портрет_заведующего), Преподаватель (Номер_преподавателя, Фамилия, Портрет преподавателя, Номер_кафедры), Дисциплины (Номер_дисциплины, Название, Семестр, Количество_часов), Расписание (Номер_преподавателя, Номер_дисциплины, Аудитория, Время, Группа)

Определите индексы таблиц, соедините таблицы в соответствии с индексами. Введите 12-14 записей в таблицы.

5. Разработать проект базы данных: База данных состоит из 4 таблиц: Работник Автосервиса (Номер_ремонтника, Фамилия, Специальность),

Автомобиль на ремонте (Номер_авто, Вид_ремонта, Дата_приема_на_ремонт, Дата_окончания, Код_запчасти, Стоимость_работы, Код_оператора), Запчасти (Код_запчасти, Стоимость_запчасти, Название, Изображение_запчасти), Оператор (Код_оператора, Фамилия_оператора)

Определите индексы таблиц, соедините таблицы в соответствии с индексами. Введите 12-14 записей в таблицы.

6. Разработать проект базы данных: База данных состоит из 4 таблиц: Кодификатор Зон контроля (Код_элемента, Название_элемента,

Обозначение), Самолет (Номер_борта, Тип_вс, Модификация, Год_выпуска, Владелец), Дефекты (Код_элемента, Название элемента, Номер_борта, Изображение дефекта, Дата_осмотра, Код_оператора), Оператор (Код_оператора, Фамилия_оператора).

Определите индексы таблиц, соедините таблицы в соответствии с индексами. Введите 12-14 записей в таблицы.

Отчет

Отчет по лабораторной работе должен содержать:

Краткое описание выполненной работы.

Окна Конструкторов, использованных в работе. Формы для всех таблиц с описанием полей. Работу форм с использованием ComboBox

Контрольные вопросы

Какова последовательность проектирования формы для таблицы?

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

Как ввести изображение используя поля формы?

Лабораторная работа № 3

Конструирование запросов

Цель лабораторной работы:

1. Подготовка отчетов с помощью Конструктора запросов MS

2.,Знакомство с языком SQL.

3. Построение запросов на языке SQL.

4. Подготовка отчета по результатам лабораторной работы

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

Какие сотрудники были приняты на работу за последние три месяца? Каково количество новых заказчиков, к которым я обращался на последней неделе?

Каковы показатели по средне зарплате по отделам

Запрос на выборку

Продемонстрируем довольно простой запрос: с помощью него мы находим все записи в таблице Отделы для Ивана Петрова. Такой тип запроса называется запросом на выборку (select query). Он предназначен для поиска записей,удовлетворяющих сформулированными вами условиям отбора записей.

Позже мы более подробно остановимся на функциях запросов на выборку и рассмотрим несколько конкретных примеров работы в окне конструктора запросов (Query Design).

Другие типы запросов

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

Перекрестный запрос. С помощью запросов этого типа вы можете сделатьобзор по категориям данных, то есть обобщить информацию. Например, можно выяснить, каков был объем продаж по каждому продукту в каждом месяце

прошлого года. При создании запросов этого типа можно воспользоваться Мастером перекрестных запросов (Crosstab Wizard).

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

Запрос на обновление. С помощью запросов этого типа можно внестиизменения в группу записей таблицы (например, в некотором поле изменить все прописные символы на строчные), а также выполнить редактирование данных, или внести изменения в одну таблицу, используя данные из другой.

Запрос на добавление. Запросы этого типа позволяют добавлять данные изодной таблицы в другую.

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

Основы языка SQL

Язык SQL – язык высокого уровня для создания запросов в реляционной базе данных.

Основной оператор языка SQL это — SELECT: SELECT [ALL | DISTINCT] список полей данных FROM список таблиц

[WHERE условие поиска]

[GROUP BY имя_столбца [, имя_столбца]…] [HAVING условие поиска]

[ORDER BY критерий упорядочивания].

Обязательными в запросе на SQL являются фразы SELECT и FROM, остальные могут использоваться для более подробных запросов. Во фразе WHERE указывается условие отбора записей из таблиц, имена которых указаны

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

Запрос на языке SQL можно набрать в командном окне либо создать запрос с помощью Конструктора запросов.

Удобное средство – использование оператора SQL для соединения двух таблиц. Например, соединить две таблицы из первой лабораторной работы Сотрудники (Employees) и Отдел (Department) по общему атрибуту

Select * from Department, Employees where Department.depnum = Employees.depmum

Такой же запрос:

Select * from Employees join Department on Department. depnum = Employees. Depnum

Возможны вложенные запросы:

Select lastname from Employees, where depnum in (select depnum from Department where depnum = d101 or depnum = d102)

Существуют операторы вставки (insert), обновления (update) и удаления (delete) данных в/из таблиц.

Оператор insert вставляет строку в таблицу:

Insert into bookauth values (1234, 344) в таблицу Bookauth вставляются значения в порядке следования атрибутов в таблице.

Insert into author (author_id, first_name, last_name)

values (125, ‘Anton’, ‘Antonov’)

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

Оператор Update изменяет одну или несколько строк таблицы:

Update bookauth set author_id = 567 where book_id =

оператор меняет значение поля author_id для всех значений поля book_id равных 111.

Оператор Delete удаляет строки таблицы по заданному условию:

Delete from authors where city = London

Создание запроса

Для создания запроса используется Конструктор запросов.

Из главного меню:

Главное меню Æ Создание Æ Конструктор запросов Открывается окно Конструктора, в котором предлагается выбрать

таблицы для создания запроса:

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

Конструируем запрос «Вывод сотрудников отдела, начальник которого Шифрин» в конструкторе запросов: Выбираем поля из раскрывающегося списка: manager, lastname, birthdate. В поле Условие отбора задаем значение ‘Shifrin’

Если условие составное, например,

Manager = ‘Shifrin’ AND birthdate = ’02.02.1980’, то условие набирается в строке «Условие отбора».

Если условие типа «ИЛИ», то условие набирается в строках «Условие отбора» и строке «ИЛИ»

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

Запрос с параметром.

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

В строку «Условие отбора» в квадратных скобках вводится текст, который появится в окошке. В нашем случае [number].

При выполнении запроса открывается окошко, в которое вводится искомое значение параметра:

При вводе в поле «number» значения номера отдела, например, 101 результат выполнения запроса будет выглядеть примерно так:

Запрос на добавление

Эквивалент запроса на добавление на языке SQL можно получить нажав правой кнопкой мыши на поле запроса:

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

Вот файлик, ессно очень упрощенный. В нем на листе «Данные» в зависимости от параметра в ячейке В1 и В2 строятся графики по Москве или СПб (в реальности их много больше) по двум разным телеканалам (опять же в реале их чуть больше).

Проблема в том, что лист «Данные» пользователю не должен быть виден. Т.е. элементы управления надо выносить на листы с графиками. Ставить элементы управления прямо в графики не хочу — в 2003 и 2007 постоянно глюки идут из-за этого. В итоге вопрос:
как создать на панели управления собственную панель, на которой будут разные кнопки, переключающие вид (это-то как раз несложно и я сделал), а также 2 зависимых (!) поля со списками — в первом «Условие 1», во втором — «Условие 2». Причем зависимые (при выборе в первом поле СТС во втором доступны Москва и СПб, а при выборе ДТВ — только Москва).

Можете посоветовать что-нибудь? К сожалению в интернете не нашел нормальных мануалов по созданию подобных списков с примерами.

Прикрепленные файлы

  • post_177625.xls (17 КБ)

Сообщений: 60940 Регистрация: 14.09.2012
Контакты см. в профиле
24.11.2010 19:13:24
Пищите по форуму — динамические графики.
Пользователь
Сообщений: 247 Регистрация: 01.01.1970
24.11.2010 19:35:03

Юрий. Все графики динамические. Вопрос не в этом, а управлении этими графиками через кнопки на панели управления.

Сообщений: 60940 Регистрация: 14.09.2012
Контакты см. в профиле
24.11.2010 19:49:11

Диапазоны имеют имя. Так? Значит тем или иным способом выбираем имя, и по нему строится/отображается график. Я потому и дал наводку для поиска — там подобные решения были.

Пользователь
Сообщений: 247 Регистрация: 01.01.1970
24.11.2010 20:41:26

Юрий, да все я понимаю — и что такое именнованный диапазон, и как с ним работать.

Мне нужен конкретный инструмент для переключения этого диапазона (!) на листе диаграммы. Желательно, вынесенный на панель управления и одинаковый для всех листов

Сообщений: 60940 Регистрация: 14.09.2012
Контакты см. в профиле
24.11.2010 20:45:24

Вот для начала пример Vikttur с «переключателем». Правда, на листе. В качестве такого переключателя можно использовать, например, ComboBox. Или мы о разном? 🙂

Прикрепленные файлы

  • post_177655.xls (33 КБ)

Пользователь
Сообщений: 247 Регистрация: 01.01.1970
24.11.2010 20:53:15

К сожалению о разном — такой сделать несложно. Собственно я и делал. но если эту диаграмму разместить на отдельном листе — как менять? Хочется пример макроса, который (на манер PLEX) создаст на панели управления подобный же список. Именно на панели управления, потому как на листе диаграммы ячеек нет, да и элементы форм привязываются к листу — а тут надо к нескольким листам

Сообщений: 60940 Регистрация: 14.09.2012
Контакты см. в профиле
24.11.2010 21:14:50

Понятно. Как вариант, могу предложить использовать UserForm. Она может отображаться и на листе диаграмм. А уже на ней контрол.

Пользователь
Сообщений: 247 Регистрация: 01.01.1970
25.11.2010 09:52:05

Добавлять кнопки и строить панель умею — несколько собственных надстроек есть и на моем счету. Правда там были исключительно кнопки.

Вычитал в интернете про CommandBarComboBox (Сложно организованные меню, такие как поле ввода, раскрывающийся список или поле со списком). А вот нормальных примеров работы с ним не нашел.

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

Пользователь
Сообщений: 247 Регистрация: 01.01.1970
25.11.2010 10:08:31

Т.е. Вы не удосижились проверить тот код, который я выложил? Или там не ComboBox? Или вопрос не в этом? Может тогда стоит вопрос нормально сформулировать?
Приношу свои извинения — сперва неправильно вставил код. Все получилось, спасибо. Теперь разбираюсь как в additem прописать диапазоны. Еще раз спасибо за помощь

Пользователь
Сообщений: 247 Регистрация: 01.01.1970
25.11.2010 10:12:30

Да. Изменения в Вып.списке на панели придется отслеживать через классы. Что, в общем-то совсем не сложно.
Не могли бы вы дать пример такого отслеживания? В частности при изменении количества элементов — есть список из 10 или 7 показателей. При включенном флажке (допустим) — 10, при выключенном — 7

Пользователь
Сообщений: 247 Регистрация: 01.01.1970
25.11.2010 10:24:21

Возможен ли такой черновой вариант:

Private Sub ComboBox1_Change()
With ComboBox1
.AddItem «СТС»
.AddItem «ДТВ»
End With
End Sub

Private Sub ComboBox2_DropButtonClick()
Array_СТС(1) = «Москва»
Array_СТС(2) = «СПб»
Array_СТС(3) = «Усть Илимск»
Array_ДТВ(1) = «Москва»
Array_ДТВ(2) = «Калининград»

If ComboBox1.Value = «ДТВ» Then
ComboBox2.List() = Array_ДТВ
ElseIf ComboBox1.Value = «СТС.» Then
ComboBox2.List() = Array_СТС
End If
End Sub

Пользователь
Сообщений: 3672 Регистрация: 23.12.2012
25.11.2010 11:09:46

Про какую панель речь?
Если про панель инструментов, то почему обязательно использовать классы?

Можно обойтись и без этого — OnAction и простейший макрос:

Sub ComboChanged() ‘ срабатывает при изменении значения в комбобоксе или текстбоксе
On Error Resume Next
НазваниеКомбобокса = Application.CommandBars.ActionControl.Tag
ТекстКомбобокса = Application.CommandBars.ActionControl.Text
MsgBox «Новое значение: «»» & ТекстКомбобокса & «»»», _
vbInformation, «Изменения в поле\списке «»» & НазваниеКомбобокса & «»»»
End Sub

Пользователь
Сообщений: 247 Регистрация: 01.01.1970
25.11.2010 12:08:08

The_Prist, гранмерси, Ваш совет оказался панацеей )

Итак, вот такой черновой вариант вышел в конце-концов:
Модуль:

Public oCbx As New Class1
Sub Create_Menu_DropDown()
Dim oCombo
Application.CommandBars(«Моя панель»).Delete
With Application.CommandBars.Add
.Visible = True: .Name = «Моя панель»: .Position = msoBarTop
Set oCombo1 = .Controls.Add(3)
Set oCbx.oMyCmbx1 = oCombo1
With oCombo1
.AddItem Range(«A1»)
.AddItem Range(«A2»)
.ListIndex = 1
End With
Set oCombo2 = .Controls.Add(3)
Set oCbx.oMyCmbx2 = oCombo2
With oCombo2
.AddItem Range(«B1»)
.AddItem Range(«B2»)
.ListIndex = 1
End With
End With
Range(«C1″) = oCombo1.Text & » » & oCombo2.Text
Range(«d1») = oCombo2.Text
End Sub

Модуль класса:
Public WithEvents oMyCmbx1 As CommandBarComboBox
Public WithEvents oMyCmbx2 As CommandBarComboBox
Public i1 As Integer
Public i2 As Integer
Private Sub oMyCmbx2_Change(ByVal Ctrl As Office.CommandBarComboBox)
i1 = 1
Range(«C1″) = oMyCmbx1.Text & » » & oMyCmbx2.Text
With oMyCmbx1
i2 = .ListIndex
While .ListCount > 0
.RemoveItem 1
Wend
While Cells(i1, 1) <> 0
.AddItem Cells(i1, 1)
i1 = i1 + 1
Wend

If .ListCount >= i2 Then
.ListIndex = i2
Else
.ListIndex = 1
End If
End With
End Sub
Private Sub oMyCmbx1_Change(ByVal Ctrl As Office.CommandBarComboBox)
Range(«C1″) = oMyCmbx1.Text & » » & oMyCmbx2.Text
End Sub

В столбце «А» — имена, в столбце «В» — фамилии. В ячейку «С1» выводится имя+фамилия. Как только меняется значение в списке «Фамилия» список «Имя» автоматически обновляется.

Еще раз огромное спасибо!

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

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