2011-12-12 60 views
0

我有一個列表框,裏面裝滿了我的訂單。如何從列表框中獲取項目並以另一種形式在列表視圖中顯示它們?

我想採取我的列表框中的所有項目,並將它們轉移到我的列表視圖。

然後,我想以我的列表視圖並以另一種形式(我的消息框)顯示它。

我的新的ListView:

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

我在工作,但我不記得具體的錯誤,我知道這是與公共無效loadlistview(listviewitemcollection項目)。我認爲它不會讓我打電話給listviewitemcollection,我錯過了一個系統的東西? – Claud

4

這樣做的一種方法是將要顯示的數據放在某種ViewModel中,基本上是一個類或一組具有要顯示的數據的類。然後主窗體可以顯示它,並且您可以將對該ViewModel的引用傳遞給消息框,並且它也可以顯示它。

一般而言,您希望避免將不同形式的控件直接綁定在一起的任何類型的代碼。

+0

這聽起來最實用,但我只是尋找目前的修復與我現在的設置,然後我會再次修改程序。我剛開始學習c#和表單,所以這是我迄今爲止所做的。 – Claud

+0

@ClaudiuBadau - 這會落入「現在就付我或以後付錢」的折衷。但是,您可以提取所需的數據,並將其發送到某種類型的數據結構中,並將其發送到您的消息框中。 – RQDQ

1

基本答案是你沒有。

您維護項目的集合(無論它們是什麼)。

您可以在列表框中顯示它們。

您可以在列表視圖中顯示它們。

如果你想從列表框中選擇一些,只將它們移動到列表視圖。

然後,您使用列表框選項在您的項目集合中找到它們,創建一個選定列表的列表,然後將其傳遞到具有listview的窗體以顯示。

不要使用UI控件來存儲數據,並且儘量不要讓一個窗體的UI直接依賴於另一個窗體。

0

我猜你需要什麼(我可能誤解了你在找什麼)是你MessageBoxForm的新方法,在你的Customers對象傳遞:

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; 
     } 
    } 
} 

如果是這樣,只需修改您的類是這樣的:

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最好只傳遞姓名,地址等,而不是整個形式,這種方式對於改變事物時很有用,因爲你有一個更少的地方可以添加另一個變量來傳遞。

相關問題