Windowsフォーム/Webフォーム/モバイルフォームのOnLoadイベントにフラグが働きます。複数選択ではなく単一選択リストビューでは、次のコードは実装が簡単で、イベントの複数回の発生を防ぎます。
ListView が最初の項目の選択を解除すると、2 番目の項目が必要になり、コレクションには 1 つの項目のみが含まれるようになります。
以下は同じものをモバイル アプリケーションで使用したため、コンパクト フレームワークを使用しているため、一部のコレクション名が異なる場合がありますが、同じ原則が適用されます。
注: 最初の項目を選択するように設定したリストビューの OnLoad と populate を確認してください。
// ################ CODE STARTS HERE ################
//Flag to create at the form level
System.Boolean lsvLoadFlag = true;
//Make sure to set the flag to true at the begin of the form load and after
private void frmMain_Load(object sender, EventArgs e)
{
//Prevent the listview from firing crazy in a single click NOT multislect environment
lsvLoadFlag = true;
//DO SOME CODE....
//Enable the listview to process events
lsvLoadFlag = false;
}
//Populate First then this line of code
lsvMain.Items[0].Selected = true;
//SelectedIndexChanged Event
private void lsvMain_SelectedIndexChanged(object sender, EventArgs e)
{
ListViewItem lvi = null;
if (!lsvLoadFlag)
{
if (this.lsvMain.SelectedIndices != null)
{
if (this.lsvMain.SelectedIndices.Count == 1)
{
lvi = this.lsvMain.Items[this.lsvMain.SelectedIndices[0]];
}
}
}
}
################ CODE END HERE ################
理想的には、このコードを UserControl に配置して、1 つの選択 ListView で簡単に再利用および配布できるようにする必要があります。このコードは、複数選択ではあまり使用されません。イベントはその動作に対して適切に機能するためです。
それが役立つことを願っています。
敬具、
アンソニー・N・アーウィン
http://www.manatix.com