VS2005 C# Проблема с Валютным менеджером, Позиция которого не меняется

#c# #.net #winforms

Вопрос:

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

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

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

Комментарии:

1. Пользовательская коллекция пользовательских классов реализует Ilist.

Ответ №1:

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

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

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

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

Ответ №2:

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

Ответ №3:

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