C# 如何在Winforms应用程序中维护用户登录详细信息?
你好,我对windows窗体很陌生。这里我想在windows窗体中维护状态(如web应用程序中的会话) 实际上,我想在会话中存储用户登录详细信息。但我认为winforms中没有会话的概念。那么,处理这种情况的替代方法是什么呢 问候,,C# 如何在Winforms应用程序中维护用户登录详细信息?,c#,winforms,C#,Winforms,你好,我对windows窗体很陌生。这里我想在windows窗体中维护状态(如web应用程序中的会话) 实际上,我想在会话中存储用户登录详细信息。但我认为winforms中没有会话的概念。那么,处理这种情况的替代方法是什么呢 问候,, Nagu在winforms中,您可以使用通过方法或属性向其他表单公开的变量 您还可以使用静态变量 由于windows窗体是有状态的(与web窗体的无状态相反),因此您可以在窗体类中使用一个字段。我不清楚您所说的是web应用程序还是基于某个响应的备用应用程序。如果您
Nagu在winforms中,您可以使用通过方法或属性向其他表单公开的变量 您还可以使用静态变量
由于windows窗体是有状态的(与web窗体的无状态相反),因此您可以在窗体类中使用一个字段。我不清楚您所说的是web应用程序还是基于某个响应的备用应用程序。如果您谈论的是web应用程序,则可以使用页面对象上的会话属性 它将如下设置变量:
Session["username"] = "Username";
Session["fullname"] = "User's full name";
然后您可以访问以下内容:
lblGreetings.Text = "Hi " + Session["fullname"];
这就是您想要的吗?windows窗体中没有会话变量的概念。您可以做的是:
关于你对我第一次答复的评论: 您正在创建登录表单的新实例。这怎么会有价值呢。这是一个登录表单,因此我相信当用户输入用户名和密码并单击OK或其他什么时,您将关闭它 然后,当登录表单关闭时,无法从中获取值。如果您需要坚持这种方法,这可能是一种方法:
public NextForm(LoginForm frm){
// Code here
}
现在在NextForm中,您可以通过“frm”访问属性。在下面的示例中,每个窗口或窗口组都有一个控制器。控制器之间的传递取决于他们需要如何协作(他们需要共享什么知识等)。重要的是将应用程序状态保留在控制器中,并限制窗口处理用户输入和事件
// pseudocode, because I do not know WinForms that much
class MainController
{
private Guid securityToken;
public Guid SecurityToken
{
get { return securityToken; }
set { securityToken = value; }
}
}
class LoginWindowController
{
MainController mainController;
LoginWindow loginWindow;
public LoginWindowController(MainController mainController)
{
this.loginWindow = new LoginWindow(this);
this.mainController = mainController;
}
public void Show()
{
loginWindow.IsVisible = true;
}
public void HandleLogin()
{
Guid token =
myobject.Authenticate(loginWindow.Username, loginWindow.Password);
if (token != Guid.Empty)
{
mainController.SecurityToken = token;
}
}
}
你需要更多地考虑范围而不是会话;只要对象仍在范围内,您就可以从其公共属性/字段中提取值 在您的情况下,将用户详细信息存储在静态类中是有意义的:
public static class LoginInfo
{
public static string UserID;
}
现在,您可以从代码中的任意位置访问用户ID:
MessageBox.Show(LogInfo.UserID);
从一个程序中,我使用一个登录表单来存储全局变量,并将密码存储为一个安全字符串。在程序中,当我调用进程时,我能够作为特定用户“运行”。除了process.start,您还可以将其用于其他用途
//to run process as another user
//create these global variables on the first
//form or piece of code in your program
class usernameGlobalVariable
{
public static string var = "";
}
class passwordGlobalVariable
{
public static SecureString var;
}
// use these as event handlers for text fields
//for your login form
private void usernameTextBox_TextChanged(object sender, EventArgs e)
{
usernameGlobalVariable.var = usernameTextBox.Text;
}
private void passwordTextBox_TextChanged(object sender, EventArgs e)
{
SecureString passWord = new SecureString();
foreach (char c in passwordTextBox.Text.ToCharArray())
{
passWord.AppendChar(c);
}
passwordGlobalVariable.var = passWord;
}
//put this on form that launches program
//this assigns variables for process.start
//change fileName to path and name of program
// use \\ in paths
string fileName = "c:\\hdatools\\Ping2.exe";
string arguments = "";
string domain = "domain";
//start the process
//put this on the page along w the above variables that
//launches the app as another user
//the .var variables are global
{
Process.Start(
fileName,
arguments,
usernameGlobalVariable.var,
passwordGlobalVariable.var,
domain);
}
谢谢,但在这里我如何设置启动页面?我想在成功验证后将login.aspx设置为starup页面我想重定向到主页WOA@纳古:我想知道你是如何在winform应用程序中使用aspx的?login.aspx?您正在创建web应用程序吗?抱歉,只是它的login.cs only我可以在应用程序的所有其他页面中使用此值吗?如果是这样,我如何在home.cs页面中获取用户名和密码?那么您需要将字段设置为内部字段或添加属性以公开它们。但我仍然面临同样的问题。。我在login.cs中声明了两个变量,比如公共字符串loginid=“123456”;之后,我尝试访问home.cs,比如login lg=new login()MessageBox.Show(lg.loginid);它正在显示空值。。问题是什么problem@Danish-你能提供任何结构吗?这篇文章是关于windows窗体的,而不是关于web应用程序的。这不适用于仅在web应用程序中有效的winforms
//to run process as another user
//create these global variables on the first
//form or piece of code in your program
class usernameGlobalVariable
{
public static string var = "";
}
class passwordGlobalVariable
{
public static SecureString var;
}
// use these as event handlers for text fields
//for your login form
private void usernameTextBox_TextChanged(object sender, EventArgs e)
{
usernameGlobalVariable.var = usernameTextBox.Text;
}
private void passwordTextBox_TextChanged(object sender, EventArgs e)
{
SecureString passWord = new SecureString();
foreach (char c in passwordTextBox.Text.ToCharArray())
{
passWord.AppendChar(c);
}
passwordGlobalVariable.var = passWord;
}
//put this on form that launches program
//this assigns variables for process.start
//change fileName to path and name of program
// use \\ in paths
string fileName = "c:\\hdatools\\Ping2.exe";
string arguments = "";
string domain = "domain";
//start the process
//put this on the page along w the above variables that
//launches the app as another user
//the .var variables are global
{
Process.Start(
fileName,
arguments,
usernameGlobalVariable.var,
passwordGlobalVariable.var,
domain);
}