объявление глобальных переменных в vb - PullRequest
1 голос
/ 29 сентября 2011

Пользователь нажимает кнопку, генерируется новая форма, где пользователь вводит свой пароль? Как я могу сохранить в памяти копию имени пользователя?

Например, в веб-формах я могу просто использовать Session («Пользователь»). Как я могу повторить это с winforms?

Спасибо

Ответы [ 3 ]

6 голосов
/ 29 сентября 2011

Вы можете использовать статический (Shared in VB .NET) объект

Пример

Public Class SessionInformation

   Public Shared Property UserPassword As String

End Class

Вы можете получить доступ к этому, позвонив

SessionInformation.UserPassword

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

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

Поддержание персистентности объекта может быть затруднено, если вы не используете базу данных (SQL, Access, файл и т. Д.) Для хранения нехватки памяти копии объекта, которую вы хотите получить позднее. Самый простой способ реализовать это - использовать базу данных SQLCE, которая находится в папке вашего приложения, и использовать стандартный T-SQL для хранения необходимой вам информации. Однако в случае пароля это может быть не идеальным из-за проблем безопасности.

Или лучшим способом входа и выхода пользователя было бы использование пространства имен System.Security.Principal для создания пользователя для вашего приложения.

1 голос
/ 29 сентября 2011

Вам не нужен эквивалент объекта Session в веб-приложениях.Сеансы необходимы только потому, что веб-приложениям фактически необходим доступ к переменным через границы процесса (= сеанс в веб-приложении включает в себя несколько запросов пользователя к веб-серверу, и исторически каждый запрос запускает новое приложение!).

В «нормальном» приложении это не так - подойдет любая нелокальная переменная.В вашем конкретном случае было бы целесообразно, чтобы в форме пароля было свойство, содержащее имя пользователя.Затем пользователь вводит свое имя пользователя и пароль, и вызывающая сторона этой формы пароля может получить имя пользователя:

' The caller looks something like this:

Dim pw As New PasswordForm()
pw.ShowDialog() ' Display the dialog, and wait until the user has dismissed it.
Dim theUsername = pw.Username

Внутри PasswordForm есть что-то вроде этого:

Public ReadOnly Property Username() As String
    Get
        ' Return the value of the username textbox field.
        Return UsernameInput.Text
    End Get
End Property

Мы могли бы стать более изощренными, но это подойдет.

Если вам нужно повторно использовать имя пользователя в приложении, есть вероятность, что вам также необходимо поделиться другой информацией о пользователе (над чем он работает?…).Короче говоря, это состояние приложения, и обычно есть объект, который представляет это состояние.Это было бы правильное место для хранения имени пользователя.

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

0 голосов
/ 29 сентября 2011

Просто используйте открытую переменную в формах, никогда не выгружайте форму и получайте данные из этой формы, используя formname.variablename (определите ее как открытую на уровне формы).

Этого можно добиться даже с помощью элементов управления, если вы установите их как общедоступные.

ПЕРЕД ПЛАМЕНАМИ: это решает проблемы ОП, всякий раз, если это оптимально, хорошо или что-то еще, это другая проблема.

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