2011-12-12 10 views
0

私は私の注文のためのアイテムでいっぱいのリストボックスを持っています。リストボックスからアイテムを取り出し、別のフォームでリストビューに表示するにはどうしたらいいですか?

リストボックス内のすべてのアイテムを取り出し、リストビューに転送したいと考えています。

次に、リストビューを別のフォーム(メッセージボックス)で表示したいと思います。

私の新しいリストビュー:

private void CustomerInfo_Click(object sender, EventArgs e) 
    { 
     ListViewItem customers = new ListViewItem(fullName.Text); 

     customers.SubItems.Add(totalcount.ToString()); 
     customers.SubItems.Add(total.ToString()); 
     customers.SubItems.Add(Address.Text); 
     customers.SubItems.Add(telephone.Text); 
     for (int i = 0; i < OrderlistBox.Items.Count; i++) 
     { 
      customers.SubItems.Add(OrderlistBox.Items[i].ToString()); 
     } 

     Customers.Items.Add(customers); 

     //CLEAR ALL FIELDS 
     OrderlistBox.Items.Clear(); 
     fullName.Text = ""; 
     Address.Text = ""; 
     telephone.Text = ""; 
     totalDue.Text = ""; 
     totalItems.Text = ""; 
    } 

マイいるContextMenuStrip、私は顧客をクリックしたときに、私は(氏名、住所、オーダー、)その情報を取得することができます

private void customerInformationToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (Customers.SelectedItems.Count != 0) 
     { 
      var myformmessagedialog = new MessageBoxForm 
      { 
       name = Customers.SelectedItems[0].SubItems[0].Text, 
       address = Customers.SelectedItems[0].SubItems[3].Text, 
       telephone = Customers.SelectedItems[0].SubItems[4].Text, 
      }; 
      myformmessagedialog.ShowDialog(); 
     } 
    } 

私の新しいですフォーム、クライアントのすべての情報を表示するメッセージボックス:

public partial class MessageBoxForm : Form 
    { 
    public MessageBoxForm() 
    { 
     InitializeComponent(); 
    } 

    public string name; 
    public string address; 
    public string telephone; 
    public ListViewItem order = new ListViewItem(); 

    private void MessageBoxForm_Load(object sender, EventArgs e) 
    { 

     lblName.Text = name; 
     lbladdress.Text = address; 
     lbltelephone.Text = telephone; 

     orderListView.Items.Add(order); 
    } 
} 

これはconfと思われる私はちょうど正しい方向に行くために助けを探しています。どんな助けもありがとうございます。

答えて

1

あなたの現在の設定に基づいて、最も簡単な方法は、単にあなたのMessageBoxFormなどにまたがってリストビューのデータを渡すことです。このようなものであるためにあなたのクラスを変更あなたは子フォームにそれを渡す必要がある親フォームから何かにアクセスするには

public partial class MessageBoxForm : Form 
{ 
    ... 

    public void LoadListView(ListViewItemCollection items) 
    { 
     orderListView.Clear(); 
     orderListView.AddRange(items); 
    } 
} 

.... 

private void customerInformationToolStripMenuItem_Click(object sender, EventArgs e)  
{  
    if (Customers.SelectedItems.Count != 0)  
    {  
     var myformmessagedialog = new MessageBoxForm  
     {  
      name = Customers.SelectedItems[0].SubItems[0].Text,  
      address = Customers.SelectedItems[0].SubItems[3].Text,  
      telephone = Customers.SelectedItems[0].SubItems[4].Text,  
     }; 
     myformmessagedialog.LoadListView(Customers.Items); 
     myformmessagedialog.ShowDialog();  
    }  
} 
+0

これは私が探しているのは、顧客のアイテムを渡すことですが、それは動作していません。 – Claud

+0

@ClaudiuBadauあなたはいくつかの特定のエラーを取得していますか? – James

+0

私は仕事中ですが、特定のエラーを覚えていません。私はそれがpublic void loadlistview(listviewitemcollection items)と関係があることを知っています。私はそれがlistviewitemcollectionを呼び出させないと思う、私はシステムのものが足りない? – Claud

4

これを行う1つの方法は、表示するデータをある種のViewModel、基本的には表示するデータを持つクラスまたはクラスのセットにすることです。その後、メインフォームで表示することができ、そのViewModelへの参照をメッセージボックスに渡すことができます。また、それを表示することもできます。

一般に、さまざまなフォームのコントロールを直接結びつけるようなコードは避けたいとします。

+0

これは最も実用的だと思うが、私は現在のセットアップで現在の修正を探していて、もう一度プログラムを修正する予定だ。私はちょうどC#とフォームを学習し始めたので、これはこれまで私が持っていたものです。 – Claud

+0

@ClaudiuBadau - これは "今支払うか、後で支払う"というトレードオフに該当します。ただし、必要なデータを抽出して、ある種のデータ構造でそのデータをメッセージボックスに送ることができます。 – RQDQ

1

基本的な回答はしていませんか?

あなたはアイテムのコレクションを維持しています。

リストボックスに表示します。

リストビューで表示します。

リストボックスからsomeを選択してリストビューに移動するだけでよい場合は、

リストボックスの選択を使用してアイテムのコレクション内でそれらを検索し、選択したリストのリストを作成し、リストビューを使用してフォームに渡して表示します。

データを格納するためにUIコントロールを使用しないで、フォームのUIを別のフォームのUIに直接依存させないようにしてください。もしそうなら、単に、

private void customerInformationToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (Customers.SelectedItems.Count != 0) 
    { 
     var myformmessagedialog = new MessageBoxForm; 
     myformmessagedialog.Customers = Customers; 
     if (myformmessagedialog.ShowDialog() == DialogResult.OK) 
     { 
      Customers = myformmessagedialog.Customers; 
     } 
    } 
} 

0

私はあなたが必要があると思い何を推測している(と私はあなたが探しているものを誤解している可能性が)あなたのCustomersオブジェクトに渡すことができMessageBoxFormの新しい方法であり、

public partial class MessageBoxForm : Form 
{ 
    public MessageBoxForm() 
    { 
    InitializeComponent(); 
    } 

    private void MessageBoxForm_Load(object sender, EventArgs e) 
    { 
    if (Customers != null) 
    { 
     // add your code here to add your Customers as needed 
    } 
    } 

    public Customers Customers { get; set; } 

} 
0

はそう

myformmessagedialog.ShowDialog(); 

myformmessagedialog dialog = new myformmessagedialg(this); 
dialog.ShowDialog(); 

になり、自分のクラスのコンストラクタは、このようになります。

public MessageBoxForm(myformmessagedialog parent){ 
    name=parent.fullName.Text; 
    address=parent.address.Text; 
    ...etc... 
    InitializeComponent(); 
} 

b eはフォーム全体ではなく名前、住所などを渡す方がいいです。パスを渡すために別の変数を追加する場所が1つ少ないため、この方法は変わっています。

関連する問題