2014-01-16 3 views
1

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

Прямо сейчас у меня есть форма, как это,

TextBoxAddress1 TextBoxEmail1 
TextBoxAddress2 TextBoxEmail2 
..... 
..... 
..... 
TextBoxAddressN TextBoxEmailN 

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

Если я использую этот метод, мне пришлось написать длинный код, чтобы увидеть, заполняется ли первая строка (TextBoxAddress1 TextBoxEmail1) для проверки и даже для чтения мне приходилось писать много строк кода.

Есть ли способ улучшить это?

+0

Не ясно, что вы спрашиваете, по крайней мере, для меня. –

+2

Считаете ли вы создание только одного текстового поля и установили значение MultiLine равным true? Сообщите пользователю ввести один адрес электронной почты в строке и затем проанализировать его по мере необходимости. –

+0

Вы говорите о проверке элемента управления и появлении сообщения, если оно недействительно? –

ответ

1

У меня был бы список/список с вашими электронными адресами и кнопки «Добавить/редактировать/Удалить», в которых отображается всплывающая форма - логика для проверки электронных писем и т. Д. Была бы в одном месте, и ваш список может расти без вас необходимо добавить элементы управления в форму.

Вы можете динамически создавать текстовые поля - но вы в конечном итоге пишете код, чтобы убедиться, что они хорошо оформлены в форме и т. Д. - с некоторым типом списка проще ИМО, а также поддается привязке (например, к объекту электронной почты)

+0

И поскольку OP спрашивал, как читать этот адрес электронной почты, который они могут просто вызвать: 'listBox1.Controls.AsQueryable(). Где (x => x is TextBox)', тогда легко обрабатывать каждое текстовое поле в цикле 'foreach'. – JNYRanger

2

вы можете использовать следующий код для добавления TextBox динамически в форму:

private int m_CurrTexboxYPos = 10; 
private List<TextBox> m_TextBoxList = new List<TextBox>(); 

private void CreateCheckBox() 
{ 
    m_CurrTexboxYPos += 25; 
    TextBox textbox = new TextBox(); 
    textbox.Location = new System.Drawing.Point(0, m_CurrTexboxYPos); 
    textbox.Size = new System.Drawing.Size(100,20); 
    Controls.Add(textbox); 
    m_TextBoxList.Add(textbox); 
} 
+0

Просто добавлена ​​строка 'Controls.Add (текстовое поле);' которую я пропустил. –

0

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

Это просто хороший дизайн. таким образом, если у вас есть несколько вкладок для таких вещей, как «Главная информация», «Рабочая информация», «Контактная информация о чрезвычайных ситуациях», вы можете просто разместить их в форме. Это довольно часто для профиля пользователя.

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

0

Проще говоря, ListBox adove TextBox с кнопкой.

1.

Также вы можете использовать DataGridView, BUILTIN функциональность Добавить \ Edit \ Delete.

Здесь с помощью DataGridView (ShowHeader значение ЛОЖЬ, EditMode к On Enter, с одной колонной с AutoSizeMode в Fill собственности)

enter image description here

1

Динамическое добавление элементов управления является довольно просто, если вы можете использовать DockStyle и эксклюзивный для них (например, Panel). Если вы не можете использовать DockStyle, тогда вам нужно написать логику, чтобы определить Location и Size (что не весело).

В простой форме, у меня есть две кнопки и панель, Button1 добавляет новый TextBox к Panel1, Button2 перебирает управление в Panel1, а затем проверяет, что они являются правильным типом или бросает исключение. Здесь вы ставите логику проверки или чтения. Panel1 должен иметь AutoScroll = true;, иначе вы будете управлять элементами управления на экране просмотра.

Эта концепция может быть переключена на все, что наследуется от UserControl (все собственные средства управления .Net или собственные пользовательские элементы управления).

private void button1_Click(object sender, EventArgs e) 
{ 
    TextBox NewEmailBox = new TextBox(); 
    NewEmailBox.Name = "NewEmailBox" + this.panel1.Controls.Count; 
    NewEmailBox.Dock = DockStyle.Top; 
    this.panel1.Controls.Add(NewEmailBox); 

} 

private void button2_Click(object sender, EventArgs e) 
{ 
    foreach (Control item in this.panel1.Controls) 
    { 
     if (item is TextBox) 
     { 
      //Do your reading/validating here. 
     } 
     else 
     { 
      throw new InvalidCastException(string.Format("{0} was in Panel1 and is of type {1} not TextBox!", item.Name, item.GetType())); 
     } 
    } 
} 
0

Менее повторяемый код, который у вас есть, лучший программист.

Всякий раз, когда вы видите шаблон (что-то повторяемое), вы могли бы попытаться его оптимизировать. Если это не слишком мало, чтобы волноваться.

В вашем случае сначала определите, что является основным для повторяемой вещи. Вам всегда нужно вводить адрес и адрес электронной почты? Затем объедините их в элемент управления, который может выполнять проверку. Вам нужно часто использовать этот контроль (или повторять N раз)? Тогда, возможно, имеет смысл переключиться на список (ListBox, ListView или DataGridView).

Ты слишком ленив беспокоиться о настройке? Затем просто оптимизируйте что-то, что, очевидно, будет повторяться: поставьте проверку в общий метод и вызовите его из каждого события TextBox. Или сделайте собственный TextBox со встроенным методом. Или выполните валидацию сразу в событии кнопки Ok с помощью цикла .. или нет, используя цикл.

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

Если бы я должен ввести таблицы данные (или данные, которые образуют таблицу), я бы с DataGridView так что это будет выглядит следующим образом .. или лучше:

enter image description here

Смежные вопросы