2014-12-03 27 views
-1

我試圖找到一個方法,但我似乎無法得到任何工作。我有一個窗體,它有一個按鈕,打開第二個窗體,上面有一個列表框,裏面充滿了那個屏幕上的項目。然後我將所有這些項目放入列表中。這些項目,一旦在form1上,將再次放入列表框中。從另一個表單獲取列表框或列表的內容?

我遇到的問題是,我不能爲我的生活弄清楚如何訪問列表框或列表中的元素,我需要從主窗體訪問它,否則我什麼也做不了其他。

public partial class product_list : Form 
{ 
    public List<string> ProductList { get; private set; } 

    public product_list() 
    { 
     InitializeComponent(); 

     ProductList = new List<string>(); 
    } 

    public void btnAdd_Click(object sender, EventArgs e) 
    { 


     string selectedItem = (string)listBox1.SelectedItem; 
     listBox2.Items.Add(selectedItem); 
     ProductList.Add(selectedItem); 
    } 

    public void btnRemove_Click(object sender, EventArgs e) 
    { 
     string selectedItem = (string)listBox2.SelectedItem; 
     listBox2.Items.Remove(selectedItem); 
     ProductList.Remove(selectedItem); 
    } 

    public void btnClose_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 
} 

這是我的第二個形式。這下面這裏是我的主要形式的代碼到目前爲止

public partial class Form1 : Form 
{ 
    Form productSelect = new product_list(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Register.Visible = true; 
    } 

    private void btnService_Click(object sender, EventArgs e) 
    { 

    } 

    private void btnProduct_Click(object sender, EventArgs e) 
    { 
     productSelect.ShowDialog(); 

     var itemsFromSecondForm = productSelect.ProductList; 
    } 
} 

正如你所看到的,我不是很遙遠,但這個一直抱着我一會兒。

任何人都有一種方法,我可以用來獲取列表框中的所有元素或form1中的列表本身?

編輯:更新我的代碼,我現在擁有。仍然收到錯誤

錯誤1'System.Windows.Forms.Form'不包含'ProductList'的定義,也沒有接受'System.Windows.Forms.Form'類型的第一個參數的擴展方法'ProductList'可以找到(您是否缺少使用指令或裝配參考?)

+0

^h你是否通過代碼...?還有什麼是名單是私人,公共,靜態..?我認爲默認情況下,如果您沒有明確聲明列表類型爲「public」,那麼它默認爲私有 – MethodMan 2014-12-03 20:01:06

回答

0

使ProductList成爲一個公共財產,並帶有私人二傳手。在你的構造函數中初始化它。 (我給它一個私人二傳手,因爲你沒有必要從第二形態以外的實例化。)

public List<string> ProductList { get; private set; } 

public product_list() 
{ 
    InitializeComponent(); 

    ProductList = new List<string>(); 
} 

然後你就可以訪問它的主要形式,關閉第二種形式後:

private void btnProduct_Click(object sender, EventArgs e) 
{ 
    productSelect.ShowDialog(); 

    var itemsFromSecondForm = productSelect.ProductList; 
} 

關於在最新的更新的錯誤:

錯誤1「SYST em.Windows.Forms.Form'不包含'ProductList'的定義,並且沒有找到接受'System.Windows.Forms.Form'類型的第一個參數的擴展方法'ProductList'(你是否缺少using指令或一個裝配參考?)

這是因爲公共財產是在你的product_list類,而不是在基地Form類。你必須創建你的類的一個實例,而不是Form的實例。

此外,FWIW,我喜歡創造儘可能接近到窗體的情況下在那裏我使用它們:

private void btnProduct_Click(object sender, EventArgs e) 
{ 
    // A "using" block will take care of disposing of your Form 
    // when you're finished using it. 
    using (var productSelect = new product_list()) 
    { 
     productSelect.ShowDialog(); 

     var itemsFromSecondForm = productSelect.ProductList; 

     // do something with itemsFromSecondForm 
    } 
} 
+0

我似乎在form1上得到一個錯誤 var itemsFromSecondForm = productSelect.ProductList; 任何想法是什麼會導致錯誤表示「不包含'產品列表'的定義 – BMitrano825 2014-12-03 22:40:13

+0

@ BMitrano825拼寫錯誤?您的變量以小寫字母開頭。在我的示例中,我使用了大寫字母,因爲這在習慣上命名爲公共財產 – 2014-12-03 22:54:23

+0

不,這不是我偶然在這裏輸入的問題 – BMitrano825 2014-12-03 23:03:43

0

要回答你的錯誤1:

更改此:

Form productSelect = new product_list(); 

這樣:

product_list productSelect = new product_list(); 
相關問題