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();
}
}
}
}
谢谢!
使用以下代码:
User.GetUserInfo(login);
this.Hide();
Form2 form2 = new Form2();
form2.Show();
因为您需要先设置name
和surename
的值,然后再使用它。
在本例中,首先显示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();
两种方式都可以,你选择哪一种取决于你需要对你的表单做什么。