C# 对于运行时生成的控件,SelectedIndexChanged不会在WinForms中触发
我的前额因为这一次我的头撞在桌子上而擦伤了 我有一个表单,它根据传递给它的参数生成一组自定义用户控件(FieldMapper对象)。FieldMapper用户控件实际上只是TableLayoutPanel上组织的几个标签、一个BindingSource和一个组合框(绑定到BindingSource)。此UserControl上的ComboBox设置为DropDownList,并绑定到BindingSource,该BindingSource在构造时以IList作为参数进行填充 FieldMapper有一个名为MappingChanged的事件,每当底层SelectedIndexChanged事件被激发时,就会激发该事件,并且某些逻辑会确定与该事件一起激发的MappingChangedEventArgs的参数。这用于从其他组合框中删除/添加项,以便在FieldMapping控件系列中不能两次选择任何内容 问题是只有一个控件触发底层SelectedIndexChanged事件。此控件是我首先更改其组合框的选定值/索引的任何控件。我选择哪一个并不重要,但只有该控件将触发后续事件,尽管其他控件的组合框已更改 这是FieldMapper的构造函数(删除了与问题无关的参数) 替换:C# 对于运行时生成的控件,SelectedIndexChanged不会在WinForms中触发,c#,winforms,events,data-binding,C#,Winforms,Events,Data Binding,我的前额因为这一次我的头撞在桌子上而擦伤了 我有一个表单,它根据传递给它的参数生成一组自定义用户控件(FieldMapper对象)。FieldMapper用户控件实际上只是TableLayoutPanel上组织的几个标签、一个BindingSource和一个组合框(绑定到BindingSource)。此UserControl上的ComboBox设置为DropDownList,并绑定到BindingSource,该BindingSource在构造时以IList作为参数进行填充 FieldMappe
private void mapSelector_SelectedIndexChanged(object sender, EventArgs e)
作者:
你能为mapSelector\u SelectedIndexChanged添加正文吗?我看你的代码还可以。@Kroonwijk正在更新它
private void BuildMappingTable(IEnumerable<string> fieldNames)
{
int row = 0;
foreach (var field in fbProject.Fields)
{
FieldMapper mapper = new FieldMapper(field.Key, field.Value.FieldName, fieldNames.ToList());
mapper.EnableMappingField = false;
mapper.Anchor = AnchorStyles.Right | AnchorStyles.Left;
mapper.MappingChanged += MappingChanged;
mappingTable.Controls.Add(mapper, 0, row);
row++;
}
if (!built && !original)
SetInitialValues()
built = true;
}
private void mapSelector_SelectedIndexChanged(object sender, EventArgs e)
{
if (currentValue == null || currentValue.Equals("NONE"))
{
currentValue = (string)mapSelector.SelectedItem;
OnMappingChanged(new MappingSelectedEventArgs(MappingSelectedEventArgs.MappingSelectedAction.SET, currentValue));
}
else if (mapSelector.SelectedItem.Equals("NONE"))
{
OnMappingChanged(new MappingSelectedEventArgs(MappingSelectedEventArgs.MappingSelectedAction.REMOVED, currentValue));
currentValue = "NONE";
}
else if (!mapSelector.SelectedItem.Equals(currentValue))
{
OnMappingChanged(new MappingSelectedEventArgs(MappingSelectedEventArgs.MappingSelectedAction.CHANGED, currentValue,
(string)mapSelector.SelectedItem));
currentValue = (string)mapSelector.SelectedItem;
}
}
protected void OnMappingChanged(MappingSelectedEventArgs args)
{
if (MappingChanged != null)
MappingChanged(this, args);
}
private void mapSelector_SelectedIndexChanged(object sender, EventArgs e)
private void bindingSource_CurrentChanged(object sender, EventArgs e)