Member 13093014 Ответов: 1

Как я могу совместно использовать переменные / данные в нескольких формах


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

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

т.е..
transactionType публичных перечисление { неназначенные, Доход, Расход, перевод, наличные, Кредит, займ };

Это, я знаю, присваивает целое число каждому элементу, начинающемуся с нуля и увеличивающемуся на 1. Я также знаю, что я использую это для назначения и сравнения с помощью transactionType.Доход, например, и так далее, что замечательно, так как это означает, что мне не нужно запоминать, какое число я использую для каждого элемента, я просто должен запомнить название.

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

Я читал, что было бы лучше реализовать его в классе, а не ссылаться на класс, но я не могу заставить это работать или просто неправильно понимаю концепцию.

После этого довольно длинного объяснения, которое, я надеюсь, понятно, может ли кто-нибудь указать мне правильное направление и объяснить, помочь или привести какой-то пример того, что мне нужно сделать.

Большое спасибо.

Что я уже пробовал:

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

общественности статической строки[] TransactionTypes = новая строка[] { "неназначенные", "Доход", "Расход", "перемещение", "наличными", "кредит", "Кредит" };

[no name]

Похоже, вам нужен статический класс или синглтон.

Richard MacCutchan

C# во многом такой же, как и большинство других языков OO. То, что вы делаете в C++, Java и т. д., работает так же хорошо.

1 Ответов

Рейтинг:
6

OriginalGriff

В C#, если у вас есть перечисление:

public enum transactionType { Unassigned, Income, Expense, Transfer, Cash, Credit, Loan };
И затем вы объявляете переменную этого типа:
transactionType tt = transactionType.Expense;
Затем реализация ToString по умолчанию для перечисления выводит имя, а не числовое значение:
Console.WriteLine(tt);
Печать:
Expense
Аналогично:
transactionType tt;
for (int i = (int) transactionType.Unassigned; i <= (int) transactionType.Loan; i++)
    {
    tt = (transactionType) i;
    Console.WriteLine(tt);
    }
Будет печатать каждое значение по очереди:
Unassigned
Income
Expense
Transfer
Cash
Credit
Loan
Таким образом, если вы держите значение, которое Вы читаете из БД, в transactionType переменная, где бы вы ни использовали переменную, будет печатать значение в виде имени.
Вы также можете очень легко получить все имена в перечислении:
string[] values = Enum.GetNames(typeof(transactionType));
foreach (string s in values)
    {
    Console.WriteLine(s);
    }
Также будет печататься:
Unassigned
Income
Expense
Transfer
Cash
Credit
Loan
Но, как правило, вам это не нужно. Вы можете установить combobox непосредственно в диапазон значений перечисления:
myComboBox.DataSource = Enum.GetValues(typeof(transactionType));
И немедленно используйте это значение:
Console.WriteLine(myComboBox.SelectedValue);
Или даже:
transactionType tt = (transactionType)myComboBox.SelectedValue;
Console.WriteLine(tt);