2009-08-08 28 views
-1

我在窗體窗體中獲得了一個ListView。當表單加載ListView加載personel對象時。我想當有些用戶雙擊ListView時,從ListView.SelectedItem屬性獲取personel對象並打開一個新窗體並將此對象轉移到新打開的窗體。如何在windows窗體之間傳輸對象c#

這裏是我的加載企業人事對象的ListView代碼:

public static void GetAll(ListView list) 
{ 
    list.Items.Clear(); 
    using (FirebirdEntityz context = new FirebirdEntityz()) 
    { 
     ObjectQuery<PERSONEL> query = context.PERSONEL; 
     foreach (var item in query) 
     { 
      var mylist = new ListViewItem { Text = item.NAME }; 
      mylist.SubItems.Add(item.SURNAME); 
      mylist.Tag = item; 
      list.Items.Add(mylist); 
     } 
    } 
} 

private void Form1_Load(object sender, EventArgs e) 
{      
    GetAll(listView1); 
} 

這是我爲轉移企業人事對象:

private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    PERSONEL personel = (PERSONEL)listView1.SelectedItems[0].Tag; 
} 
+1

我希望FirebirdEntityz應該是FirebirdEntityZ而不是FirebirdEntities – 2009-08-08 17:47:59

回答

2

在將要打開的新窗體中,在窗體類中添加一個新屬性;

private PERSONNEL Personnel{get; set;} 
public ShowPersonnel(PERSONNEL _personnel){ 
    this.Personnel = _personnel; 
    //do whatever you want here 
} 

在主窗體中;

private void listView1_SelectedIndexChanged(object sender, EventArgs e){ 
     PERSONNEL personnel = listView1.SelectedItems[0].Tag as PERSONNEL; 
     Form2 form2 = new Form2(); 
     form2.ShowPersonnel(personnel); 
     form2.Show(); 

} 

可能包含錯別字。將人員更改爲人員。

3

你也許公衆PERSONEL屬性只是添加到表單中,然後您將在您的SelectedIndexChanged事件處理程序中設置。然後,任何有權訪問選擇器表單的代碼都可以訪問您自定義的選定PERSONEL屬性。

0

你應該能夠設置列表視圖控件的顯示成員。在進入for循環之前,請執行以下操作:

list.DisplayMember = "Name" 

然後綁定對象。

list.DataSource = query.ToList() 

選定的項目會給你你已經綁定的對象...

MessageBox.Show(((PERSONEL)list.SelectedItem).Name); 

這是它在.NET 2.0是如何工作的。但我相信有可能是一種方式,3.0和更大的做到這一點...

1
  • 一種方法是有一個公共的屬性格式 的神祕因子已建議。
  • 或者你可以有一個參數化的ctor 並傳遞Personnel對象。雖然, 這可能會產生一些問題, Studio的窗體設計視圖。