Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将标签中的文本传递到文本框_C# - Fatal编程技术网

C# 如何将标签中的文本传递到文本框

C# 如何将标签中的文本传递到文本框,c#,C#,如何将标签中的文本传递到文本框。 我有一个登录表单,它将我输入的用户名传递给另一个表单的标签 用密码 Form2 frm2 = new Form2(); frm2.Show(); frm2.label2.Text = textBox1.Text; this.Hide(); 在我的第二种形式中,标签的固定标题是Username private void Form2_Load(object sender, EventArgs e) { te

如何将标签中的文本传递到文本框。
我有一个登录表单,它将我输入的用户名传递给另一个表单的标签 用密码

    Form2 frm2 = new Form2();
    frm2.Show();
    frm2.label2.Text = textBox1.Text;
    this.Hide();
在我的第二种形式中,标签的固定标题是Username

 private void Form2_Load(object sender, EventArgs e)
    {
        textBox1.Text = label2.Text;
    }
但是当我在
textBox1
中传递
label1
的值时,文本是Username。 我怎样才能通过呢

您应该在“显示”事件中执行此操作,在“加载”事件中,您的表单尚未初始化,因此您的标签内容尚未“标记”

读这个

大概是这样的:

private void Form1_Shown(object sender, EventArgs e)
    {
        textBox1.Text = label2.Text;
    }

表单加载事件发生在设置
frm2.label2.Text=textBox1.Text之前

使用Form2的新构造函数传递文本框

Form2 frm2 = new Form2(textBox1.Text);
frm2.Show();
this.Hide();
在Form2.cs中

public partial class Form2 : Form
{
   public Form2(string username)
   {
       InitializeComponent();
       label2.Text = username;
       textBox1.Text = label2.Text;

   }
}  

除了传递用户名之外,您还应该解决另一个问题。当您不再使用登录表单时,您不应该在应用程序的整个过程中隐藏它。考虑到它是您的主窗体,您在优雅地结束应用程序时也会遇到问题,因为您的下一个窗体将不是应用程序的主窗体

相反,您应该确保第二个表单是应用程序的主表单。转到program.cs文件,在登录表单完成后,启动登录表单,然后为主表单创建单独的应用程序,而不仅仅是启动登录表单

至于传递信息,只需在登录表单上创建一个可以获取textbox值的属性,并在第二个表单上创建另一个可以设置其标签和textbox值的属性:

public class Form1 : Form
{
    private TextBox textbox1;
    public string Username { get { return textbox1.Text; } }
}

public class Form2 : Form
{
    private Label label1;
    private TextBox textbox1;
    public string Username
    {
        get { return label1.Text; }
        set
        {
            label1.Text = value;
            textbox1.Text = value;
        }
    }
}


这也是为什么表单不应该在外部公开其UI组件的一个极好的例子。只有表单本身才应该触及其内部控件。通过创建允许访问或设置信息的属性,您可以确保表单在其UI中正确反映这些更改,而无需其他类了解其内部详细信息。

在visual studio的“属性”窗口中,有一个用于显示事件的小闪电图标。导航到TextChanged事件(或另一个,取决于您的偏好),双击该字段以生成一个代码,该代码将在触发事件时执行。在这个代码段中,设置标签的文本,就像您为表单的加载事件所做的那样。注意。应删除此加载事件。新的“Form2(textBox1.Text);”中有一个错误,例如“Windows.FormsAliation3.Form2”不包含接受1个参数的构造函数。我的错,从构造函数行中删除了空值还有一个“在'WindowsFormsApplication3.Form2'类型的声明中缺少部分修饰符;这种类型的另一个部分声明存在“是的,可能您有Form2.Designer.cs文件,该文件用部分修饰符声明了类。只需添加它就可以解决问题
Form1 login = new Form1();
Application.Run(login);

Form2 main = new Form2();
main.Username = login.Username;
Application.Run(main);