如何更改不同类别(C#)的标签文本

如何更改不同类别(C#)的标签文本,c#,winforms,class,button,label,C#,Winforms,Class,Button,Label,如何更改不同类中的标签文本?现在,我使用这个脚本,但标签没有改变 Winform脚本: public partial class buildEditor : Form { ChangeTextForMaxSkill skill = new ChangeTextForMaxSkill(this); public buildEditor() { InitializeComponent(); Label maxSkillPoint = new

如何更改不同类中的标签文本?现在,我使用这个脚本,但标签没有改变

Winform脚本:

public partial class buildEditor : Form
{
    ChangeTextForMaxSkill skill = new ChangeTextForMaxSkill(this);

    public buildEditor()
    {
        InitializeComponent();
        Label maxSkillPoint = new Label();
        maxSkillPoint.AutoSize = true;
        maxSkillPoint.BackColor = System.Drawing.Color.Transparent;
        maxSkillPoint.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
        maxSkillPoint.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(193)))), ((int)(((byte)(196)))), ((int)(((byte)(181)))));
        maxSkillPoint.Location = new System.Drawing.Point(528, 687);
        maxSkillPoint.Name = "maxSkillPoint";
        maxSkillPoint.Text = UniqueValue.spentSkillPoints.ToString();
        maxSkillPoint.Size = new System.Drawing.Size(0, 20);
        this.Controls.Add(maxSkillPoint);
    }

    public void maxSkillPoint_TextChanged(Form formInstance, string labelName)
    {
        // Get reference to the label
        var label = formInstance.Controls.Find(labelName, true).FirstOrDefault();
        if (null != label && label is Label)
        {
            (label as Label).Text = "test";
        }
    }
}
buildEditor {test.buildEditor, Text: test}  test.buildEditor
this    {test.ChangeTextForMaxSkill}    test.ChangeTextForMaxSkill
我创建了下一个类,它将为maxSkillPoint标签更改文本,但它不起作用

public class ChangeTextForMaxSkill()
{
    Button button = new Button();

    public ChangeTextForMaxSkill()
    {
        button.Click += new EventHandler(changeText);
    }

    private void changeText(object sender, EventArgs e)
    {
        // Get reference to the label
        var buildEditor = new buildEditor();
        buildEditor.maxSkillPoint_TextChanged(buildEditor, "maxSkillPoint");
    }
}
查找控件的调试:

public partial class buildEditor : Form
{
    ChangeTextForMaxSkill skill = new ChangeTextForMaxSkill(this);

    public buildEditor()
    {
        InitializeComponent();
        Label maxSkillPoint = new Label();
        maxSkillPoint.AutoSize = true;
        maxSkillPoint.BackColor = System.Drawing.Color.Transparent;
        maxSkillPoint.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
        maxSkillPoint.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(193)))), ((int)(((byte)(196)))), ((int)(((byte)(181)))));
        maxSkillPoint.Location = new System.Drawing.Point(528, 687);
        maxSkillPoint.Name = "maxSkillPoint";
        maxSkillPoint.Text = UniqueValue.spentSkillPoints.ToString();
        maxSkillPoint.Size = new System.Drawing.Size(0, 20);
        this.Controls.Add(maxSkillPoint);
    }

    public void maxSkillPoint_TextChanged(Form formInstance, string labelName)
    {
        // Get reference to the label
        var label = formInstance.Controls.Find(labelName, true).FirstOrDefault();
        if (null != label && label is Label)
        {
            (label as Label).Text = "test";
        }
    }
}
buildEditor {test.buildEditor, Text: test}  test.buildEditor
this    {test.ChangeTextForMaxSkill}    test.ChangeTextForMaxSkill

您正在更改本地按钮实例的文本。您想要的是首先获得对原始按钮的引用。 将事件附加到该按钮,并在那里更改字符串

使用以下命令:

public class ChangeTextForMaxSkill
{
    buildEditor editor;

    public ChangeTextForMaxSkill(buildEditor editor) // inject reference to form
    {
        this.editor = editor;
        Button button = new Button();
        button.Click += new EventHandler(changeText);
        form.Controls.Add(button);
    }

    private void changeText(object sender, EventArgs e)
    {
        // Get reference to the label
        editor.maxSkillPoint_TextChanged(editor, "maxSkillPoint");
    }
}

有什么不起作用?它会引发异常吗?文本没有被更改吗?是的,标签的文本没有在“测试”中更改。您是否尝试过调试,以查看调用
查找
标签是否为空?我在代码中添加了调试我编辑了我的第一篇文章。你的脚本对我来说有错误。因为我在buildEditor表单中使用它:ChangeTextForMaxSkill=new ChangeTextForMaxSkill();(对于接下来的一些函数),只需使用
newchangetextformaxkill(这个)改为。我再次编辑了我的第一篇文章,错误是:错误1关键字“this”在当前上下文中不可用。请将该行放在构造函数末尾的
this.Controls.Add(maxSkillPoint)之后