Как реализовать повторно используемый код с несколькими элементами пользовательского интерфейса в .Net Framework? - PullRequest
0 голосов
/ 08 ноября 2018

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

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

Если я создам структуру, подобную этой

struct MyValues
{
    int val1;
    int val2;
    int val3;
}

MyValues values = new MyValues;

Я хочу иметь возможность объявить массив кортежей

private static Tuple<TextBox, int>[] tuples =
{
    (textBox1, values.val1),
    (textBox2, value.val2),
    (textBox3, values.val3),
};

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

private void Update(Tuple<TextBox, int>[] tuples)
{
    foreach(Tuple<TextBox, int> t in tuples)
        t.Item1.Text = t.Item2.ToString();
}

Этого нельзя сделать так, потому что члены int структуры копируются по значению при инициализации массива кортежей (а не по ссылке). Я думал об обёртывании int в новый тип объекта, чтобы я мог копировать по ссылке, но, возможно, есть лучшее решение.

Как я могу заставить эту работу? Должен ли я инкапсулировать int в объекте? Есть ли лучший шаблон дизайна для такой ситуации?

Спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

Трудно представить, что вы спрашиваете, можете ли вы добавить примеры кода, которые, возможно, вам уже понадобятся, чтобы лучше понять ваш вопрос?

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