2011-01-26 2 views
1

У меня есть ListBox, привязанный к коллекции BindingList. Это отлично работает.BindingList и поведение ListBox

Мое единственное горе возникает, когда первый элемент входит в коллекцию. Поведение ListBox по умолчанию заключается в том, чтобы выбрать этот элемент, но это не вызывает событие SelectedIndexChanged. Я предполагаю, что это потому, что SelectedIndex изначально имеет значение null; при достижении чего-либо, кроме нулевого, индекс фактически не изменяется; скорее назначен. Как я могу остановить поведение по умолчанию при выборе (выделение) первого начального элемента, добавленного в ListBox?

Если мое предположение неверно, проследите какой-нибудь свет?

Update

Вот основные части моего кода до сих пор.

public UavControlForm() 
    { 
     InitializeComponent(); 
     _controlFacade = new UavController.Facade.ControlFacade(); 
     UpdateFlightUavListBox(); 
    } 

    private void UpdateFlightUavListBox() 
    { 
     lsbFlightUavs.DataSource = _controlFacade.GetFlightUavTally(); 
     lsbFlightUavs.DisplayMember = "Name"; 
    } 

    private static BindingList<FlightUav> _flightUavTally = new BindingList<FlightUav>(); 
    public BindingList<FlightUav> FlightUavTally 
    { 
     get { return _flightUavTally; } 
    } 

    public void AddFlightUav(double[] latLonAndAlt) 
    { 
     FlightUav flightUav = new FlightUav(); 
     flightUav.Latitude = latLonAndAlt[0]; 
     flightUav.Longitude = latLonAndAlt[1]; 
     flightUav.Altitude = latLonAndAlt[2]; 
     _flightUavTally.Add(flightUav); 

     UtilStk.InjectAircraftIntoStk(flightUav.Name); 
     flightUav.SetFlightDefaults(); 
     PlayScenario(); 
    } 

Update:

Таким образом, установка lsbFlightUavs.SelectedIndex = -1 решает эту проблему. Вышеуказанный метод AddFlightUav() вызывается из обработчика OnClick кнопки во второй форме из основной формы. Как я могу позвонить lsbFlightUavs.SelectedIndex = -1 из этой второй формы, когда возвращается метод AddFlightUav()? Я знаю, что могу сделать ListBox статичным, но для меня это кажется плохой практикой. Что было бы более элегантным решением?

+2

Вы можете разместить код, где вы назначаете DataSource из BindingSource и ListBox, и где вы добавить новый элемент? Кстати, SelectedIndex является int, поэтому он никогда не будет null: он инициализирует -1 – stuartd

+0

@ Стюарт Данкелд, вы правы в том, что SelectedIndex является int. Сегодня я отправлю код позже. – wulfgarpro

+0

У меня есть некоторые дальнейшие обсуждения здесь: http://social.msdn.microsoft.com/Forums/en/winforms/thread/6c90af6d-e1f9-4890-90a9-260abcfc1980 – wulfgarpro

ответ

0

Используя WinForms, я применил шаблон Singleton. Это позволило мне получить доступ к элементу управления ListBox из моей второй формы.

Форма 1

private static UavControlForm _instance = new UavControlForm(); 
private UavControlForm() 
{ 
    InitializeComponent(); 
} 
public static UavControlForm Instance 
{ 
    get { return _instance; } 
} 
public ListBox FlightUavListBox 
{ 
    get { return lsbFlightUavs; } 
} 

Форма 2

UavControlForm.Instance.FlightUavListBox.SelectedIndex = -1; 
Смежные вопросы