2015-03-11 3 views
-1

Цель программы - использовать методы get и set для переменных.Get/Set Variable

У меня есть этот код в проект C#:

Form1:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
public partial class Form1 : Form 
{ 
    private int c = 0; 
    public int a { get; set; } 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     a = 5; 
     Form2 f2 = new Form2(); 
     f2.b = a; 
     f2.Show(); 
    } 
} 
} 

и в Form2:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 f1 = new Form1(); 



     MessageBox.Show(Convert.ToString(b)); 
    } 
} 
} 

Этот код не работает, так как значение Ь должно быть 5 , но во время выполнения 0;

любое решение?

+1

Он установлен только в 5, когда вы нажимаете кнопку в 'Form1'. Непонятно, что вы пытаетесь выполнить, но вы можете ограничить свой проект одной формой, чтобы избежать путаницы. –

+1

Вы создаете новый экземпляр формы1 и вызываете получение этого нового экземпляра ... значение по умолчанию для этого равно 0 – Alexandre

+0

Возможно, вам понадобится 'f1.a = 5' после создания экземпляра нового экземпляра Form1. По умолчанию он будет инициализирован равным 0. Вы устанавливаете его 5, только когда вы нажимаете кнопку в Form1. – Icemanind

ответ

1

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

Так как это сделать:

Form1 f1 = new Form1(); 
int b = f1.a; 

Является всегда будет 0. Вы создали новый экземпляр, и ничего не случилось с ним! Если вы хотите получить существующее значение формы (где кнопка была предположительно нажата), вам нужно передать его Form2 каким-то образом.

Вы можете:

  • передать его в конструкторе Form2
  • Настройка службы, которая содержит данные вместо
  • Вероятно, около миллиона других подходов
+0

, может сообщить пример? –

+0

@CristianMagrini Сделайте некоторые исследования, примеры только в миллионах других мест в Интернете (и даже на SO). Если у вас есть более конкретный вопрос, не стесняйтесь спрашивать. – BradleyDotNET

+0

Я отправил свой код, но все еще не работаю, и я попробую решение, если у вас есть решение. –

0
private void button1_Click(object sender, EventArgs e) 
{ 
    a = 5; 
    Form2 f2 = new Form2(); 
    f2.b=a; 
    f2.Show(); 
} 

public partial class Form2 : Form 
{ 
public int b; 
    public Form2() 
    { 
    InitializeComponent(); 
    } 
} 

Вы хотите передать данные, прежде чем показывать вторую форму, а не после факта.

+0

это не работает b всегда всегда 0 –

+0

Можете ли вы опубликовать свой новый код? – scubasteve623

+1

хорошая работа !!!!!!!!!!!!!!!!! –

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