c#不能以其他形式打印变量文本

本文关键字:式打印 变量 文本 其他 不能 | 更新日期: 2023-09-27 18:14:26

我试图编码程序,我有两个形式(Form1是用于日志和Form2是空的,现在,但我想打印日志:'Name' + 'Surename'从DB)。

我创建了一个类User,它有Name和Surename(都是公共静态字符串)和GetUserInfo()方法,通过用户的登录获取Name和Surename。如果我打印User。名称+用户。程序检查登录名和密码后,MsgBox中的Surename一切正常,但在Form2加载后,

label1.Text = "User: " + User.name + " " + User.surename;
public Form2()方法中的

只显示User:,没有其他内容。

Form1:

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    }
    private void textBox2_TextChanged(object sender, EventArgs e)
    {
    }
    private void button1_Click(object sender, EventArgs e)
    {
        string login = textBox1.Text;
        string pass = textBox2.Text;
        SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)'MSSQLLocalDB;AttachDbFilename=C:'Users'xxx'Documents'Visual Studio 2015'Projects'*'*'Database1.mdf;Integrated Security=True;Connect Timeout=30");
        SqlCommand query = new SqlCommand("Select * from Users where login='" + login + "' AND password ='" + pass + "'", connection);
        connection.Open();

        SqlDataReader Reader = query.ExecuteReader();
        int count = 0;
        Form1 form1 = new Form1();
        Form2 form2 = new Form2();
        while (Reader.Read())
        {
            count += 1;
        }
        if (count == 1)
        {
            this.Hide();
            form2.Show();
            User.GetUserInfo(login);
            MessageBox.Show(User.name + " " + User.surename);
        }
        else
            MessageBox.Show("Bad Login");
    }
}

Form2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
        label1.Text = "User: " + User.name + " " + User.surename;
    }
    private void label1_Click(object sender, EventArgs e)
    {
    }
    private void label1_Click_1(object sender, EventArgs e)
    {
    }
}

和用户类:

    public class User
{
    public static string name { get; set; }
    public static string surename { get; set; }
    public static void GetUserInfo(string login)
    {

        using (SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)'MSSQLLocalDB;AttachDbFilename=C:'Users'xxx'Documents'Visual Studio 2015'Projects'*'*'Database1.mdf;Integrated Security=True;Connect Timeout=30"))
        using (SqlCommand query = new SqlCommand("Select FirstName, LastName from Users where login='" + login + "'", connection))
        {
            connection.Open();

            SqlDataReader Reader = query.ExecuteReader();
            while (Reader.Read())
            {
                User.name = Reader["FirstName"].ToString();
                User.surename = Reader["LastName"].ToString();
            }
        }
    }
}

谢谢!

c#不能以其他形式打印变量文本

使用以下代码:

User.GetUserInfo(login);    
this.Hide();
Form2 form2 = new Form2();
form2.Show();

因为您需要先设置namesurename的值,然后再使用它。

在本例中,首先显示Form2,然后设置值

为Form1添加公共变量或属性,以便您可以访问它们:

在Form1:

public User user; 
....
user.name = Textbox1.Text; 
user.surname = Textbox2.Text; 

In your Form2:

Form frm = new Form1();
frm.ShowDialog();
label1.Text = "User: " + frm.user.name + " " + frm.user.surename;
frm.Dispose();

所以你的问题是,在User类的属性被填充之前,你正在创建Form2

原因如下:

label1.Text = "User: " + User.name + " " + User.surename;

Form2的构造函数中调用。这意味着无论何时使用

初始化此表单
Form2 form2 = new Form2(); 

构造函数中的所有代码执行。因此,标签文本将在创建表单时设置。

在此之后调用

User.GetUserInfo(login);, Form2的数据将为空,因为表单已经创建。

一个可能的解决方案是

在form2加载事件中设置标签,并在form2.Show();之前调用User.GetUserInfo(login);

User.GetUserInfo(login);之后调用Form2 form2 = new Form2();

您正在Form2的构造函数中设置标签文本。此时它们还没有值,因为还没有从数据库中读取数据,所以标签将简单地读取:

用户:

它不会改变,直到你再次更新它的值。一旦对User.GetUserInfo的调用成功完成,您需要调用Form2上的方法来更新标签文本。

    if (count == 1)
    {
        this.Hide();
        form2.Show();
        User.GetUserInfo(login);
        // Update the label text here
        MessageBox.Show(User.name + " " + User.surename);

或者交换获取用户信息和构造Form2的顺序:

    if (count == 1)
    {
        this.Hide();
        User.GetUserInfo(login);
        form2 = new Form2();
        form2.Show();

两种方式都可以,你选择哪一种取决于你需要对你的表单做什么。