Передача значения переменной между формами
у меня есть две формы:
LoginForm
MainForm
На LoginForm я выполняю SQL-запрос, проверяющий наличие пользователя в базе данных и его ранг. При выполнение аутентификации открывает MainForm. Так вот получая, как мне записать значение строки Rang в переменную и передать в MainForm из LoginForm?
Пробовал создать Public переменную на форме LoginForm
public int isUserRang;
И записать в неё результат запроса:
db.openConnection();
isUserRang = (int)isUserRangCommand.ExecuteScalar();
db.closedConnection();
Но на форме MainForm эту переменную не видно.
Ответы (2 шт):
Несмотря на наличие ответов на подобные вопросы, думаю стоит дать некоторые кпояснения именно на этот вопрос.
Для начала определимся с терминами, т.к. из-за их неправильного употребления, очень часто следуют ошибки коде.
- переменная: именованная область памяти. В контексте языка C#, переменные существуют только внутри методов. У переменных не может быть никаких модификаторов т.к. они не являются самостоятельными сущностями. Если значение переменной необходимо передать за пределы метода, его нужно записать в поле или свойство какого-либо объекта или класса, либо вернуть с помощью инструкции return в качестве результата работы метода. Саму переменную нельзя никуда передать в принципе.
- поле объекта: именованная область памяти в блоке памяти, отведенном для хранения объекта. Поле, а точнее его значение, может быть передано вместе с самим объектом. Для доступа используется ссылка на объект и имя поля.
- свойство объекта: группа методов доступа к полям объекта, т.е. они не хранят значения, а только обеспечивают доступ к ним либо могут возвращать вычисляемые значения. Для работы также требуется ссылка на объект, свойства которого требуется получить.
Возвращаясь к вопросу, вы создали не переменную, а поле c модификатором public. В таком случае и обращаться к нему надо с помощью ссылки на объект формы логина, что-то вроде myLoginForm.isUserRang.
Не пренебрегайте правильным использованием терминов. Это избавляет от заметного количества проблем не только в программировании.
Д/з: разберитесь с терминами поле класса и свойство класса и чем они отличаются от описанных выше.
Решил свой вопрос следующим образом. Создал класс
UserRang
В нем создал
public static string isUserRang;
И на форме MainForm обращался к нему.