用户点击按钮,会在用户输入密码的位置生成新表单?如何保留用户名的内存副本?
例如在Web表单中,我可以使用Session(" User")。我怎么能用winforms复制这个?
由于
答案 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问题,无论何时这是最佳,好或其他什么,都是另一个问题。