2017-03-16 14 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將被初始化爲他們選擇汽車的哪個類型。