2017-11-01 17 views
0

私はC#Visual Basic 2017を使用していますが、3つの異なるリストを同時に表示し、これが可能かどうかを知りたいリストボックスを作成しようとしています。リストボックスは現在、 ".datasource ="関数を使用して、各自のリストを表示することができます。各リストは型のクラスですが、これらのクラスはすべて異なりますが、1つのスーパークラスと2つのサブクラスがあります。リストボックスに複数のリストを表示

これは私が命名し、私の形式でリストを満たしているかである:

public partial class formHome : Form 
{ 
    // Naming and creating my lists at class level so other classes such as buttons can access the lists 
    List<Event> events = new List<Event>(); 
    List<Hospitality> hosps = new List<Hospitality>(); 
    List<Conference> confs = new List<Conference>(); 



    public formHome() 
    { 
     InitializeComponent(); 

     // Fill Event list 
     events.Add(new Event(1, new DateTime(2017, 12, 21), new DateTime(2017, 12, 22), "National Glass Centre", 20, 7.50, "Dynamo Kick off Meeting, Dec 2017")); 
     events.Add(new Event(2, new DateTime(2017, 12, 15), new DateTime(2017, 12, 16), "Winter Gardens Museum", 30, 2.99, "Nature Preservation Meeting")); 
     events.Add(new Event(3, new DateTime(2018, 1, 5), new DateTime(2018, 1, 6), "Theatre Royal", 120, 5.00, "Traditional Irish Dancing")); 

     // Fill Hospitality list 
     hosps.Add(new Hospitality(4, new DateTime(2017, 12, 21), new DateTime(2017, 12, 22), "Stadium of Light", 100, 25.00, "SAFC Charity Auction", false)); 
     hosps.Add(new Hospitality(5, new DateTime(2017, 11, 19), new DateTime(2017, 11, 20), "Empire Cinema", 200, 7.50, "School Cinema Day", true)); 

     // Fill Conference list 
     confs.Add(new Conference(6, new DateTime(2017, 11, 15), new DateTime(2017, 11, 16), "Marriot Hotel", 400, 5.00, "NHS Christmas Night Out", false, false)); 
     confs.Add(new Conference(7, new DateTime(2017, 12, 31), new DateTime(2018, 1, 1), "Hilton Hotel", 500, 10.00, "Police New Years Eve Meeting", true, true)); 
     confs.Add(new Conference(8, new DateTime(2018, 2, 4), new DateTime(2018, 2, 5), "Stadiun of Light", 1000, 7.50, "Duke of Edinburgh Award", true, true)); 
     confs.Add(new Conference(9, new DateTime(2018, 3, 5), new DateTime(2018, 3, 6), "St.Peters Campus", 500, 0, "Results Day", false, true)); 

    } 

イベントは、両方のホスピタリティと会議、接客、会議やイベントの両方のサブクラスのスーパークラスです。

private void btnSeenormal_Click(object sender, EventArgs e) 
    { 
     // Clear list box before entering information 
     liDisplay.DataSource = null; 

     // Adding list items of type Event to list box 
     liDisplay.DataSource = events; 
    } 

にはどうすれば同時にすべての3を表示することができ、またはどのように私は1つに3つのリストをマージすることができます?現在、私のリストボックスで、一度に一つのリストを表示するには、このメソッドを使用して

ありがとうございます。

public class Students 
{ 
    public string Name { get; set; } 
    public string Year { get; set; } 
} 
public class Teachers 
{ 
    public string Name { get; set; } 
    public int TeacherId { get; set;} 
} 

そして、あなたが見せたいものを明確にしなかったが、簡単なのためにちょうどあなたが選択することができますいくつかの値を示しています。それを次の二つのクラスを使用して例えばビットを簡素化

+0

'hosps.Add'と' confs.Add'の代わりに、 'events.Add'を実行してください。 –

+0

私はこれを行う理由は表示されません。その場合、私は1つのリストしか持たないでしょうし、タイプごとにユーザーに情報を表示するという任務がありました。したがって、通常のイベント、ホスピタリティイベント、会議イベント、およびすべてのイベントを一緒に表示するオプションをユーザーに与える4つのボタンがフォーム上にあります。 –

+0

3つのリストと、ホスピタリティと会議オブジェクトをイベントリストとそれぞれのリストの両方に追加しても、それを維持できます。 –

答えて

0

Polymophismを考慮してください。あなたは

events.AddRange(hosps); 
events.AddRange(confs); 

を行うことによって、またはあなた場合のイベントの1つのリストにすべての3つのリストを組み合わせることができ

  1. ホスピタリティIS-こと
  2. 会議イベントIS-イベントを考えます現在のイベントリストを別々のままにしておき、別の変数で結合したいと考えてください:

    List<Event> allEvents = new List<Event>(); 
    allEvents.AddRange(events) 
    allEvents.AddRange(hosps); 
    allEvents.AddRange(confs); 
    

    allEventに対してAddRangeを呼び出す前に、events、hosps、およびconfs変数に項目を追加したことを確認してください。

0

クラスのプロパティとは、最初にどちらかの新しいリストに追加、または直接制御するので、同じよう:

 List<Students> students = new List<Students>() 
     { 
      new Students() {Name = "Ray", Year = "2017"}, 
      new Students() { Name = "Carla", Year = "2019" } 
     }; 

     List<Teachers> teachers = new List<Teachers>() 
     { 
      new Teachers() {Name = "Mr. Smith", TeacherId = 151}, 
      new Teachers() {Name = "Mrs. Barbara", TeacherId = 901} 
     }; 

     listBox1.Items.AddRange(teachers.Select(x => x.Name).ToArray()); 
     listBox1.Items.AddRange(students.Select(s => s.Name).ToArray()); 

それはしかし、それを行うには、最もパフォーマンスの方法はないのですが、小さなデータセットのために正常に動作します。

+0

ありがとうございました。最後にプログラムを終了しました。私が知る必要があったのは、その配列関数を使って複数のリストを追加する方法でした。 3リストを追加し、それは音を動作させる。もう一度ありがとう。 –

+0

@OliverAllenそれは素晴らしいです!私たちがお手伝いできるのはうれしいあなたを助けてくれた回答をアップアップし、将来のサーチャーを助ける答えを受け入れることを覚えておいてください –

関連する問題