Есть две формы на одной из них есть textbox и combo box на против combo box есть кнопка добавить. Кликнув на данную кнопку открывается вторая форма куда вводятся данные. После сохранения закрывается вторая форма а на первой форме в combo box появляется введенное значение во второй форме. Как это можно реализовать?
Asked
Active
Viewed 401 times
-1
-
Возможный дубликат вопроса: как использувать переменные одной формы в другой? – EvgeniyZ Mar 14 '20 at 11:53
-
Работай с конструкторами, туда сюда.. – OYBEK RUSTAMOV Mar 14 '20 at 15:46
-
Переключиться на WPF. – Сергей Татевосян Mar 15 '20 at 18:43
1 Answers
0
Можно так, используя привязки и валидацию ввода
Создадим такой класс для элемента ComboBox
public class ComboItem
{
public int Id { get; set; }
public string Title { get; set; }
}
Форма создания нового элемента для ComboBox
public partial class AddForm : Form
{
public ComboItem Item { get; }
public AddForm(ComboItem comboItem)
{
InitializeComponent();
Item = comboItem ??
throw new ArgumentNullException(nameof(comboItem));
//привязка
_textBoxInput.DataBindings.Add("Text", Item,
nameof(ComboItem.Title), true, DataSourceUpdateMode.OnValidation);
//проверка вводимых данных
_textBoxInput.Validating += TextBoxInput_Validating;
//кнопка
_buttonAdd.DialogResult = DialogResult.OK;
}
//проверяем вводимые данные
private void TextBoxInput_Validating(object sender, CancelEventArgs e)
{
var input = _textBoxInput.Text.Trim();
//если пользователь ввел пустой текст
//или текст содержит цифры
if (String.IsNullOrWhiteSpace(input)
|| input.AsEnumerable<char>().Any(c => char.IsDigit(c)))
{
//отменяем ввод
e.Cancel = true;
}
}
}
Основная форма
public partial class MainForm : Form
{
//источник данных для комбобокса и текстбоксов
private readonly BindingSource _bsCombo;
public MainForm()
{
InitializeComponent();
//настраиваем источник
_bsCombo = new BindingSource();
_bsCombo.DataSource = typeof(IList<ComboItem>);
//привязки ComboBox
_comboBox.DataSource = _bsCombo;
_comboBox.DisplayMember = nameof(ComboItem.Title);
//привязки TextBoxов
_textBoxTitle.DataBindings.Add("Text", _bsCombo, nameof(ComboItem.Title));
_textBoxId.DataBindings.Add("Text", _bsCombo, nameof(ComboItem.Id));
//кнопка
_buttonAdd.Click += ButtonAdd_Click;
//
this.Load += MainForm_Load;
}
private void MainForm_Load(object sender, EventArgs e)
{
//добавляем первый элемент в комбобокс
_bsCombo.Add(new ComboItem { Id = 1, Title = "?" });
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
//вычисляем Id для след.элемента
int id = _bsCombo.List.Cast<ComboItem>().Max(i => i.Id) + 1;
//создаем новый элемент
var item = new ComboItem { Id = id };
//создаем и настраиваем форму
var form = new AddForm(item);
form.Owner = this;
form.StartPosition = FormStartPosition.CenterParent;
//если пользователь нажал кнопку Добавить
if (form.ShowDialog() == DialogResult.OK)
{
//добавляем элемент в источник для комбобокса
_bsCombo.Add(item);
}
}
}
Bulson
- 9,411
