Передача значения переменной между формами

131
18 апреля 2022, 03:00

у меня есть две формы:

LoginForm
MainForm

На LoginForm я выполняю SQL-запрос, проверяющий наличие пользователя в базе данных и его ранг. При выполнение аутентификации открывает MainForm. Так вот получая, как мне записать значение строки Rang в переменную и передать в MainForm из LoginForm?

Пробовал создать Public переменную на форме LoginForm

public int isUserRang;

И записать в неё результат запроса:

db.openConnection();
isUserRang = (int)isUserRangCommand.ExecuteScalar();
db.closedConnection();

Но на форме MainForm эту переменную не видно.

Answer 1

Несмотря на наличие ответов на подобные вопросы, думаю стоит дать некоторые кпояснения именно на этот вопрос.

Для начала определимся с терминами, т.к. из-за их неправильного употребления, очень часто следуют ошибки коде.

  • переменная: именованная область памяти. В контексте языка C#, переменные существуют только внутри методов. У переменных не может быть никаких модификаторов т.к. они не являются самостоятельными сущностями. Если значение переменной необходимо передать за пределы метода, его нужно записать в поле или свойство какого-либо объекта или класса, либо вернуть с помощью инструкции return в качестве результата работы метода. Саму переменную нельзя никуда передать в принципе.
  • поле объекта: именованная область памяти в блоке памяти, отведенном для хранения объекта. Поле, а точнее его значение, может быть передано вместе с самим объектом. Для доступа используется ссылка на объект и имя поля.
  • свойство объекта: группа методов доступа к полям объекта, т.е. они не хранят значения, а только обеспечивают доступ к ним либо могут возвращать вычисляемые значения. Для работы также требуется ссылка на объект, свойства которого требуется получить.

Возвращаясь к вопросу, вы создали не переменную, а поле c модификатором public. В таком случае и обращаться к нему надо с помощью ссылки на объект формы логина, что-то вроде myLoginForm.isUserRang.

Не пренебрегайте правильным использованием терминов. Это избавляет от заметного количества проблем не только в программировании.

Д/з: разберитесь с терминами поле класса и свойство класса и чем они отличаются от описанных выше.

Answer 2

Решил свой вопрос следующим образом. Создал класс

UserRang

В нем создал

public static string isUserRang;

И на форме MainForm обращался к нему.

READ ALSO
Как разделить List во View

Как разделить List во View

Использую ChartJS для отрисовки диаграммыВ принимаемых значениях lables и data может обрабатываться только разделенные значения

359
Rider. Пустой .cs файл при генерации из web-reference

Rider. Пустой .cs файл при генерации из web-reference

Когда я добавляю web-reference к https://wwwonvif

131
Почему массив выдает такой результат? С#

Почему массив выдает такой результат? С#

Результат должен быть просто 1,но почему то результат 2,1,2Метод ArrayDiff должен из массива a удалять все такие же цифры, которые есть в массиве...

110
Добавление введеных переменных в стек

Добавление введеных переменных в стек

Нужно создать стек в котором хранится ссылка на тип ISolid - объект класса

144