Массив элементов WinForm

Итак, у меня есть WinForm в моей программе, которая содержит серию каждого из ComboBox и двух TextBox. Есть atm 8 линий, но их общее количество увеличится до 32, поэтому я хотел бы работать с массивом или подобным. Как мне это сделать?

Мой текущий рабочий метод заключается в том, что я вручную создаю новый массив TextBoxes / ComboBox, которому я назначаю указанный Elemt WinForm. Поэтому у меня есть такой список:

tbGU[0] = tbGU1;
tbGO[0] = tbGO1;
cbS[0] = cbS1;

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

Мне нужно получить доступ к SelectedIndex ComboBox и тексту TextBoxes. Я надеялся, что мне удастся избежать создания всех элементов вручную с помощью кода.

Вы думали о том, чтобы поместить три элемента управления (ComboBox, 2xTextBox) в пользовательский элемент управления. Тогда вам придется иметь дело с 1/3 от общего количества элементов управления.

JayV 06.07.2018 11:00

Рассматривали ли вы использование элемента управления DataGridView, где можно динамически создавать несколько элементов управления?

Fabio 06.07.2018 11:07

Вы всегда можете использовать List<T> и инициализировать за один раз: List<ComboBox> cBoxes = new List<ComboBox>() {cbS1, cbS12, cbS3...}; Вы получаете доступ к нему, как к массиву.

TaW 06.07.2018 11:11

Как написано ниже, они не могут быть равномерно распределены, потому что они расположены вокруг / на графике, поэтому DataGridView неприемлем для моего приложения. Я собираюсь использовать сокращенную версию Versionen либо с помощью List, либо с помощью new [] (представьте, что позже).

Martin 06.07.2018 11:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
584
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Одно простое решение - использовать синтаксис инициализатора массива:

ComboBox[] cbS = new[] { cbS1, cbS2, cbS3 ... };

Другой способ сделать это - полностью избавиться от переменных cbS1, cbS2 ... cBSn и создать элементы управления в цикле for.

ComboxBox[] cbS = new ComboBox[32];
// declare the text box arrays here as well
for (int i = 0 ; i < cbS.Length ; i++) {
    cbS[i] = new ComboBox();
    cbS[i].Location = ... // use "i" to help you position the control
    // configure your combo box ...
    this.Controls.Add(cbS[i]);

    // do the same for the text boxes.
}

Третий способ - создать настраиваемый элемент управления:

// name this properly!
public class MyControl: UserControl {
    public ComboBox CbS { get; }
    public TextBox TbGU { get; }
    public TextBox TbGO { get; }

    public MyControl() {
        // create and configure the combo box and text boxes here ...
    }
}

Затем вы можете использовать цикл for для создания множества MyControl.

К сожалению, они не распределяются равномерно в моем фрейме (например, с использованием своего рода самодельного CardLayout, похожего на java, и даже там они устанавливаются в соответствии с графикой, поэтому нет «правила» относительно того, как он устанавливается. Вероятно, я буду придерживаться моего метода, но поменяю его на свою более короткую версию.

Martin 06.07.2018 11:17

@Martin Но поля со списком и текстовые поля соответствуют друг другу, верно? Если они связаны, вам следует создать настраиваемый элемент управления.

Sweeper 06.07.2018 11:18

Что ж, может быть твое право и я должен их использовать, я рассматриваю это атм. Чтобы уточнить, я выбираю датчик в поле со списком, для которого я должен установить два критических значения (для дальнейшего процесса). Вы также выбираете положение датчика, которое отмечается с помощью индекса элемента (это довольно сложный Измерительная система, которую я должен контролировать с помощью приложения, отсюда!> 32 датчика xD). Хотя я уже рад, что мне удалось хотя бы минимизировать (минимум) 96 строк до 3 (очень громоздких) строк. Спасибо за это

Martin 06.07.2018 11:34

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