2013-09-05 6 views
1

У меня есть две формы Form1, которая имеет класс CharStats внутри него и Mainform, который имеет класс MainForm. MainForm имеет связанную с ним метку pcNameLabel и CharStats содержит кнопку, которая, как предполагается, должна менять pcNameLabel.Text при нажатии. Поскольку я общаюсь между формами и классами, у меня есть статический метод SetInfo() внутри MainForm, который вызывается методом StatTransfer() внутри CharStats. Все это почти работает правильно, за исключением того, что я не могу изменить pcNameLabel.Text из статического метода SetInfo() из-за статической нестационарной вещи. Итак, как мне это сделать.Попытка изменить метку с использованием статического метода

MainForm (я вырезал некоторые не соответствующие данные, обрабатывает переменные)

public partial class MainForm : Form 
    { 
     int statHolder; 
     int statAdjuster; 
     string healthHolder; 
     int finalHealth; 
     int diceOut; 
     int maxDice; 
     int healingOnOff = 0; 
     int pcOrEn = 0; 
     int turnCount = 0; 
     int diceType; 
     int diceResult; 
     public static int formInit = 0; 
     public static string VariableLabel1; 
     public static string Variable2; 

     Random _r = new Random(); 


     public MainForm() 
     { 

      CharStats form = new CharStats(); 
      form.Show(); 

      InitializeComponent(); 
     } 

     public static void SetInfo() 
     { 
      Variable2 = VariableLabel1; 
      pcNameLabel.Text = Variable2; 
     } 
    } 

Form1 (также вырезать данные переменной обработки)

public partial class CharStats : Form 
    { 
     string name = ""; 
     string health = ""; 
     string mana = ""; 
     string strength = ""; 
     string agility = ""; 
     string intelligence = ""; 


     public CharStats() 
     { 

      InitializeComponent(); 
     } 

     void Fighter() 
     { 
     name = "Reginaldxxxxxxx"; 
     health = "200"; 
     mana = "50"; 
     strength = "16"; 
     agility = "12"; 
     intelligence = "6"; 
     } 

     public void StatTransfer() 
     { 
      MainForm.VariableLabel1 = Name; 
      MainForm.formInit = 1; 
      MainForm.SetInfo(); 
     } 

     void FighterButtonClick(object sender, EventArgs e) 
     { 
      Fighter(); 
      StatTransfer(); 
     } 
    } 
+0

Ну который * например * формы вы хотите изменить текст? Мне совершенно не ясно, что 'SetInfo' должен быть статическим в первую очередь. –

+0

Когда он не статичен, я не могу получить к нему доступ из формы1. Текст находится в mainform – AmazingMrBrock

+0

Ну, вам нужно называть его * экземпляром * MainForm'. В этом-то и дело. Form1 (который, по-видимому, фактически называется CharStats), должен иметь экземпляр 'MainForm', чтобы манипулировать этим экземпляром. Представьте себе, что одновременно показывались два экземпляра «MainForm» - как бы все знали, какая форма должна измениться? –

ответ

0

вы проблема кажется очень хорошим кандидатом для наблюдателя шаблон. см подробнее here

0

Попробуйте

общественный класс MainForm частичное: Форма { .....

public MainForm() 
    { 


     InitializeComponent(); 

//=====>Be careful change initial order between InitializeComponent 

     CharStats form = new CharStats(); 
     form.Show(); 
    } 

    public void SetInfo() 
    { 
     Variable2 = VariableLabel1; 
     pcNameLabel.Text = Variable2; 
    } 
} 

И в Seconde форме

public partial class CharStats : Form 
    { 
..... 
public void StatTransfer() 
     { 
      MainForm parentForm = this.parentForm; 
      parentForm.formInit = 1; 
      parentForm.SetInfo(); 
     } 
...... 
} 
+0

Я попробую это, хотя бы один вопрос. Откуда родилась функция parentForm/Где я должен ее добавить? – AmazingMrBrock

+0

Это свойство класса Form http://msdn.microsoft.com/fr-fr/library/ system.windows.forms.form.aspx – tdelepine

+0

Так что мой отладчик не должен говорить это «charactertest.CharStats» не содержит определения для «parentForm» и никакого метода расширения «parentForm», принимающего первый аргумент типа «charactertest». CharStats 'можно найти (вам не хватает директивы using или ссылки на сборку?) 'Когда я пытаюсь ее использовать? – AmazingMrBrock

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