したがって、BindingListにバインドされているリストボックスGUI要素があります。私が遭遇する問題は、アイテムを追加するたびにBindingListに追加されると、リストボックス内の対応するアイテムが選択されることです。これは、リストボックスでSelectedIndexChangedイベントを発生させるため、大きな問題になります。これは、リソースをいくらか消費するように設定されています。
このデフォルトの動作を削除するにはどうすればよいですか?
編集:これが私が使用しているコードです
BindingList<KeyValuePair<int, string>> savedGLs;
public Form1()
{
InitializeComponent();
savedGLs = new BindingList<KeyValuePair<int, string>>();
lstGLs.DataSource = savedGLs;//lstGLs is my listbox
lstGLs.DisplayMember = "Value";
lstGLs.ValueMember = "Key";
populateMgmtCos();
populateSavedGLs();//this is where the SelectedIndexChanged event is firing
}
private void populateSavedGLs()
{
savedGLs.Clear();
string errmsg = string.Empty;
using (SqlConnection sqlConn = new SqlConnection(getConnString(true)))
{
string sCmd = " SELECT Name, Hmy FROM GLTable";
DataTable dt = MySqlHelper.ExecuteForDataTable(sqlConn, sCmd, out errmsg);
foreach (DataRow dr in dt.Rows)
savedGLs.Add(new KeyValuePair<int,string>(int.Parse(dr["Hmy"].ToString()), dr["Name"].ToString().Trim()));
}
}
EDIT2:3.5フレームワークを使用していることが原因でしょうか?問題を再現するためのコードを除いて、ほとんど何も含まれていない新しいプロジェクトを作成しました。BindingListのAdd()メソッドは、リストボックスでSelectedIndexChangedメソッドを呼び出しているようです。最初の項目が追加されたときに2回、その後は1回です。これは、その新しいプロジェクトの完全なコードです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
BindingList<KeyValuePair<int, string>> bl;
public Form1()
{
InitializeComponent();
bl = new BindingList<KeyValuePair<int, string>>();
listBox1.DataSource = bl;
bl.Add(new KeyValuePair<int, string>(1, "blah1"));
bl.Add(new KeyValuePair<int, string>(2, "blah2"));
bl.Add(new KeyValuePair<int, string>(3, "blah3"));
bl.Add(new KeyValuePair<int, string>(4, "blah4"));
bl.Add(new KeyValuePair<int, string>(5, "blah5"));
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("blah");
}
}
}
output:
blah
blah
blah
blah
blah
blah