0

单击按钮时,我正在尝试创建标签。我认为问题是因为我正在调用从另一个用户控件创建按钮的方法?

我知道这是一团糟。

用户控件我希望标签显示在

namespace Test
{
    public partial class HomeTab : UserControl
    {
        //private string name;
        public Label nameLbl = new Label();// = new Label();

        public HomeTab()
        {
            InitializeComponent();
        }

        public HomeTab(string name)
        {
            nameLbl.Name = "userIntro";
            nameLbl.Text = "awd, " + name;
            //nameLbl.Location = new Point(304, 376);
            nameLbl.AutoSize = true;
            nameLbl.Font = new Font("Calibri", 18);
            nameLbl.ForeColor = Color.Red;
            nameLbl.Parent = panel2;
            nameLbl.Dock = DockStyle.Top;

            nameLbl.Refresh();
        }
          
    }
}

使用按钮进行用户控制

namespace Button
{
    public partial class IntroTab : UserControl
    {
        public IntroTab()
        {
            InitializeComponent();
        }

        // submit button
        private void submitButton_Click(object sender, EventArgs e)
        {
            Form1 f = new Form1();
            string name = textBox2.Text;

            File.WriteAllText("MainSave.txt", name);
            string text = File.ReadLines("MainSave.txt").Skip(0).First();

            initializeData();

            HomeTab ht = new HomeTab("hello");

            this.Hide();
              
        }     
    }
}
4

2 回答 2

2

您的HomeTab(string name)构造函数不会链接到无参数的构造函数,因此InitializeComponent永远不会被调用。

我还没有查看其余代码(其中有很多),但是您可以像这样更改构造函数:

public HomeTab(string name) : this()
{
    ...
}

这是在表单中设置其他任何内容所必需的。您需要将标签添加到表单的控件中,例如使用Controls.Add(nameLabel).

但是,尚不清楚您为什么要手动执行所有这些操作。对我来说,在设计器中包含你想要的所有属性的标签会更有意义,所以你的构造函数只需要:

public HomeTab(string name) : this()
{
    nameLbl.Text = "awd, " + name;
}

其他一切都将由设计师处理。

于 2021-04-30T06:01:10.350 回答
0

我相信您所缺少的(除了 JonSkeet 的回答)只是使用创建的标签实例,您只是在创建它,但从未真正将它放在用户界面中的某个位置。

所以你缺少的是

this.Controls.Add(nameLbl);

这假设您要将实例nameLbl放入Controls.this

如果你在constructorof 中HomeTab this调用它HomeTab,就像这样

public HomeTab(string name)
{
    //Label nameLbl = new Label();
    nameLbl.Name = "userIntro";
    nameLbl.Text = "awd, " + name;
    //nameLbl.Location = new Point(304, 376);
    nameLbl.AutoSize = true;
    nameLbl.Font = new Font("Calibri", 18);
    nameLbl.ForeColor = Color.Red;
    nameLbl.Parent = panel2;
    nameLbl.Dock = DockStyle.Top;

    nameLbl.Refresh();

    this.Controls.Add(nameLbl); //<-----
}

请注意,您可以省略this我演示过的内容以阐明将要添加的位置,您可以更改为应添加this实例的任何控件。nameLbl

可以在共享代码的各个位置找到此错误,例如。

HomeTab ht = new HomeTab("hello");
IntroTab it = new IntroTab();

这两行都只创建一个实例,但您从未将实例放入您的用户界面。

于 2021-04-30T06:17:41.487 回答