上篇文章
根据我之前的帖子。我让它正常工作。
在欢迎屏幕中,用户输入他/她的详细信息。比如名字和姓氏。然后用户单击"下一步"按钮。欢迎屏幕关闭,主窗口打开。
但是,在主文件中不再可以访问名称和姓氏.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();
}
我的主窗口代码:
private void Form1_Load(object sender, EventArgs e)
{
WelcomeForm.Run(this);
}
public Form1()
{
InitializeComponent();
}
我如何在我的主文件中访问用户名和用户.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://learn.microsoft.com/dotnet/api/system.windows.forms.form.dialogresult
默认情况下,关闭窗体时DialogResult.None
结果。
非 null 结果表示用户已验证某些内容,并且打开器窗体可以通过分配应设置为外部只读属性的公共字段来使用结果:
public string UserName { get; private set; }
public string UserSurname { get; private set; }
另一种方法是返回结构化数据实体而不是表单本身:
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();
}
在这里,我们只返回经过验证的数据。
您可以根据需要命名工件,使其最有意义,最简单,最连贯。
注意:如果需要控制主窗体专用化,则可以按主窗体更改窗体。
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
一样使用,你可以创建一个名为LocalVar的类来访问和存储来自任何形式的任何数据,例如
in `LocalVar` class use this type of variables:
`public static string username = "";`
`public static string usersurname = "";`
在此之后,在关闭欢迎窗体之前,请像这样编写代码:
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.