2013-06-12 2 views
0

спасибо за ваши быстрые ребята реагирования, так это то, что у меня есть сейчас ..может кто-нибудь помочь мне с моим кодом в C# всегда выводит 0 в окне сообщений

моя проблема в том, что требует от меня, чтобы добавить параметр в Form2 f2 = new Form2(); часть, но если я сделал я получил эту ошибку ошибки «Поле инициализатор не может ссылаться на нестатическое поле, метод или свойства»

для моего Form1 я не Отредактируйте этого^

public partial class Form1 : Form 
    { 

     Form2 f2 = new Form2(); 
     int userInputValue; 
     string userInputValueConverted; 
     string formulaShow = ""; 
     public double answer = 0.0; 
     public double output; 


     public Form1() 
     { 
      InitializeComponent(); 
     } 




      f2.DuAnswer = output; 
      f2.Formula.Text = formulaShow; 
      f2.Show(); 

для моего Form2 у меня есть только один конструктор

public double duAnswer; 

public Form2(double output) 
{ 
    InitializeComponent(); 
    duAnswer = output; 
} 



public double DuAnswer 
{ 
    get 
    { 
     return duAnswer; 
    } 

    set 
    { 
     duAnswer = value; 
    } 
} 

и для моей кнопки результата

private void result_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("" + duAnswer.ToString("F2")); 
     } 
+1

Пожалуйста, вставьте код, который описывает вашу проблему. –

+0

Что показывает ваш отладчик? – StarPilot

+0

никаких ошибок, просто дайте мне 0 значение –

ответ

5

Когда вы показать вам r Form2 экземпляр, вы создаете новый экземпляр формы формы 2. Это не требуется, но вместо этого, вы должны установить ответ на существующий form2:

// Don't create this 
// Form2 outP = new Form2(output); 

f2.DuAnswer = output; 
f2.Formula.Text = formulaShow; 
f2.Show(); 

Это также означает, что вам не нужен второй конструктор:

// public Form2(double output) 
// { 
// duAnswer = output; 
// } 

также отметить, что, если вы решили включить второй альтернативный конструктор, очень важно, что он также называет InitializeComponent():

public Form2(double output) 
{ 
    InitializeComponent(); // This is critical for a form 
    duAnswer = output; 
} 

в качестве альтернативы вы можете использовать constructor chaining для достижения этой цели:

public Form2(double output) 
    : this() 
{ 
    duAnswer = output; 
} 
+0

так как я могу назвать form2 без создания нового экземпляра? –

+1

@MaryGraceIsananViaje Вы уже создали экземпляр: 'Form2 f2 = new Form2();' Вы * повторно используете * созданный вами экземпляр ('f2') вместо второго экземпляра. –

+0

спасибо за это, но у меня есть новая проблема, я следую вашей инструкции, я установил f2.Formula.Text = formulaShow; и я только имею это в верхней части Form2 f2 = new Form2() ;, однако я получил ошибку. Инициализатор поля не может ссылаться ... –

0

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

Зачем вам два из них? Почему бы просто не сделать Form2 frm = new Form2 (ответ);

+0

это дает мне ошибку, если только экземпляр 1 формы, он говорит, что инициализатор поля не может ссылаться на нестатическое поле ........... –

+0

Как и Рид, вам не нужно создавать экземпляр формы еще раз. Просто измените duAnswer формы Form2 на публикацию, присвойте переменную ответа этому публичному var и в конце do f2.Show() (или .ShowDialog()) – PeterG

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