2010-10-27 57 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"); 
相关问题