2010-10-27 68 views
0

請在Visual Studio 2010,.NET 4.0 WinForms應用程序,然後讓用戶控制(從項目/添加用戶控件...)使用此代碼:這段代碼爲什麼阻止我的應用程序關閉?

public partial class UserControl1 : UserControl 
{ 
    private string _SelectedTable; 

    public string SelectedTable 
    { 
     get { return _SelectedTable; } 
     set { _SelectedTable = value; } 
    } 

    public UserControl1() 
    { 
     InitializeComponent(); 
     DataBindings.Add("SelectedTable", listBox1, "SelectedValue"); 
     listBox1.DataSource = new List<string>(); 
    } 
} 

編譯,加上從控制工具箱爲Form1,再次編譯並嘗試關閉。它不會(對吧?)。爲什麼?

有些事情我可以做,以防止這種情況發生,如將DataBindings.Add("SelectedTable", listBox1, "SelectedValue");行更改爲DataBindings.Add("SelectedTable", tablesListBox, "SelectedValue", false, DataSourceUpdateMode.Never);,或刪除InitializeComponent()後的任意兩行。但我想知道爲什麼會發生這種情況,或者至少是什麼,一般來說我做錯了什麼,我打破了一般規則,所以我不會再犯類似的錯誤。

回答

1

顯然,這是某種驗證問題的...如果您在用戶控件上將CausesValidation設置爲false,則它工作正常。不知道這是怎麼回事準確,但...

無論如何,如果你不明確設置ValueMember屬性,則SelectedValue是沒有意義的,你應該使用SelectedItem代替。我試過你的代碼SelectedItem而不是SelectedValue,它工作正常。

+0

好吧,'SelectedValue.ToString()'給我在列表中選擇的任何文本,與'SelectedItem.ToString()'相同。我想我會使用'SelectedItem',因爲它似乎是約定。 – Juan 2010-10-27 16:07:00

+1

我同意它*應該*與'SelectedValue'一起工作,但顯然它不會......可能您應該在Microsoft Connect上提交一個錯誤,因爲我沒有看到這種行爲的任何合理解釋。 – 2010-10-27 23:14:16

+0

事實上,它必須是一個錯誤,因爲如你所說沒有邏輯連接,沒有什麼會引發異常,並且Microsoft的文檔中沒有__'Note'__。 – Juan 2010-10-28 17:33:56

1

我想應該是職高,你從來不說什麼的SelectedValue勢必...
我改變你的代碼就像這樣,它的工作原理:


Collection<Person> mylist = new Collection<Person>();    
listBox1.DataSource = mylist; 
listBox1.DisplayMember = "Name"; 
listBox1.ValueMember = "ID"; 

DataBindings.Add("SelectedTable", listBox1, "SelectedValue"); 
相關問題