簡體   English   中英

如何在不同的類(C#)中更改標簽文本

[英]How can I change label text in different class (C#)

拜托,您能幫我嗎,我該如何在不同的班級更改標簽文本?

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

我真的很想所有答案。

我得到的非常簡單:在外部類的構造函數中移交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";
    }

}

在表單類中,創建“您的類”的實例並移交給Label:

Yourclass cls = new Yourclass(Label1);

首先,您的命名約定不遵循標准慣例。 類名和方法名都應使用大寫的單詞首字母,而不是像您那樣用駝峰式。 我在回答中使用了適當的命名約定。

您必須將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");
}

我已經測試過了,這有效:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM