2010-08-22 3 views
0

У меня две формы. Во-первых, у меня есть текстовое поле и кнопка, а в другой - ярлык. Когда вы вводите текст в текстовое поле и нажимаете кнопку, открывается новая форма, а метка имеет тот же текст, что и текстовое поле в предыдущей форме. Как мне это сделать с помощью get/set? Я сделал класс "Globals", и в нем получить/установить:Передача данных между формами

class Globals 
{ 
    public string imena = ""; 
    public string ime 
    { 
     get 
     { 
      return imena; 
     } 
     set 
     { 
      imena = value; 
     } 
    } 
} 

и в первой форме

private void btnplay_Click(object sender, EventArgs e) 
{ 
    //this.Hide(); 
    Game igra = new Game(); 
    igra.Show(); 

    Globals promenljive = new Globals(); 
    promenljive.ime = tbpl1.Text; 
} 

и во втором

private void Game_Load(object sender, EventArgs e) 
{ 
    Globals promenljive = new Globals(); 
    lblime1.Text = promenljive.ime; 
} 

Но это Безразлично Работа? Что я сделал не так?? Thank you

+0

Пожалуйста, отредактируйте ваш вопрос, выберите свой код и нажмите кнопку кода в редакторе (тот, который содержит 101 \ 010). –

ответ

3

Ну, вы создаете два отдельных экземпляра Globals, чтобы начать с ... у них будут независимые переменные, поэтому вы не видите значение, которое вы только что установили. Это как рисовать один дом красным, а затем смотреть на цвет совершенно другого дома.

Тем не менее, использование класса «глобалы», как это, является плохой идеей. Почему бы просто не добавить параметр в конструктор Game и передать данные таким образом?

Game igra = new Game(tbpl1.Text); 
igra.Show(); 

Похоже, что вы можете быть новичком в ООП, учитывая ваш первоначальный подход. Если это так, я настоятельно рекомендую вам узнать об основах C#, .NET и OO в целом до, начиная писать графические приложения. У GUI есть свои трудности (например, правила нарезания резьбы) и достаточно сложно развиваться, даже если вы уверены в основах. На данный момент вам трудно сказать разницу между подлинно GUI-специфической проблемой и просто не понимать, как работают C# и .NET в целом.

+0

Я понял, спасибо. Я понял, что я делаю это сложным без необходимости, с классом Globals, в этом случае. Ну, я новичок в ООП, я окончил среднюю школу в этом году, а с октября я буду учиться в колледже. В старшей школе я в основном изучал C и C++ (но только приложения MFC), поэтому я пытаюсь понять это сам, и это самый простой способ понять это с помощью примеров и конкретных проблем.Большое спасибо! –

0

Вы не можете создать новый Globals в Game_Load, вам нужно передать ссылку на объект Globals в конструктор игры.

1

Нет. Это не сработает, потому что у вас есть два разных экземпляра (переменных) Globals. Каждый из них имеет свой различный набор значений.

Вам нужно использовать одну общую переменную Globals между двумя формами.

Пример:

Создать в Form1 глобальных переменный, а затем, когда вы инстанцируете игр, передать глобальную ссылку в конструкторе:

Globals promenljive = new Globals(); 
promenljive.ime = tbpl1.Text; 
Game igra = new Game(promenljive); 
igra.Show(); 

И затем, сохраните ссылку в конструкторе игр :

public Game(Globals g) { 
    this.promenljive = g; // you need a global member in Game called promenljive 
} 

Надеюсь, что это поможет.

+0

Спасибо, я вижу, что я сделал ошибку, сделав два разных экземпляра ... –

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