我们有一个自定义的对象集合,它们绑定到一个列表框控件。当项目添加到列表中时,项目将显示在列表框中,但是当选择项目时,货币管理器位置将不会转到该位置。相反,货币经理头寸保持在现有头寸。只要鼠标按下,列表框项就会高亮,但厘米永远不会改变位置。
如果我复制其中一个集合对象,则列表框可以正常运行。
另外一个注意事项该集合中还包含集合,不确定这是否是一个问题。
答案 0 :(得分:2)
我花了太多时间后发现了这个问题......
此问题与集合中项目(自定义类)的一个属性相关,该属性绑定到日期选择器控件。该类的构造函数从不将该值设置为默认值。
这导致货币经理出现问题,因为特定属性(绑定到日期选择器)无效,货币经理不允许更改头寸。
我很糟糕!我知道的更好!
答案 1 :(得分:1)
您可能需要发布一些代码;以下(两个列表仅由CM绑定在一起)表明它工作正常...所以要找到错误,我们可能需要一些代码。
using System;
using System.ComponentModel;
using System.Windows.Forms;
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
BindingList<Foo> foos = new BindingList<Foo>();
foos.Add(new Foo("abc"));
foos.Add(new Foo("def"));
ListBox lb1 = new ListBox(), lb2 = new ListBox();
lb1.DataSource = lb2.DataSource = foos;
lb1.DisplayMember = lb2.DisplayMember = "Bar";
lb1.Dock = DockStyle.Left;
lb2.Dock = DockStyle.Right;
Button b = new Button();
b.Text = "Add";
b.Dock = DockStyle.Top;
b.Click += delegate
{
foos.Add(new Foo("new item"));
};
Form form = new Form();
form.Controls.Add(lb1);
form.Controls.Add(lb2);
form.Controls.Add(b);
Application.Run(form);
}
}
class Foo
{
public Foo(string bar) {this.Bar = bar;}
private string bar;
public string Bar {
get {return bar;}
set {bar = value;}
}
}
答案 2 :(得分:0)
收藏品没有“当前项目”的感觉。也许您的自定义集合可以,但ListBox
没有使用它。它在集合中有自己的“当前项目”索引。您需要处理SelectedIndexChanged
个事件才能使它们保持同步。