Почему событие: comboBox_SelectedIndexChanged срабатывает при событии form_load?
Когда я загружаю форму, которая содержит комбинированный список, я заметил, что событие comboBox_SelectedIndexChanged вызвано, но я не хочу использовать это событие при загрузке формы, что вы предлагаете избежать этой проблемы.
Я попытался остановить его, установив логическое значение в false, и велел comboBox_SelectedIndexChanged выполнять только в том случае, если логическое значение равно true. Конечно, после завершения события form_load я установил логическое значение true, но это не работает.
Любая помощь будет оценена
вот код:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
setprice(comboBox1, textBox1, textBox2, 0);
}
public void setprice(ComboBox combo, TextBox prix, TextBox qt, int num)
{
if (flag1[num] == 1)
{
SqlDataReader reader = null;
try
{
SqlCommand command = mySqlConnection1.CreateCommand();
command.CommandText = "select prix_vente_ttc, prix_vente_ht from STK_PRODUITS_GENERIQUE where num_produit=" + combo.SelectedValue.ToString();
reader = command.ExecuteReader();
while (reader.Read())
{
prix_ttc[num] = Convert.ToDouble(reader.GetDecimal(0));
prix_ht[num] = Convert.ToDouble(reader.GetDecimal(1));
prix_htt[num] = prix_ht[num] * Convert.ToInt16(qt.Text);
//fact.forfait.setPrix_ht( prix_htt);
//fact.forfait.setTva(prix_ttct - prix_htt);
prix_ttct[num] = prix_ttc[num] * Convert.ToDouble(qt.Text);
prix.Text = Convert.ToString(prix_ttct[num]);
}
//textBox3_TextChanged(null, null);
// reader.Close();
}
catch (Exception excep)
{
MessageBox.Show(excep.Message);
//if (reader != null) reader.Close();
}
if (reader != null) reader.Close();
}
flag1[num] = 1;
}
private void vidangeform_Load(object sender, EventArgs e)
{
flag1[0] = 0;
flag1[1] = 0;
SqlDataReader reader = null;
try
{
nextform = new filtreform();
SqlCommand command = mySqlConnection1.CreateCommand();
command.CommandText = "select designation, num_produit from STK_PRODUITS_GENERIQUE where STK_PRODUITS_GENERIQUE.num_famille in (select num_famille from parametrage_vidange where parametrage_vidange.produit='forfait_vidange')";
Dictionary<int, string> dict = new Dictionary<int, String>();
reader = command.ExecuteReader();
while (reader.Read())
{
dict.Add(reader.GetInt32(1), reader.GetString(0));
}
comboBox1.DataSource = new BindingSource(dict, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
reader.Close();
command = mySqlConnection1.CreateCommand();
command.CommandText = "select designation, num_produit from STK_PRODUITS_GENERIQUE where STK_PRODUITS_GENERIQUE.num_famille in (select num_famille from parametrage_vidange where parametrage_vidange.produit='huile')";
dict = new Dictionary<int, String>();
reader = command.ExecuteReader();
while (reader.Read())
{
dict.Add(reader.GetInt32(1), reader.GetString(0));
}
comboBox2.DataSource = new BindingSource(dict, null);
comboBox2.DisplayMember = "Value";
comboBox2.ValueMember = "Key";
reader.Close();
}
catch (Exception ep) { MessageBox.Show("problème de connexion avec le serveur ou resultat retourné nul. \n" + ep.Message); if(reader != null) reader.Close(); }
}
1 ответ
SelectedIndexChanged запускается, когда вы устанавливаете DataSource для comboBox.
Трудно придумать чистый способ управления событиями с помощью WinForms, но вы можете вместо подписки на событие во время разработки подписаться на него после установки dataSource:
- удалите обработчик событий comboBox1_SelectedIndexChanged из событий в выпадающем списке во время разработки
добавьте следующую строку в конец вашего метода vidangeform_Load:
comboBox1.SelectedIndexChanged + = comboBox1_SelectedIndexChanged;