Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于运行时生成的控件,SelectedIndexChanged不会在WinForms中触发_C#_Winforms_Events_Data Binding - Fatal编程技术网

C# 对于运行时生成的控件,SelectedIndexChanged不会在WinForms中触发

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

我的前额因为这一次我的头撞在桌子上而擦伤了

我有一个表单,它根据传递给它的参数生成一组自定义用户控件(FieldMapper对象)。FieldMapper用户控件实际上只是TableLayoutPanel上组织的几个标签、一个BindingSource和一个组合框(绑定到BindingSource)。此UserControl上的ComboBox设置为DropDownList,并绑定到BindingSource,该BindingSource在构造时以IList作为参数进行填充

FieldMapper有一个名为MappingChanged的事件,每当底层SelectedIndexChanged事件被激发时,就会激发该事件,并且某些逻辑会确定与该事件一起激发的MappingChangedEventArgs的参数。这用于从其他组合框中删除/添加项,以便在FieldMapping控件系列中不能两次选择任何内容

问题是只有一个控件触发底层SelectedIndexChanged事件。此控件是我首先更改其组合框的选定值/索引的任何控件。我选择哪一个并不重要,但只有该控件将触发后续事件,尽管其他控件的组合框已更改

这是FieldMapper的构造函数(删除了与问题无关的参数)

替换:

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)