Я нашел неправильную последовательность в жизненном цикле событий в приложении Windows на C #. У меня есть 3 комбинированных списка в форме окна.
При заполнении формы первый комбобокс заполняется как
private void Form1_Load(object sender, EventArgs e)
{
FillSubjects();
}
public void FillSubjects()
{
List<Subject> Subjects = objEntityManager.GetSubjects();
if (Subjects.Count != 0)
{ cmbSubjects.DataSource = Subjects;
cmbSubjects.DisplayMember = "SubjectName";
cmbSubjects.ValueMember = "SubjectId";
CommonDataObject.SelectedSubject =
Convert.ToInt32(cmbSubjects.SelectedValue);
}
}
else
{
cmbSubjects.DataSource = null;
cmbSubjects.Enabled = false;
}
при изменении поля со списком cmbsubject, заполняющего поле со списком главы:
private void cmbSubjects_SelectedIndexChanged(object sender, EventArgs e)
{
FillChapters();
}
public void FillChapters()
{
int subjectId = (cmbSubjects.SelectedItem as Subject).SubjectId;
if (subjectId > 0)
{
List<Chapter> Chapters = new List<Chapter>();
Chapters = objEntityManager.GetChapters(subjectId);
if (Chapters.Count != 0)
{
cmbChapters.DataSource = Chapters;
cmbChapters.DisplayMember = "ChapterName";
cmbChapters.ValueMember = "ChapterId";
CommonDataObject.SelectedChapter =
Convert.ToInt32(cmbChapters.SelectedValue);
}
else
{
cmbChapters.DataSource = null;
cmbChapters.Enabled = false;
}
}
} }
где, как в Главах Выбранный индекс изменил заполнение события
private void cmbChapters_SelectedIndexChanged(object sender, EventArgs e)
{
FillTopics();
}
public void FillTopics()
{
int chpterId = (cmbChapters.SelectedItem as Chapter).ChapterId;
if (chpterId > 0)
{
List<Topic> Topics = objEntityManager.GetTopics(chpterId);
if (Topics.Count != 0)
{
cmbtopics.DataSource = objEntityManager.GetTopics(chpterId);
cmbtopics.DisplayMember = "TopicName";
cmbtopics.ValueMember = "TopicId";
CommonDataObject.SelectedTopic =
Convert.ToInt32(cmbtopics.SelectedValue);
}
else
{
cmbtopics.DataSource = null;
cmbtopics.Enabled = false;
}
}
}
Теперь проблема в том,
когда событие загрузки формы вызывается, очевидно, метод Fillsubject () вызывается в соответствии с кодом, в котором cmbSubjects получает объекты субъекта в List. но при назначении источника данных для cmbSubject вызывается его событие cmbSubjects_SelectedIndexChanged. повторное назначение при назначении DisplayMember, то же самое событие cmbSubjects_SelectedIndexChanged получает вызовы.
если наблюдать в событии cmbSubjects_SelectedIndexChanged, я вызываю метод FillChapter (). где я заполняю поле со списком cmbChapter, где то же самое происходит с cmbChapter при назначении члена источника данных и отображения, событие cmbChapters_SelectedIndexChanged получает вызовы.
Где, как и в событии cmbChapters_SelectedIndexChanged, я заполняю темы в поле со списком cmbTopic. у него нет события изменения индекса, иначе он должен вызываться при назначении источника данных и элементов отображения cmbTopics.
таким образом, количество временных событий вызывается снова и снова без необходимости. Хао, чтобы избежать этого? и почему это должно происходить? Я новичок в разработке приложений для Windows, поэтому, пожалуйста, направьте меня.