使用C#在Windows应用程序中从一个窗体检索值到另一个窗体

时间:2009-09-15 07:42:07

标签: c#

我有一个登录表单和ChangePassword表单。我想检索登录时在登录表单中输入的用户名值。

我创建了一个名为RetUserName的属性,如下所示:

 public partial class frmLogin : Form
    {
        private string UseNam;
        public string RetUserName
        {
            get { return UseNam; }
            set { UseNam = value;}
        }
   }

在按钮单击事件中,我编写了以下代码,以便设置属性的值:

this.RetUserName = (string)txtUserName.Text;

现在要检索属性的值,我在changepassword表单的form_load事件中使用了以下编码:

Form_Load事件:

        frmLogin objLogin = new frmLogin();
        string UserName1 = objLogin.RetUserName;
        MessageBox.Show("NAME : " + UserName1);
        txtUserName.Text = UserName1;

现在,当我执行上述程序时不会产生任何错误,但是用户在登录表单中输入的值不会显示在changepassword表单中。

任何人都可以告诉我如何更改编码,以便我可以检索用户在登录表单中输入的值,以便以changepassword形式显示?

请帮帮我! 提前谢谢!

3 个答案:

答案 0 :(得分:1)

您实际上正在创建登录表单的新实例,该实例不知道您输入的用户名。

我建议您在更改密码表单中添加一个属性UserName。并在表单的调用代码中分配值。像这样:

//create and show login dialog
frmLogin objLogin = new frmLogin();
objLogin.ShowDialog();

//create changepassword form       
frmChangePwd objChangePwd = new frmChangePwd();
objChangePwd.UserName = objLogin.RetUserName;
objChangePwd.ShowDialog();

答案 1 :(得分:0)

您正在创建登录表单的本地变量,因此它将在其范围之后被销毁,并且随之而来的UseNam的值也将丢失。 您必须将其存储在可以在您想要使用它的位置访问的内容。

您也可以通过以下方式(以及其他方式)来实现:

// This class is mainly used to transfer values in between different components of the system
    public class CCurrent
    {
        // Currently logged in user
        public static string UserName = "";

        // Indicates to whole system whether database is Valid and connectable or not ?
        public static Boolean DatabaseValid = false;
        // Indicates whether we are able to connect databse or not.
        public static Boolean DatabaseConnectable = false;

    }

现在,您可以在代码中执行以下操作:

    frmLogin objLogin = new frmLogin();
    objLogin.ShowDialog();
    CCurrent.UserName = objLogin.RetUserName;
    MessageBox.Show("NAME : " + CCurrent.UserName);
    txtUserName.Text = CCurrent.UserName;

答案 2 :(得分:0)

您如何显示objLogin表单?
应该像

objLogin.ShowDialog();
你的代码中的

......