如何跨窗体将登录用户名传入主窗体TextBlock控件
实现登录成功后将用户名显示到主窗体TextBlock
步骤1:为主窗体的TextBlock设置可访问名称
首先修改主窗体的XAML代码,给TextBlock添加x:Name属性,让后台代码能引用并修改它的内容:
<TextBlock x:Name="tbUsername" FontSize="12" FontWeight="Bold" Margin="0 15 0 7" TextAlignment="Center" HorizontalAlignment="Center" Foreground="Black"> </TextBlock>
步骤2:修改主窗体构造函数以接收用户名参数
假设主窗体类是SplashScreen,在其后台代码(SplashScreen.xaml.cs)中添加带参数的构造函数,用于接收并显示用户名:
public SplashScreen(string username) { InitializeComponent(); // 直接赋值用户名,也可以添加欢迎文本,按需调整 tbUsername.Text = username; } // 若需保留无参构造函数(满足设计器需求),可重载实现: public SplashScreen() { InitializeComponent(); }
步骤3:在登录逻辑中传递用户名到主窗体
修改登录窗体的登录成功分支代码,创建主窗体实例时传入登录的用户名:
if (dr.Read() == true) { string loggedInUsername = ltxtusername.Text; // 传入用户名创建主窗体并显示 new SplashScreen(loggedInUsername).Show(); this.Hide(); }
重要提示:修复SQL注入漏洞
你的原登录代码直接拼接SQL字符串,存在严重的SQL注入风险,建议立即改为参数化查询:
con.Open(); // 使用参数化查询避免SQL注入 string loginQuery = "SELECT * FROM tbl_user WHERE username = ? AND password = ?"; cmd = new OleDbCommand(loginQuery, con); // OleDb参数顺序需与SQL占位符顺序一致 cmd.Parameters.AddWithValue("@username", ltxtusername.Text); cmd.Parameters.AddWithValue("@password", ltxtpassword.Password); OleDbDataReader dr = cmd.ExecuteReader();
内容的提问来源于stack exchange,提问作者Hamid
相关产品推荐
相关产品推荐

