c#通过表单传递值

本文关键字:表单 | 更新日期: 2023-09-27 18:16:00

我正在Visual Studio 2015中用c#构建一个表单应用程序。首先,我做了一个用户登录表单使用2个文本框和1个按钮。所有我想做的是传递的值从包含用户名的文本框的标签位于另一种形式的形式被称为主菜单。这是我对登录表单所做按钮的代码:

private void button_login(object sender, EventArgs e)
{
   MainMenu username = new MainMenu();
   username.Value1 = textBox1.Text;
   this.Hide();
   MainMenu ss = new MainMenu();                
   ss.Show();
}

和我想传递值的MainMenu表单的代码如下:

private string value1 = string.Empty;
    public string Value1
    {
        set { value1 = value; }
        get { return value1; }            
    }
    private void MainMenu_Load(object sender, EventArgs e)
    {
        label7.Text = Value1;
    }

正如你所看到的,我已经在MainMenu表单中创建了一个属性,可以从登录表单中访问,这样我就可以直接在MainMenu表单中传输textbox1的值。问题是label7中的文本在运行时仍然为空,我不明白为什么。我错过了一些东西从我的代码或我做的事情完全错误?如有任何建议,不胜感激

c#通过表单传递值

您实际上创建了两个窗体:usernamess。你设置usernameValue1,但是你显示ss,你没有设置它的Value1。所以你应该显示username:

private void button_login(object sender, EventArgs e)
{
   MainMenu username = new MainMenu();
   username.Value1 = textBox1.Text;
   this.Hide();
   username.Show(); // and not ss.Show();
}

还有一个提示,为变量使用更好的名称。下面的代码做了完全相同的事情,但更容易理解:

private void loginButton_Click(object sender, EventArgs e)
{
   var mainMenuForm = new MainMenu();
   mainMenuForm.UserName = userNameTextBox.Text;
   this.Hide();           
   mainMenuForm.Show();
}
class MainMenu : Form
{
    // This is an "Auto-Implemented Property".
    // Auto-Implemented Properties are used as a shortcut of what you have done.
    // Google them for more information.
    public string UserName { get; set; }
    private void MainMenu_Load(object sender, EventArgs e)
    {
        userNameLabel.Text = UserName;
    }
}

MainMenu usernameMainMenu ss是两个不同的实例(属于同一个MainMenu类,但这是一个细节)。您正在设置username实例的成员变量Value1,但是您正在显示ss实例。考虑以下代码

private void button_login(object sender, EventArgs e)
{
   MainMenu username = new MainMenu();
   username.Value1 = textBox1.Text;
   this.Hide();
   usename.Show();
}

如果使用了两个不同的MainMenu对象,那么正确的代码应该是

   MainMenu username = new MainMenu();
   username.Value1 = textBox1.Text;
   this.Hide();               
   username .Show();

作为一个完全不同的解决问题的方法:

另一个选择是在项目中创建一个静态类,它将容纳任何您想要重用的变量。

所以让我们说你的静态类是调用全局变量,成功登录后,你会设置你需要全局变量。用户名= textBox1.Text.

然后,当您再次需要该值时,您可以使用global . username访问它。

当您需要将变量值从一个表单传递到另一个表单时,请相应地编写第二个表单的构造函数,并在创建第二个表单的对象时传递该值。

private void button_login(object sender, EventArgs e)
{
   MainMenu ss= new MainMenu(textBox1.Text);
   this.Hide();            
   ss.Show();
}
class MainMenu : Form
{
    // This is an "Auto-Implemented Property".
    // Auto-Implemented Properties are used as a shortcut of what you have done.
    // Google them for more information.
    public string UserName { get; set; }
    private void MainMenu(string userName)
    {
        this.UserName = userName;
    }
}

创建公共属性并在另一个类的每个实例中访问它们对于OOP来说是不好的做法。