位置不变的VS2005 C#货币管理器问题

时间:2008-10-10 14:22:22

标签: c# .net winforms

我们有一个自定义的对象集合,它们绑定到一个列表框控件。当项目添加到列表中时,项目将显示在列表框中,但是当选择项目时,货币管理器位置将不会转到该位置。相反,货币经理头寸保持在现有头寸。只要鼠标按下,列表框项就会高亮,但厘米永远不会改变位置。

如果我复制其中一个集合对象,则列表框可以正常运行。

另外一个注意事项该集合中还包含集合,不确定这是否是一个问题。

3 个答案:

答案 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个事件才能使它们保持同步。