VS2005 C # Валюта Менеджера Проблема с позицией не меняется - PullRequest
1 голос
/ 10 октября 2008

У нас есть пользовательская коллекция объектов, которые мы привязываем к элементу управления списком. Когда элемент добавляется в список, он появляется в списке, однако при выборе элемента позиция валютного менеджера не переходит в позицию. Вместо этого позиция валютного менеджера остается на существующей позиции. Элемент списка подсвечивается до тех пор, пока мышь нажата, однако см никогда не меняет положение.

Если я копирую один из объектов коллекции, список работает правильно.

Еще одно примечание, что в коллекции также есть коллекции, но не уверен, что это будет проблемой.

Ответы [ 3 ]

2 голосов
/ 10 октября 2008

Я нашел проблему, потратив слишком много времени ....

Эта проблема была связана с одним из свойств элемента (пользовательский класс) в коллекции, который был связан с элементом управления выбора даты. Конструктор для класса никогда не устанавливает значение по умолчанию.

Это вызвало проблему с диспетчером валют, не позволяющим изменить позицию, поскольку конкретное свойство (привязанное к средству выбора даты) было недействительным.

Мне плохо! Я знаю лучше!

1 голос
/ 10 октября 2008

Возможно, вам потребуется опубликовать некоторый код; следующее (с двумя списками, связанными только 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;}
    }
}
0 голосов
/ 10 октября 2008

Коллекции не имеют смысла "текущий элемент". Возможно, ваша пользовательская коллекция делает, но ListBox не использует это. Он имеет свой собственный индекс "текущий элемент" в коллекции. Вам нужно обработать SelectedIndexChanged события, чтобы синхронизировать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...