I have a form that I call from another form. I put all the initialization code in the constructor, so nothing is being called from the Form_Load event. I have stepped through the initialization code, which populates 8 ComboBoxes from a DataSet that was already loaded in the original form. No matter what I do, calling Form.Show() or Form.ShowDialog() takes forever - at least 15 seconds, sometimes more. This is unacceptable for the type of operation being performed; users will never be OK with it.
private void ContextMenuItem_Click(object sender, EventArgs e)
    {
        ToolStripItem mui = sender as ToolStripItem;
        frmAddDataFieldMapping frm = null;
        switch(mui.Name) {
            case "muiAddSourceDataFieldMapping":
                frm = new frmAddDataFieldMapping(this, ((NodeInfo)tvwMain.SelectedNode.Tag), DataFieldMappingTypes.Source);
                break;
            case "muiAddDestinationDataFieldMapping":
                frm = new frmAddDataFieldMapping(this, ((NodeInfo)tvwMain.SelectedNode.Tag), DataFieldMappingTypes.Destination);
                break;
        }
        frm.Show();
}
    public frmAddDataFieldMapping(frmMain _frm, frmMain.NodeInfo _ni, frmMain.DataFieldMappingTypes _dfmt)
        {
            InitializeComponent();
            frm = _frm;
            ni = _ni;
            dfmt = _dfmt;
            if(ni.NodeType == frmMain.NodeTypes.DataField)
            {
                PopulateComboBoxes();
                SetupComboBoxFilters();
            }
        }
        private void PopulateComboBoxes()
        {
            int parentSelectedId = 0;
            if(dfmt == frmMain.DataFieldMappingTypes.Source)
            {
                parentSelectedId = PopulateComboBox(cboSourceDataField, new CboInfo(ni.NodeType, frmMain.DataFieldMappingTypes.Source), ni.Id);
                parentSelectedId = PopulateComboBox(cboSourceDataSet, new CboInfo(frmMain.NodeTypes.DataSet,
                    frmMain.DataFieldMappingTypes.Source), parentSelectedId);
                parentSelectedId = PopulateComboBox(cboSourceDataSource, new CboInfo(frmMain.NodeTypes.DataSource, 
                    frmMain.DataFieldMappingTypes.Source), parentSelectedId);
                parentSelectedId = PopulateComboBox(cboSourceDataSourceType, new CboInfo(frmMain.NodeTypes.DataSourceType, 
                    frmMain.DataFieldMappingTypes.Source), parentSelectedId);
                PopulateComboBox(cboDestinationDataField, new CboInfo(frmMain.NodeTypes.DataField, frmMain.DataFieldMappingTypes.Destination));
                PopulateComboBox(cboDestinationDataSet, new CboInfo(frmMain.NodeTypes.DataSet, frmMain.DataFieldMappingTypes.Destination));
                PopulateComboBox(cboDestinationDataSource, new CboInfo(frmMain.NodeTypes.DataSource, frmMain.DataFieldMappingTypes.Destination));
                PopulateComboBox(cboDestinationDataSourceType, new CboInfo(frmMain.NodeTypes.DataSourceType, frmMain.DataFieldMappingTypes.Destination));
            } else
            {
                parentSelectedId = PopulateComboBox(cboDestinationDataField, new CboInfo(ni.NodeType, frmMain.DataFieldMappingTypes.Destination), ni.Id);
                parentSelectedId = PopulateComboBox(cboDestinationDataSet, new CboInfo(frmMain.NodeTypes.DataSet, 
                    frmMain.DataFieldMappingTypes.Destination), parentSelectedId);
                parentSelectedId = PopulateComboBox(cboDestinationDataSource, new CboInfo(frmMain.NodeTypes.DataSource, 
                    frmMain.DataFieldMappingTypes.Destination), parentSelectedId);
                parentSelectedId = PopulateComboBox(cboDestinationDataSourceType, new CboInfo(frmMain.NodeTypes.DataSourceType, 
                    frmMain.DataFieldMappingTypes.Destination), parentSelectedId);
                PopulateComboBox(cboSourceDataField, new CboInfo(frmMain.NodeTypes.DataField, frmMain.DataFieldMappingTypes.Source));
                PopulateComboBox(cboSourceDataSet, new CboInfo(frmMain.NodeTypes.DataSet, frmMain.DataFieldMappingTypes.Source));
                PopulateComboBox(cboSourceDataSource, new CboInfo(frmMain.NodeTypes.DataSource, frmMain.DataFieldMappingTypes.Source));
                PopulateComboBox(cboSourceDataSourceType, new CboInfo(frmMain.NodeTypes.DataSourceType, frmMain.DataFieldMappingTypes.Source));
            }
        }
        private int PopulateComboBox(ComboBox cbo, CboInfo info, int selectedId = 0)
        {
            int parentSelectedId = 0;
            if(selectedId > 0)
            {
                DataRow[] rows = frm.ds.Tables[info.NodeType.ToString()].Select(frmMain.GetIdField(info.NodeType) + " = " + selectedId.ToString());
                parentSelectedId = (int)rows[0][frmMain.GetIdField(frmMain.GetParentNodeType(info.NodeType))];
            }
            cbo.DataSource = new DataView(frm.ds.Tables[info.NodeType.ToString()]);
            cbo.ValueMember = frmMain.GetIdField(info.NodeType);
            cbo.DisplayMember = frmMain.GetNameField(info.NodeType);
            cbo.BindingContext = this.BindingContext;
            cbo.Tag = info;
            if(selectedId > 0)
            {
                cbo.Enabled = false;
                cbo.SelectedValue = selectedId;
            }
            return parentSelectedId;
        }
 
    