从表单中的方法获取值到另一种形式

时间:2011-11-17 01:23:24

标签: c# winforms

我在使用另一种形式的表格方法时遇到问题

编辑:

我按这样编码: (我在textbox1中输入了123)

public class Form1 : Form
{
    private string user_code;

  public string UserCode
    {
        get { return user_code; }
    }

    public bool LoginUser()
    {
   user_code = null;


    if(textBox1.Text=="123"){
          user_code="usercode";
             }
         * 
         */
    }
}

并在form2中使用:

          Form1 form1 = new Form1();
          form1.LoginUser();

        MessageBox.Show(form1.UserName);

现在输出是一个空字符串,我用断点检查,我看到当我在form2中调用loginuser时,textbox1中的值变为空,如果条件变为false 你怎么看待问题??

4 个答案:

答案 0 :(得分:2)

您的代码无法编译

使用out参数执行函数时,必须将此参数标记为 out

objfrm1.loginuser(out U, out v, out w, out a,out b, out c);

但最好使用公共属性代替参数

例如:

public class Form1 : Form
    {
        private string user_pass;
        private string user_name;
        private bool insert_ability;
        private bool update_ability;
        private bool delete_ability;

        public string UserPass
        {
            get { return user_pass; }
        }

        public string UserName
        {
            get { return user_name; }
        }

        public bool InsertAbility
        {
            get { return insert_ability; }
        }

        public bool UpdateAbility
        {
            get { return update_ability; }            
        }

        public bool DeleteAbility
        {
            get { return delete_ability; }           
        }

        public bool LoginUser()
        {
            /*
              Your code here
              user_pass = "userpass";
              user_name = "username";
              insert_ability = true;

              update_ability = false;
              delete_ability = false;
             * 
             */
        }
    }

和用法:

Form1 form1 = new Form1();
            form1.LoginUser();

            MessageBox.Show(form1.UserName);

P.S。请不要使用变量名,如u,v,w,a,b,c等。这是一种不好的做法。

答案 1 :(得分:1)

根据您的代码,当某人在表单上的文本框中输入用户名和密码时,我假设表单1调用该方法。在不了解您使用的数据阅读器或文本框的更多信息的情况下,我认为在第一个文本框检查时调用将失败并返回空字符串。您是否尝试过设置文本框,或者更好地将它们绑定到您可以在表单1中调用methid之前从表单2设置的属性?

编辑:根据您的更新添加代码以显示我的意思。我已经标记了对代码的更改。

public class Form1 : Form
{
    private string user_code;

  public string UserCode
    {
        get { return user_code; }
    }

    private string _testData;                //THIS IS NEEDED
    public string TestData                   //THIS IS NEEDED
    {
        set { _testData = value;}        //THIS IS NEEDED
    }

    public bool LoginUser()
    {
        user_code = null;
        if(textBox1.Text=="123" || TestData=="123")   //THIS IS NEEDED
        {
            user_code="usercode";
        }
    }
}

并在form2中使用:

Form1 form1 = new Form1();
form1.TestData = "123";  //THIS IS NEEDED
form1.LoginUser();

MessageBox.Show(form1.UserName);

答案 2 :(得分:0)

编辑代码后,它不会再次编译 你确定发布了真实的代码吗?

问题在于:

if(textBox1.Text==123)

TextBox.Textstring属性,123int

您无法直接比较stringint值。

那你想做什么?

是否要从Form1打开Form2,在Form1的文本框中输入用户名和密码,然后将其传递到Form2,对吗?

修改 你的解决方案

class FormLogin : Form
    {
        public string UserName
        {
            get { return textBoxUserName.Text; }
            set { textBoxUserName.Text = value; }
        }

        public string Password
        {
            get { return textBoxPassword.Text; }
            set { textBoxPassword.Text = value; }
        }

        public FormLogin()
        {
            this.Closing += new System.ComponentModel.CancelEventHandler(FormLogin_Closing);
        }

        void FormLogin_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (this.DialogResult == DialogResult.Cancel) return;

            if (!LoginUser(UserName, Password))
            {
                MessageBox.Show("Username or password is incorrect");
                e.Cancel = true;
            }

        }

        bool LoginUser(string userName, string password)
        {
            // check login and password in database for example

            return true;
        }
    }

    class Form3 :Form
    {
        void LoginButtonClick()
        {
            FormLogin formLogin = new FormLogin();
            formLogin.UserName = "LastUserName";
            //uncomment if you want hide main form
            //this.Hide(); 
            if (formLogin.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show(string.Format("Congratulation! You are logged as {0}", formLogin.UserName));
            }

            //this.Show();
        }
    }

不要忘记在FormLogin上添加两个按钮:确定DialogResult属性确定取消 DialogResult 取消

答案 3 :(得分:-1)

我用this link解决了我的问题:

  

解决方案1适用于ASP.NET,据我所知,这是一个Windows   表格应用程序所以在这种情况下,最简单的方法就是通过   从表格1到表格2的引用如下:

     

表格1:

private void button1_Click(object sender, EventArgs e)
{
    Form2 a = new Form2(this);
    a.Show();
    this.Hide();
}
     

表格2:

public partial class Form2 : Form
{
    Form1 mainForm;

    public Form2(Form1 mainForm)
    {
        InitializeComponent();

        this.mainForm = mainForm;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        mainForm.Show();
        this.Hide();
    }
}
     

在调用this.Hide()时,表单2还有一件事:

     

表单仍然存在于内存中,它只会被隐藏起来   用户。如果这是你的意图,那就没问题了。但是,如果你   想要处理表单2,请改为调用this.Close()