C# 通过表单c传递值#
我正在Visual Studio 2015的C#中构建表单应用程序。首先,我使用2个文本框和1个按钮创建了一个用户登录表单。我所要做的就是将包含用户名的文本框中的值传递到另一个表单上的标签上,该表单称为MainMenu。这是我对登录表单所做的按钮的代码:C# 通过表单c传递值#,c#,winforms,C#,Winforms,我正在Visual Studio 2015的C#中构建表单应用程序。首先,我使用2个文本框和1个按钮创建了一个用户登录表单。我所要做的就是将包含用户名的文本框中的值传递到另一个表单上的标签上,该表单称为MainMenu。这是我对登录表单所做的按钮的代码: private void button_login(object sender, EventArgs e) { MainMenu username = new MainMenu(); username.Value1 = textBo
private void button_login(object sender, EventArgs e)
{
MainMenu username = new MainMenu();
username.Value1 = textBox1.Text;
this.Hide();
MainMenu ss = new MainMenu();
ss.Show();
}
我要传递值的主菜单表单的代码如下:
private string value1 = string.Empty;
public string Value1
{
set { value1 = value; }
get { return value1; }
}
private void MainMenu_Load(object sender, EventArgs e)
{
label7.Text = Value1;
}
如您所见,我在MainMenu表单中创建了一个属性,可以从登录表单访问该属性,这样我就可以在MainMenu表单中直接从textbox1传输值。问题是label7中的文本在运行时仍然是空的,我不明白为什么。我是在代码中遗漏了什么,还是在做完全错误的事情?
任何建议都将不胜感激
主菜单用户名
和主菜单ss
是两个不同的实例(属于相同的主菜单
类,但这是一个细节)。
您正在设置username
实例的memeber变量Value1
,但正在显示ss
实例。
考虑这个代码
private void button_login(object sender, EventArgs e)
{
MainMenu username = new MainMenu();
username.Value1 = textBox1.Text;
this.Hide();
usename.Show();
}
MainMenu用户名
和MainMenu ss
是两个不同的实例(属于相同的MainMenu
类,但这是一个细节)。
您正在设置username
实例的memeber变量Value1
,但正在显示ss
实例。
考虑这个代码
private void button_login(object sender, EventArgs e)
{
MainMenu username = new MainMenu();
username.Value1 = textBox1.Text;
this.Hide();
usename.Show();
}
您使用的是两个不同的MainMenu对象,正确的代码应该是
MainMenu username = new MainMenu();
username.Value1 = textBox1.Text;
this.Hide();
username .Show();
您使用的是两个不同的MainMenu对象,正确的代码应该是
MainMenu username = new MainMenu();
username.Value1 = textBox1.Text;
this.Hide();
username .Show();
实际上,您创建了两个表单:
username
和ss
。您设置了username
的Value1
,但显示了未设置其Value1
的ss
。因此,您应该显示用户名
:
private void button_login(object sender, EventArgs e)
{
MainMenu username = new MainMenu();
username.Value1 = textBox1.Text;
this.Hide();
username.Show(); // and not ss.Show();
}
还有一个提示,为变量使用更好的名称。下面的代码做了完全相同的事情,但更容易理解:
private void loginButton_Click(object sender, EventArgs e)
{
var mainMenuForm = new MainMenu();
mainMenuForm.UserName = userNameTextBox.Text;
this.Hide();
mainMenuForm.Show();
}
class MainMenu : Form
{
// This is an "Auto-Implemented Property".
// Auto-Implemented Properties are used as a shortcut of what you have done.
// Google them for more information.
public string UserName { get; set; }
private void MainMenu_Load(object sender, EventArgs e)
{
userNameLabel.Text = UserName;
}
}
实际上,您创建了两个表单:
username
和ss
。您设置了username
的Value1
,但显示了未设置其Value1
的ss
。因此,您应该显示用户名
:
private void button_login(object sender, EventArgs e)
{
MainMenu username = new MainMenu();
username.Value1 = textBox1.Text;
this.Hide();
username.Show(); // and not ss.Show();
}
还有一个提示,为变量使用更好的名称。下面的代码做了完全相同的事情,但更容易理解:
private void loginButton_Click(object sender, EventArgs e)
{
var mainMenuForm = new MainMenu();
mainMenuForm.UserName = userNameTextBox.Text;
this.Hide();
mainMenuForm.Show();
}
class MainMenu : Form
{
// This is an "Auto-Implemented Property".
// Auto-Implemented Properties are used as a shortcut of what you have done.
// Google them for more information.
public string UserName { get; set; }
private void MainMenu_Load(object sender, EventArgs e)
{
userNameLabel.Text = UserName;
}
}
作为一种完全不同的解决问题的方法: 另一种选择是在项目中创建一个静态类,该类将包含您希望重用的任何变量 假设您的静态类是call Globals,在成功登录后,您将设置所需的变量ie Globals.Username=textBox1.Text
然后,无论您在哪里再次需要该值,都可以使用Globals.Username访问它 这是一种完全不同的解决问题的方法: 另一种选择是在项目中创建一个静态类,该类将包含您希望重用的任何变量 假设您的静态类是call Globals,在成功登录后,您将设置所需的变量ie Globals.Username=textBox1.Text
然后,无论您在哪里再次需要该值,都可以使用Globals.Username访问它 当需要将变量值从一个表单传递到另一个表单时,相应地编写第二个表单的构造函数,并在创建第二个表单的对象时传递值
private void button_login(object sender, EventArgs e)
{
MainMenu ss= new MainMenu(textBox1.Text);
this.Hide();
ss.Show();
}
class MainMenu : Form
{
// This is an "Auto-Implemented Property".
// Auto-Implemented Properties are used as a shortcut of what you have done.
// Google them for more information.
public string UserName { get; set; }
private void MainMenu(string userName)
{
this.UserName = userName;
}
}
对于OOP来说,为类的每个实例创建公共属性并在另一个类中访问它们是不好的做法。当需要将变量值从一个表单传递到另一个表单时,请相应地编写第二个表单的构造函数,并在创建第二个表单的对象时传递值
private void button_login(object sender, EventArgs e)
{
MainMenu ss= new MainMenu(textBox1.Text);
this.Hide();
ss.Show();
}
class MainMenu : Form
{
// This is an "Auto-Implemented Property".
// Auto-Implemented Properties are used as a shortcut of what you have done.
// Google them for more information.
public string UserName { get; set; }
private void MainMenu(string userName)
{
this.UserName = userName;
}
}
为类的每个实例创建公共属性并在另一个类中访问它们对于OOP来说是不好的做法。您在
MainManu
中设置了Value1
属性,但为什么之后要创建新的main菜单
?您在MainManu
中设置了Value1
属性,但是为什么你要创建一个新的<代码>主菜单< /代码>?非常感谢你的回复,谢谢你的回复。一个静态类实际上是一个全局变量,对我的解决方案来说,最好的选择是什么,因为这是迄今为止我发现的最简单的方法。这个声音非常有用。我会考虑它。我认为这是一个坏的解决方案:变量的范围越小,越容易维护代码。静态类实际上是一个全局变量,我的解决方案的最佳替代方案是什么,因为这是迄今为止我发现的最简单的方法?