在vb中声明全局变量

时间:2011-09-29 14:10:07

标签: vb.net winforms

用户点击按钮,会在用户输入密码的位置生成新表单?如何保留用户名的内存副本?

例如在Web表单中,我可以使用Session(" User")。我怎么能用winforms复制这个?

由于

3 个答案:

答案 0 :(得分:6)

您可以使用静态(在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 :(得分:1)

您不需要等同于Web应用程序中的Session对象。只需要会话,因为Web应用程序实际上必须跨进程边界访问变量(= Web应用程序中的会话包含用户对Web服务器的多个请求,并且历史上每个请求都启动了一个新的应用程序!)。

在“普通”应用程序中,情况并非如此 - 任何非局部变量都可以。在您的特定情况下,密码表单具有包含用户名的属性是有意义的。然后,用户输入他们的用户名和密码,此密码表单的调用者可以检索用户名:

' 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

我们可以变得更复杂,但这样做。

如果您需要在整个应用程序中重复使用用户名,那么您可能还需要共享有关该用户的其他信息(他们在做什么工作?...)。简而言之,这是应用程序的 state ,通常有一个表示该状态的对象。这也是存储用户名的正确位置。

如果您的应用程序只有另一个表单(“主对话框”),那么只需使用该表单中的私有变量来存储用户名。不需要全局变量。

答案 2 :(得分:0)

只需在表单上有一个公共变量,永远不要卸载表单,并使用formname.variablename从表单中获取数据(在表单级别将其定义为public)。

如果将它们设置为公共控件,甚至可以使用控件实现。

在火焰之前:这解决了OP问题,无论何时这是最佳,好或其他什么,都是另一个问题。