簡體   English   中英

將 ListBox DataSource 屬性設置為 null 以更改列表項是否錯誤?

[英]Is it wrong to set ListBox DataSource property to null in order to change list Items?

我發現當列表框已通過數據源填充時,Items.Clear 並不總是清除列表框。 將 DataSource 設置為 Null 允許使用 Items.Clear() 清除它。

這是這樣做的錯誤方法嗎? 這樣做是不是我的想法有點錯誤?

謝謝。

下面是我准備用來說明我的問題的代碼。 它包括一個列表框和三個按鈕。

如果您按此順序單擊按鈕,則一切正常:

  1. 使用數組按鈕填充列表
  2. 使用數組按鈕填充列表項
  3. 使用數據源按鈕填充列表項

但是,如果您首先單擊“使用數據源填充列表項”按鈕,則單擊其他兩個按鈕中的任何一個都會導致此錯誤:“System.Windows.Forms.dll 中發生類型為‘System.ArgumentException’的未處理異常”,並帶有“設置 DataSource 屬性后,無法修改項目集合。”

注釋?

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

    private void btnFillListWithArray_Click(object sender, EventArgs e)
    {
       string[] myList = new string[4];

        myList[0] = "One";
        myList[1] = "Two";
        myList[2] = "Three";
        myList[3] = "Four";
        //listBox1.DataSource = null;  <= required to clear list
        listBox1.Items.Clear();
        listBox1.Items.AddRange(myList);
    }

    private void btnFillListItemsWithList_Click(object sender, EventArgs e)
    {
        List<string> LStrings = new List<string> { "Lorem", "ipsum", "dolor", "sit" };
        //listBox1.DataSource = null;  <= required to clear list
        listBox1.Items.Clear();            
        listBox1.Items.AddRange(LStrings.ToArray());

    }

    private void btnFillListItemsWithDataSource_Click(object sender, EventArgs e)
    {
        List<string> LWords = new List<string> { "Alpha", "Beta", "Gamma", "Delta" };
        //listBox1.DataSource = null;  <= required to clear list
        listBox1.Items.Clear();
        listBox1.DataSource = LWords;

    }
}

根據 Microsoft 的說法,似乎將數據源設置為 Null 然后清除列表是可以接受的。

來源: http : //support.microsoft.com/kb/319927

如果您的列表框綁定到一個數據源,那么該數據源將成為列表框的“主”。 然后您不清除列表框,但您需要清除數據源。 因此,如果列表框綁定到 LWords,則執行 Lwords.clear() 並且列表框將被清除。 這是正確的行為,因為這就是數據綁定的全部內容。

如果您將數據源設置為 null,您基本上是在告訴列表框它不再是數據綁定的。 當然,它的副作用是它變空了。 但是根據情況,您可能不希望只清除列表框,但您可能希望同時清除數據源和列表框。

假設您想通過 GUI 清除 LWords,並且 LWords 是您的列表框的來源,您按下一個按鈕並將數據源設置為 null,您看到列表框變空,認為 LWords 不是空的,但 LWords 不是空,然后在這種情況下,這將是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM