【问题标题】:Getting values from two or more forms C#从两个或多个表单 C# 中获取值
【发布时间】:2012-07-16 04:55:32
【问题描述】:

好的,在用户成功登录后,一个警告框会显示用户名,然后会弹出另一个表单,让用户可以更改他的密码。我想在条件语句中使用用户名的值(来自登录表单)来更改密码。

我如何获得来自另一个表单的这个值?谢谢。

在此处查看图片:

【问题讨论】:

  • 一种方法是在登录表单中使用公共属性作为您可以在其他表单中访问的用户名。

标签: c# sql winforms connect


【解决方案1】:

什么让你感到困惑? 将用户名传递给下一个表单,我看不出第 3 个表单必须知道其他任何信息的原因。这将是一种无用的依赖。

【讨论】:

  • 取决于您如何显示第三种形式。向我们展示一些内部逻辑。但通常应该是这样的(我想):如果授权成功,您将打开欢迎对话框。比你打开第三种形式,对吧?在那里创建一个名为 UserName 的属性(或使用用户名参数创建一个构造函数)。可能有一些我不知道的细微差别。让我知道在这种情况下更具体
  • 我试过这个。它没有任何错误,但没有显示该值。 msdn.microsoft.com/en-us/library/f6525896(v=vs.90).aspx
  • 为控件设置公共修饰符是不好的做法。这通常意味着您的架构中存在问题。正如我所说,在这种情况下使用属性或构造函数。这是我为您制作的示例。 Download
  • @Artiom 非常感谢。这是否也适用于要传递的两个或多个值?
  • @CantHandleMeBabe 当然,这取决于您的想象力。
【解决方案2】:

一种方法是在登录表单中使用公共属性作为用户名,您可以在其他表单中访问该用户名。

例如:

在 LoginForm 中,创建一个公共属性

public string UserName { get; private set;}

在 LoginForm 中填写该属性并将其传递给其他表单。在创建第二种形式的对象时,您可以从第一种形式访问数据,然后将其传递给其他形式的属性/构造函数。

例如,

FacultyForm facultyForm=new FacultyForm();
facultyForm.UserName = loginForm.UserName; //in this case you have to create a property in other form too. 

这只是其中一种方法。

这能解决问题吗?

另一种方法是使用委托/事件。

【讨论】:

  • 刚找到一个比较相似的帖子还有stackoverflow.com/questions/3552169/…
  • 如何将其传递给另一个表单?
  • 在创建第二种形式的对象时,您可以从第一种形式访问数据,然后将其传递给其他形式的属性/构造函数。例如,FacultyForm FacultyForm=new FacultyForm(); FacultyForm.UserName = loginForm.UserName; //在这种情况下,您也必须创建其他形式的属性。这只是其中一种方法。
【解决方案3】:

将登录表单的用户名文本框设为公开,以便您可以从任何其他表单访问。

您可以更改 LoginForm.designer.cs 中的代码

【讨论】:

  • 公共控制是一个糟糕的做法。最好避免它。顺便说一句 - 没有理由这样做
【解决方案4】:

您可以创建一个Custom Event,它将在成功登录时提出,您可以使用CustomEventArgs 传递信息,然后在您启动第二个表单时使用它。

类似这样的:

Form1

public partial class Form1 : Form
{

    Logon logon;
    PasswordChange pass;

    public Form1()
    {
        InitializeComponent();

        logon = new Logon();
        logon.raiseLoginEvent += new Logon.LoginSuccesful(logon_raiseLoginEvent);
        logon.ShowDialog();

    }

    void logon_raiseLoginEvent(object sender, LoginEventArgs e)
    {
        pass = new PasswordChange();
        pass.LoginName = e.Login;
        pass.ShowDialog();
    }


}

登录

public partial class Logon : Form
{
    public delegate void LoginSuccesful(object sender, LoginEventArgs e);
    public event LoginSuccesful raiseLoginEvent;

    public Logon()
    {
        InitializeComponent();
    }


    private void Logon_FormClosing(object sender, FormClosingEventArgs e)
    {
        LoginEventArgs ev = new LoginEventArgs("Admin");
        raiseLoginEvent(this, ev);
    }
}

public class LoginEventArgs : EventArgs
{
    public LoginEventArgs(string s)
    {
        loginName = s;
    }
    private string loginName;
    public string Login
    {
        get { return loginName; }
        set { loginName = value; }
    } 
}

密码更改

public partial class PasswordChange : Form
{
    public PasswordChange()
    {
        InitializeComponent();
    }

    public string LoginName
    {
        get {return  textBox1.Text; }
        set { textBox1.Text = value; }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    相关资源
    最近更新 更多