C#在窗体之间传递字符串



新手问题在两种形式之间传递可验证性,它是一个字符串"LoggedUserName";

我有启动LoggingFrm:的MainForm

public void Form1_Load(object sender, EventArgs e)
{

LoggingFrm newLogin = new LoggingFrm();

newLogin.ShowDialog();
if(string.IsNullOrEmpty(newLogin.LoggedUser))
{
Close();
}
else
{
User = newLogin.LoggedUser;
tsslUser.Text = Uzytkownik;
LoggedUser = User;

}
}

和日志frm:

private string User;
public string LoggedUser 
{ 
get
{
return User;
}
set
{
User = value;
}
}
private void btnLogIn_Click(object sender, EventArgs e)
{

String user = tbUser.Text;
String pass = tbPassword.Text;
if (IsLogin(user, pass))                  // Mysql code behind
{
MessageBox.Show($"Logged as {user}!");
LoggedUser = tbUser.Text;            //Setting public string
Close();
}
else
{
MessageBox.Show($"User {user} not found!");
}
}

和的第三种形式

LoggingFrm frm = new LoggingFrm();
lblTest.Text = frm.LoggedUser

在这一点上,它工作得很好,但如果我试图将字符串转换为任何不同的形式,它都不起作用——字符串为null。

无论我是试图从LoggingFrm还是MainFrm 传递它

有什么想法吗?

如果您希望使用LoggingFrm.LoggedUser道具始终返回一次设置的值,则使适当的成员字段static:

private static string User;

每个实例化LoggingFrm的类现在都可以通过LoggedUser属性达到值,至少如果它曾经被设置过的话。

ps:表单是IDisposable,在使用块时使用它们!

在该示例中,您没有将LoggedUser传递给第三种形式。您正在以第三种形式创建LoggingFrm的一个新实例。这是一个与您在Form1_Load方法中创建的对象完全不同的对象-没有一个非静态成员会";结转;实例之间。除非您在LoggingFrm的构造函数中手动设置某些内容,否则当您以第三种形式创建新实例时,所有内容都将是默认值。这就是为什么stringnull

为了传递在LoggingFrm中输入的LoggedUser值,一个选项是将该值存储在Form1中。您已经在属性或字段UserLoggedUserelse块中执行了此操作。然后,当您创建第三个表单的实例时,您需要将存储在Form1中的值传递给第三个窗体的构造函数。

public class ThirdForm
{
public ThirdForm(string loggedUser)
{
LoggedUser = loggedUser;
}

private string LoggedUser { get; set; }
}
public class Form1
{
private launchThirdFrmBtn_Click(object sender, EventArgs e)
{
ThirdForm frm = new ThirdForm(User);
frm.Show();
}
}

最新更新