如何将用户在欢迎屏幕中输入的 return 值在关闭后显示到主屏幕?

How to return values, entered by the user in a welcome screen, to the main screen after closed?

根据我之前的 post。我让它正常工作。

在欢迎屏幕中,用户输入 his/her 详细信息。比如名字和姓氏。然后用户单击下一步按钮。欢迎屏幕关闭,主 window 打开。

但是,在 main.cs 文件中无法再访问名字和姓氏。

欢迎画面代码:

    public string username;
    public string usersurname;

    static private Form Sender;

    static public void Run(Form sender)
    {
        if (sender == null)
            throw new ArgumentNullException();

        Sender = sender;
        new WelcomeForm().ShowDialog();
    }
   
    public WelcomeForm()
    {
        InitializeComponent();
    }

    private void sign_in_Click(object sender, EventArgs e)
    {   
        username = textBox1.Text;
        usersurname = textBox2.Text;
        Close();
    }

我的主要window代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        WelcomeForm.Run(this);
    }

    public Form1()
    {
        InitializeComponent();
    }

如何在我的 main.cs 文件中访问用户名和用户姓氏?

更新代码(欢迎屏幕):

    private WelcomeFormInputData InputData = new WelcomeFormInputData();

    static private Form Sender;

    static public WelcomeFormInputData Run(Form sender)
    {
        if (sender == null)
            throw new ArgumentNullException();
        Sender = sender;
        var form = new WelcomeForm();
        return form.ShowDialog() == DialogResult.OK ? form.InputData : null;
    }

    private void ButtonValidate_Click(object sender, EventArgs e)
    {
        InputData.UserName = textBox1.Text;
        InputData.UserSurname = textBox2.Text;
        DialogResult = DialogResult.OK;
        Close();
    }
    public WelcomeForm()
    {
        InitializeComponent();
    }
public class WelcomeFormInputData
{
  public string UserName { get; set; }
  public string UserSurname { get; set; }
}

您可以简单地将 Run 方法改进为:

static public WelcomeForm Run(Form sender)
{
    if (sender == null)
        throw new ArgumentNullException();
    Sender = sender;
    var form = new WelcomeForm();
    return form.ShowDialog() == DialogResult.OK ? form : null;
}

您需要使用按钮管理此对话框结果:

private void ButtonValidate_Click(object sender, EventArgs e)
{
  UserName = textBox1.Text;
  UserSurname = textBox2.Text;
  DialogResult = DialogResult.OK;
  Close();
}

每个表单都有一些属性来管理:

https://docs.microsoft.com/dotnet/api/system.windows.forms.form.dialogresult

默认情况下,关闭表单时结果为 DialogResult.None

非空结果表示用户已经验证了某些内容,并且打开器表单可以通过分配 public 您应该设置为外部只读属性的字段来使用结果:

public string UserName { get; private set; }
public string UserSurname { get; private set; }

另一个意思是return一个结构化数据实体而不是表单本身:

public class WelcomeFormInputData
{
  public string UserName { get; set; }
  public string UserSurname { get; set; }
}

因此您可以在欢迎表单中更改它:

private WelcomeFormInputData InputData = new WelcomeFormInputData();

static public WelcomeFormInputData Run(Form sender)
{
    if (sender == null)
        throw new ArgumentNullException();
    Sender = sender;
    var form = new WelcomeForm();
    return form.ShowDialog() == DialogResult.OK ? form.InputData : null;
}

private void ButtonValidate_Click(object sender, EventArgs e)
{
  InputData.UserName = textBox1.Text;
  InputData.UserSurname = textBox2.Text;
  DialogResult = DialogResult.OK;
  Close();
}

这里我们return只有经过验证的数据。

您可以根据需要命名工件,使其最有意义、最简单和最连贯。

注意:如果需要控制MainForm专业化,可以通过MainForm更改Form。

static public WelcomeForm Run(MainForm sender)

但也许你可以放弃 Sender 用法,因为在主窗体中你调用 Run 然后你可以显示它并使用输入的数据:

static public WelcomeFormInputData Run()
{
    var form = new WelcomeForm();
    return form.ShowDialog() == DialogResult.OK ? form.InputData : null;
}

从主窗体开始:

var userdata = WelcomeForm.Run();
Show();
if ( userdata != null ) 
{
  ... userdata.UserName ...
  ... userdata.UserSurname ...
}

您可以像 WelcomeForm.username 一样使用,您可以创建 class 调用 LocalVar 来访问和存储来自任何形式的任何数据,例如

in `LocalVar` class use this type of variables:

`public static string username = "";`
`public static string usersurname = "";`

在此之后,在关闭 WelcomeForm 之前,执行如下代码:

private void sign_in_Click(object sender, EventArgs e)
{   
    LocalVar.username = textBox1.Text;
    LocalVar.usersurname = textBox2.Text;
    Close();
}    



and now you can usr `LocalVar.username` anywhere in project.