2011-01-26 11 views
1

BindingListコレクションにバインドされたListBoxがあります。これは素晴らしいです。BindingListとListBoxの動作

私の悲しみは、最初のアイテムがコレクションに入ったときに発生します。 ListBoxのデフォルトの動作は、その項目を選択することですが、SelectedIndexChangedイベントは発生しません。これは、SelectedIndexが最初にnullに設定されているためです。ヌル以外のものになると、インデックスは実際には変更されません。むしろ割り当てられる。 ListBoxに追加された最初の最初の項目を選択(強調表示)するデフォルトの動作を停止するにはどうすればよいですか?

私の前提が間違っている場合は、光を当ててください。ここで

アップデートは、これまで私のコードの中核部分です。

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(); 
    } 

更新:だから

lsbFlightUavs.SelectedIndex = -1は、問題を解決し設定します。上記のメソッドAddFlightUav()は、ボタンのOnClickハンドラから、メインフォームの2番目のフォームで呼び出されます。 AddFlightUav()メソッドが返されたときに、この第2の形式からlsbFlightUavs.SelectedIndex = -1に電話する方法はありますか? ListBoxを静的にすることはできますが、それは私にとっては悪い習慣のようです。より洗練されたソリューションは何でしょうか?

+2

フォームは、あなたがのBindingSourceとListBoxコントロールのDataSourceを割り当てるコードを投稿することができ、あなたは新しい項目を追加する場所?ちなみに、SelectedIndexはintなので、nullになることはありません:-1 – stuartd

+0

@ Stuart Dunkeldに初期化されます。あなたはSelectedIndexがintであることについて正しいでしょう。私は今夜​​後にコードを掲載する予定です。 – wulfgarpro

+0

私はここでさらに議論しています:http://social.msdn.microsoft.com/Forums/en/winforms/thread/6c90af6d-e1f9-4890-90a9-260abcfc1980 – wulfgarpro

答えて

0

WinFormsを使用して、シングルトンパターンを実装しました。これにより、私は2番目のフォームからListBoxコントロールにアクセスできました。

フォーム1

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

UavControlForm.Instance.FlightUavListBox.SelectedIndex = -1; 
関連する問題