有时当我想显示用户控件并设置其绑定时,我得到一个System.ArgumentOutOfRangeException。当我点击继续时,操作将被中止,但当我再次执行相同的操作时,用户控件将正确显示。我无法重现这个问题。
我已经阅读了一些在更新期间更改了BingdinsCollection的问题。但我不能指出我项目中的特定代码。它可以与窗口手柄有关吗?
************** Exception Text **************
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at System.Windows.Forms.BindingsCollection.get_Item(Int32 index)
at System.Windows.Forms.Control.UpdateBindings()
at System.Windows.Forms.Control.OnBindingContextChanged(EventArgs e)
at System.Windows.Forms.ContainerControl.OnCreateControl()
at System.Windows.Forms.UserControl.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
at System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.set_Visible(Boolean value)
.. my click
答案 0 :(得分:0)
您是否在另一个线程上设置了BindingSource?或者在另一个线程上执行任何,这可能会导致DataBindings集合在枚举时被更改?
从框架来源看,这看起来是唯一可能发生的方式。
来自Control.cs
private void UpdateBindings()
{
for (int index = 0; index < this.DataBindings.Count; ++index)
BindingContext.UpdateBinding(this.BindingContext, ((BindingsCollection) this.DataBindings)[index]);
}
来自BindingsCollection.cs
public Binding this[int index]
{
get
{
return (Binding) this.List[index];
}
}
答案 1 :(得分:0)
从异常堆栈跟踪中,看起来您正在更改控件的可见性,但绑定到控件的ArrayList没有正确的控件条目。
我会尝试更改您执行操作的顺序。例如,如果你是绑定然后显示,我会改变这个过程。