【问题标题】:Retrieve Values from One Form to Another in Windows application using C# [duplicate]使用 C# 在 Windows 应用程序中将值从一种形式检索到另一种形式 [重复]
【发布时间】:2009-09-15 07:42:06
【问题描述】:

我有一个登录表单和 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 表单中。

谁能告诉我应该如何更改编码,以便我可以检索用户在登录表单中输入的值以显示在更改密码表单中?

请帮帮我! 提前致谢!

【问题讨论】:

  • 实现一个共享或静态属性...这就是诀窍...您的代码将实例化一个新对象 frmLogin objLogin = new frmLogin();

标签: c#


【解决方案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();

【讨论】:

    【解决方案2】:

    您正在创建登录表单的局部变量,因此它将在其作用域后被销毁,并且 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;
    

    【讨论】:

      【解决方案3】:

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

      objLogin.ShowDialog();
      

      在您的代码中...

      【讨论】:

      • 我有一个MDI表单,用户登录成功后会显示。菜单控件用于打开更改密码表单。执行程序时第一个表单是登录表单,第二个表单是mdi表单,mdi表单由菜单控件组成,在菜单控件的帮助下,用户可以打开更改密码表单。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      相关资源
      最近更新 更多