2014-01-28 8 views
-1

Как изменить текст ярлыка в другом классе? Теперь я использую эти скрипты, но ярлык не изменен.Как я могу изменить текст меток из другого класса (C#)

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

Я создал следующий класс, который будет изменить текст этикетки 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"); 
    } 
} 

отладки для управления найти:

buildEditor {test.buildEditor, Text: test} test.buildEditor 
this {test.ChangeTextForMaxSkill} test.ChangeTextForMaxSkill 
+0

Что не работает по этому поводу? Вызывает ли это исключение? Не меняется ли текст? –

+0

yep, текст для метки не изменен в «тесте» –

+0

Вы пробовали отлаживать, чтобы увидеть, что «ярлык» заканчивается нулевым после вашего вызова «Найти»? –

ответ

1

Вы меняете текст локального экземпляра кнопки. Вы хотите, чтобы сначала получить ссылку на исходную кнопку. Прикрепите к этой кнопке событие и измените там строку.

Используйте это:

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

Я отредактировал свой первый пост. У вашего скрипта есть ошибки для меня. Поскольку я использую это в формах buildEditor: ChangeTextForMaxSkill skill = new ChangeTextForMaxSkill(); (для некоторых следующих функций) –

+0

Тогда просто используйте 'new ChangeTextForMaxSkill (this); вместо этого. – pid

+0

я снова отредактировал мой первый пост и erros это: Ошибка \t \t 1 Ключевое слово «это» не доступен в текущем контексте –

Смежные вопросы