在网络中处理Windows应用程序中的组合框事件(c#)
我在c#中的windows应用程序的事件生命周期中发现了一些错误的序列。 我的窗体中有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应用程序开发新手,所以请指导我。
如果更改组合框的内容,它也会更改所选项目,因为可供选择的项目已更改。 这是预期的行为。
在响应SelectedIndexChanged
事件时,您应该意识到可能没有选择任何内容并采取相应措施。 目前,您的代码假定SelectedItem
将是非空的,并且不能保证。 您还应该检查新选择是否与之前的选择不同,因为如果它将包含相同的事物,则重新填充列表没有意义。
上一篇: handle combobox events in windows application in dot net (c#)