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

时间:2014-01-28 15:46:51

标签: c# winforms class label

拜托,您可以帮助我,我如何更改不同类别的标签文字?

基本winform脚本:

public partial class buildEditor : Form
{
    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";
        }
    }
}

我创建了下一个类,它将是maxSkill文本的更改文本。

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");
    }
}

我真的很感谢所有答案。

2 个答案:

答案 0 :(得分:3)

我弄得很简单: 在外部类的构造函数中移交Label控件:

using System.Windows.Forms;

public class Yourclass{

    private Label UpdateLabel;
    public Yourclass (Label yourLabel)
    {
        this.UpdateLabel = yourlabel;
    }

    private void action()
    {
        //here is your update of the label
        UpdateLabel.Text = "Your text";
    }

}

在表单类中,创建“yourclass”的实例并移交Label:

Yourclass cls = new Yourclass(Label1);

答案 1 :(得分:1)

首先,您的命名约定不遵循标准做法。类和方法名称都应使用大写的单词首字母,而不是像你所做的那样使用驼峰大小写。我在答案中使用了正确的命名约定。

您必须将BuildEditor *表单的instance传递给ChangeTextForMaxSkill.ChangeText()函数。

接下来,标签对象maxSkill不是BuildEditor类的属性。因此,您需要在表单中实际找到对该控件的引用,因为您正在动态添加它。

public partial class BuildEditor : Form
{
    public BuildEditor()
    {
        InitializeComponent();

        Label maxSkill = new Label();
        maxSkill.Name = "MaxSkil"; // need the ID to find it later (makes it easier)
        maxSkill.Location = new Point(1, 1);
        this.Controls.Add(maxSkill);
    }

    // This is just for testing; assumes you dragged a button from toolbox onto your
    // BuildEditor form in the Form Designer
    private void button1_Click(object sender, EventArgs e)
    {
        var changeTextForMaxSkill = new ChangeTextForMaxSkill();
        changeTextForMaxSkill.ChangeText(this, "MaxSkil");
    }

}

public class ChangeTextForMaxSkill
{
    public void ChangeText(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";
        }
    }
}

如果您想测试它,只需在表单上添加一个按钮,然后在按钮单击处理程序中进行测试:

private void button1_Click(object sender, EventArgs e)
{
    var changeTextForMaxSkill = new ChangeTextForMaxSkill();
    changeTextForMaxSkill.ChangeText(this, "MaxSkil");
}

我已经测试了,这有效:)