2016-07-24 6 views
0

У меня есть небольшой опыт использования частных классов с использованием книги Мураха C#, но я по-прежнему очень новичок. Я пытаюсь создать свой собственный проект, который состоит из «Идентификатор пациента» «Имя» «Вес», а затем уравнение для рекомендуемого ежедневного потребления белка (вес * .86). В конечном итоге это будет сделано в базовую базу данных, однако сейчас я изо всех сил пытаюсь показать результаты. Кроме того, расчет для ежедневного потребления белка не будет работать в классе, который я сделал.Передача частного класса в форму

Вот мой код класса:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Form1 
{ 
public class Intake 
{ 
    private string name; 
    private int patientId; 
    private int weight; 
    //private int proteinIntake = weight * .86; 


    //Constuctor 
    public Intake() { } 

    //Overload Constructor 
    public Intake(string name, int patientId, int weight) 
    { 
     this.Name = name; 
     this.PatientId = patientId; 
     this.Weight = weight; 


    } 

    public string Name 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
    public int PatientId 
    { 
     get 
     { 
      return patientId; 
     } 
     set 
     { 
      patientId = value; 
     } 
    } 
    public int Weight 
    { 
     get 
     { 
      return weight; 
     } 
     set 
     { 
      weight = value; 
     } 
    } 


    public string GetDisplayText(string sep) => 
     name + patientId + sep + weight; 
} 
} 

Вот мой код формы:

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 Form1 
{ 
public partial class Form1 : Form 
{ 
    public static Intake intake = null; 


    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnExit_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 

    private void btnCalculate_Click(object sender, EventArgs e) 
    { 

     Intake intake = new Intake(txtName.Text, Convert.ToInt32(txtPatientId.Text), Convert.ToInt32(txtWeight.Text)); 

    //obviously does not work MessageBox.Show("Name: " + intake.name); 





    } 


} 
} 

И, если это важно, вот моя уродливая форма My Ugly Form

+2

Doing 'MessageBox.Show ("Имя:" + intake.name);' не будет работать, но делать 'MessageBox.Show ("Имя:" + intake.Name), 'должен работать нормально. – Enigmativity

ответ

2

Я не хорошо понимаю ваш вопрос, я не читал вашу упомянутую книгу, но из того, что я вижу, ваш класс Intake не является частным, поэтому единственная проблема заключается в том, что вы пытаетесь отобразить личное поле в лету ur MessageBox, и поэтому, если вы раскомментируете инструкцию, она вообще не компилируется. Так что если вы хотите, чтобы отобразить имя экземпляра в MessageBox:

MessageBox.Show("Name: " + intake.Name); 

будет работать наверняка. Единственное, что вы должны помнить (в данном случае) - это разница между частными фиделями и публичными свойствами. Закрытые поля доступны только внутри вашего класса, общедоступные свойства доступны для всех ваших программ.

Accessibility Levels (C# Reference)

общественного

доступ не ограничен.


защищен

Доступ ограничен содержащего класса или типов, полученного из содержащего класса.


внутренний

Доступ ограничен текущей сборки.


защищен внутренний

Доступ ограничен текущей сборка или типов, полученная из содержащего класса.


частный

Доступ ограничен содержащего типа.

0

В классе Intake, добавьте метод GetProteinIntake():

public class Intake 
{ 
    ... your existing code .... 

    public double GetProteinIntake() 
    { 
     return weight * 0.86; 
    } 
} 

В вашей форме, заменить событие btnCalculate_Click с:

private void btnCalculate_Click(object sender, EventArgs e) 
{ 
    Intake intake = new Intake(txtName.Text, Convert.ToInt32(txtPatientId.Text), Convert.ToInt32(txtWeight.Text)); 
    txtProtein.Text = intake.GetProteinIntake().ToString(); 
} 
+0

Можете ли вы подробно остановиться на этом? Я попытался использовать это, но вернулся «Ошибка \t CS1503 \t Аргумент 1: не может преобразовать из« double »в« string »« Я хотел бы назначить его в текстовое поле, которое будет «txtProtein.Text» –

+0

О, вы должны изменить 'public int' на' public double' (не обращал внимания на числовой тип), а затем вы можете использовать 'enter.GetProteinIntake(). ToString()', чтобы назначить его в текстовое поле. – PhillipXT

+0

вступление.GetProteinIntake(). ToString (txtProtein.Text); Все еще не вычисляет. Любая идея о том, почему? –

2

FYI: в "потребление" класса, вы можете переопределить ToString()

public override string ToString() 
{ 
    return string.Format("Name: {0}, PatientId: {1}, Weight: {2}", Name, PatientId, Weight); 
} 

И то и можно использовать

MessageBox.Show(intake.ToString()); 

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

  • Нет связанных вопросов^_^