2016-07-21 12 views
1

Form1で呼び出すと、なぜListViewにリストビューアイテムが表示されないのですか?Winforms ListViewItemsが表示されない

namespace WindowsFormsApplication10 
{ 
    public partial class Form1 : Form, IView 
    { 
     Presenter presenter; 
     public Form1() 
     { 
      InitializeComponent(); 
      presenter = new Presenter(this, new Model()); 
     } 

     public void SwitchToControl(UserControl userControl) 
     { 
      this.tableLayoutPanel1.Controls.Clear(); 
      this.tableLayoutPanel1.Controls.Add(userControl); 
     } 
     public void SetListView(ListView listView) 
     { 
      this.listView1 = listView; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      presenter.SwitchToFirst(); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      presenter.SwitchToSecond(); 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      presenter.SetListView(); 
     } 

    } 
    interface IView 
    { 
     void SwitchToControl(UserControl userControl); 
     void SetListView(ListView listView); 
    } 
    class Presenter 
    { 
     private readonly IView view; 
     private readonly IModel model; 

     public Presenter(IView view, IModel model) 
     { 
      this.view = view; 
      this.model = model; 
     } 

     public void SwitchToFirst() 
     { 
      var control = new UserControl1(); 
      view.SwitchToControl(control); 
     } 

     public void SwitchToSecond() 
     { 
      var control = new UserControl2(); 
      view.SwitchToControl(control); 
     } 

     public void SetListView() 
     { 
      ListView listView = new ListView(); 
      listView.Items.Add(new ListViewItem { Text = "First" }); 
      listView.Items.Add(new ListViewItem { Text = "Second" }); 
      listView.Items.Add(new ListViewItem { Text = "Third" }); 
      listView.Items.Add(new ListViewItem { Text = "Fourth" }); 
      view.SetListView(listView); 
     } 
    } 
    interface IModel 
    { 

    } 
    class Model : IModel 
    { 

    } 
} 
+0

Form1のコントロールにlistViewを追加する必要があります。 –

+0

@x ...、this.listView1 = listView;私はそれがうまくいくと思った。 – A191919

+0

いいえ、それはうまく動作しません。 'listView1'はあなたのフォームには表示されず、フォームに表示されているものとはまったく異なる新しいメモリ内の' ListView'を指し示すだけです。フォームに表示されているものは 'InitializeComponent'で作成され、フォームの' Controls'コレクションに追加されます。 –

答えて

1

listView1あなたが作成したとInitializeComponentに形成するために添加ListView制御への唯一の変数を指しています。変数に新しいListViewを割り当てると、フォームのControlsコントロールにあるListViewコントロールには影響しません。

変数に新しいインスタンスを割り当てた後、あなたがフォームに表示ListViewControlsコレクションにあるオリジナルのものが、あなたが見ることができない別のインスタンスへlistView1変数ポイントであり、それはメモリ内にのみですlistView1の変更は表示されません。

既存のListViewに新しいアイテムを追加する場合は、新しいアイテムをフォームに渡して、以前のアイテムを消去した後で、それらの新しいアイテムを追加します。

関連する問題