事件,而这个时候用户并没有选择内容,其SelectedValue也不是对应字段的值。那么时写在SelectedIndexChanged中的处理代码就会因为SelectedValue的内容不正确引发异常。
一般网上找到的方法是添加一个标记位,在绑定前设置为false,绑定完成后设置回true。
@H_502_0@void BindComboBox()
{
flag=false;
ComBoxBox1.ValueMember"ValueColumn;
ComBoxBox1.DisplayMemberDisplayColumn;
ComBoxBox1.DataSourceDataTable1;
flagtrue;
}
@H_502_0@private ComBoxBox1_SelectedIndexChanged(object sender,EventArgs e)
{
if(flag)
{
//Do something
}
}
@H_404_96@这个方法涉及到 多一个变量 flag 每个窗体都要改动。
@H_502_0@另外还有一种办法,就是在绑定前,将SelectedIndexChanged的委托去掉,等绑定完成后,再添加事件委托。@H_502_0@ BindComboBox()
{ 去除委托ComboBox1.SelectedIndexChanged -=new EventHandler(ComboBox1_SelectedIndexChanged);
ComboBox1.DataSource null;
ComboBox1.ValueMember ;
ComboBox1.DataSource DataTable1;
添加委托 += EventHandler(ComboBox1_SelectedIndexChanged);
ComboBox1.DisplayMember ;
} @H_502_0@委托呢,vb.net比较麻烦,跟何况初始化ComboBox是写到另外一个模块里面的函数里面。 @H_502_0@两种方法都可以,但是之间的优劣暂时没去比较。感觉好像处理一下委托会好点。因为这种办法真的减少了事件的激发次数。 @H_502_0@网友评论中的一个关键点: @H_502_0@ 在事件中可以判斷 ContainsFocus 屬性來確定是否用戶觸發...先试一试看看。