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を静的にすることはできますが、それは私にとっては悪い習慣のようです。より洗練されたソリューションは何でしょうか?
フォームは、あなたがのBindingSourceとListBoxコントロールのDataSourceを割り当てるコードを投稿することができ、あなたは新しい項目を追加する場所?ちなみに、SelectedIndexはintなので、nullになることはありません:-1 – stuartd
@ Stuart Dunkeldに初期化されます。あなたはSelectedIndexがintであることについて正しいでしょう。私は今夜後にコードを掲載する予定です。 – wulfgarpro
私はここでさらに議論しています:http://social.msdn.microsoft.com/Forums/en/winforms/thread/6c90af6d-e1f9-4890-90a9-260abcfc1980 – wulfgarpro