2017-03-16 15 views
1

问题:如何将用户输入链接到特定的构造函数,并在用户单击添加时创建对象。C#将链接的窗体与已创建的类和控制台相连

我如何创建我的项目:

我创建了一个控制台应用程序。一类叫车具有以下属性:

  • 品牌
  • 类型
  • 里程
  • 投产日期
  • 号牌
  • 马力齿轮
  • 座位数
  • 卷主干
  • 油耗

2名建设者: 1除了座位数的一切。其次是除了齿轮数量之外

方法根据齿轮数量或座位数量增加了燃油消耗量。

一切正常。我现在创建了一个窗体。将输出类型更改为Windows窗体而不是控制台。

对于Windows窗体:

用户有2个选项中进行选择:跑车或家庭用车。取决于用户选择的选项,为跑车提供除座位数量以外的所有属性。对于家用汽车,除了齿轮数量以外的所有部件。用户必须填写汽车的名称,类型等。

然后用户需要点击名为的按钮添加以便查看车辆的消耗。在项目后期,我需要创建它,以便用户可以通过输入数字牌来删除它。

namespace Sportwagens { 
    public class Wagen 
    { 
     string Merk; 
     string Type; 
     int Aantalkm; 
     DateTime Ingebruiknamedatum; 
     string Nummerplaat; 
     int Pk; 
     int Brandstofverbruik; 

    public class Sportwagen : Wagen 
    { 
     int Aantalvitessen; 

     public Sportwagen(string merk, string type, int aantalkm, DateTime ingebruiknamedatum, string nummerplaat, int pk, int aantalvitessen, int brandstofverbruik) 
     { 
      Merk = merk; 
      Type = type; 
      Aantalkm = aantalkm; 
      Ingebruiknamedatum = ingebruiknamedatum; 
      Nummerplaat = nummerplaat; 
      Pk = pk; 
      Aantalvitessen = aantalvitessen; 
      Brandstofverbruik = brandstofverbruik; 
     } 

     public int vermeerderingbrandsotfverbruiksportwagen() 
     { 
      if (Aantalvitessen >= 6) 
      { 
       Brandstofverbruik += 2; 
      } 
      return Brandstofverbruik; 
     } 
    } 

    class Gezinswagen : Wagen 
    { 
     int Aantalzitplaatsen; 
     int Koffervolume; 

     public Gezinswagen(string merk, string type, int aantalkm, DateTime ingebruiknamedatum, string nummerplaat, int pk, int aantalzitplaatsen, int koffervolume, int brandstofverbruik) 
     { 
      Merk = merk; 
      Type = type; 
      Aantalkm = aantalkm; 
      Ingebruiknamedatum = ingebruiknamedatum; 
      Nummerplaat = nummerplaat; 
      Pk = pk; 
      Aantalzitplaatsen = aantalzitplaatsen; 
      Koffervolume = koffervolume; 
      Brandstofverbruik = brandstofverbruik; 

     } 

     public int vermeerderingbrandsotfverbruikgezinswagen() 
     { 

      if (Aantalzitplaatsen >= 7) 
      { 
       Brandstofverbruik += 1; 
      } 
      return Brandstofverbruik; 
     } 
    } 

public Wagen() 
    { 

    } 
    public Wagen(string merk, string type, int aantalkm, DateTime ingebruiknamedatum, string nummerplaat) 
    { 
     Merk = merk; 
     Type = type; 
     Aantalkm = aantalkm; 
     Ingebruiknamedatum = ingebruiknamedatum; 
     Nummerplaat = nummerplaat; 
    } 

Click here to see how the form looks like

回答

1

如果当用户在两个选项之间进行选择“汽车”对象实例化,你可以简单地改变每个构造函数的参数的顺序(假设有不同类型的参数)。

例如,如果一个构造函数是:

public Car(string brandName, string type, double mileage ...) 
{ 
    ... 
} 

,另一个是:

public Car(string brandName, double mileage, string type ...) 
{ 
    ... 
} 

你可能会迫使类使用一个或另一个基于你给出的顺序参数。然而,这不是一个好的做法。

根据您的描述,听起来好像您应该创建两个'子类'(SportsCar和FamilyCar)并使用继承来实现您的目标或组合。

+0

谢谢。这对我帮助很大!还有一个问题,所以我有两个子类,Sportscar和Familycar。如果用户选择例如Sportscar并填写其他内容,点击添加,我如何声明并用用户输入初始化对象? – Ilias

+0

假设Sportscar继承了Car:在按钮单击函数外声明一个Sportscar: Sportscar mySportsCar; 然后函数应该看起来像这样: private void button1_click(...) { mySportsCar = new Sportscar(brandName etc ..); } 根据需要添加参数。 如果你将代码复制并粘贴到那里的问题中,这可能会有所帮助^^^所以我可以看到你在说什么 –

+0

我不确定我是否正确理解你。所以如果用户点击按钮,用户插入表单中的信息,我想创建一个对象。我知道如何创建一个对象,但我不知道如何创建一个具有通过窗体给出的信息的对象。 mySportsCar =新的Sportscar(用户插入的信息,但是如何?)我已经把我的代码放在问题中,并且链接到了图像上的表单外观。标识符是荷兰语,如果它能帮助您解决我的问题,我可以将其更改为英语。再次感谢Daniel。 – Ilias

0

双击表单编辑器中的“Toevoegen”按钮。这应该创建一个看起来有点像这样的方法:

private void button1_Click(object sender, EventArgs e) 
{ 

} 

以外的方法,声明“WAGEN”类的一个实例,像这样:

Wagen mijnWagen; 

然后,button_click方法中,初始化在WAGEN对象的实例如下:

if (//"Sportswagen is selected") 
{ 
    mijnWagen = new Sportwagen(merk, type etc. as filled in on form); 
} 
else 
{ 
    mijnWagen = new Gezinswagen(merk, type etc. as filled in on form); 
} 

现在,单击该按钮时,对象mijnWagen将被初始化为他们选择汽车的哪个类型。