簡體   English   中英

在C#Windows窗體中為動態創建的組合框調用SelectedIndexChanged事件

[英]Calling SelectedIndexChanged Event for a dynamically created combobox in C# Windows Forms

我已經在C#中創建了一個Windows窗體。 我正在生成2個動態組合框,即MajorComboHead和SubComboHead。 我所做的是在創建控件時加載了MajorComboHead。 最終,我在MajorComboHead SelectedIndexChanged事件(在動態控件創建時動態創建的事件處理程序)上加載了SubComboHead。

SelectedIndexChanged事件可以正常工作,並且兩個下拉列表都可以正常加載,但是問題是SubComboHead在MajorComboHead更改事件上而不是在加載項目。 在窗體加載時或在創建動態控件時,無法調用MajorComboHead_SelectedIndexChanged事件。

請幫助我。 以下是MajorComboHead_SelectedIndexChanged事件和動態控件創建函數的代碼:-

public void dynamicControls()
 {
.......................All about declaring and creating dynamic controls..................


        con2.Open();
        SqlDataAdapter adp1 = new SqlDataAdapter("select distinct * from MajorHead where(projectCode='" + projectId + "' AND (headName!='" + "Cash" + "' AND headName!='"+"Bank"+"'))", con2);
        DataSet ds1 = new DataSet();
        adp1.Fill(ds1, "MajorHead");
        MajorCombohead.DataSource = ds1.Tables["MajorHead"];
        MajorCombohead.DisplayMember = "headName";
        MajorCombohead.ValueMember = "headCode";
        con2.Close();

        MajorCombohead.SelectedIndexChanged += new EventHandler(MajorCombohead_SelectedIndexChanged);
}


public void MajorCombohead_SelectedIndexChanged(object sender, EventArgs e)
    {            
        ComboBox clicksave = sender as ComboBox;
        string savename = clicksave.Name;



        foreach (Control f1 in panel1.Controls)
        {
            if (f1.GetType() == typeof(ComboBox) && f1.Name == ("Maj" + savename))
            {                                      

                //.....................loading sub head........................
                foreach (Control f2 in panel1.Controls)
                {
                    if (f2.GetType() == typeof(ComboBox) && f2.Name == ("Sub" + savename))
                    {
                        con1.Open();
                        SqlDataAdapter adp2 = new SqlDataAdapter("select distinct * from SubHead where(majorHeadName='" + f1.Text + "' AND projectCode='" + projectId + "')", con1);
                        DataSet ds2 = new DataSet();
                        adp2.Fill(ds2, "SubHead");
                        int countMeNow = ds2.Tables[0].Rows.Count;
                        ((ComboBox)f2).DataSource = ds2.Tables["SubHead"];
                        ((ComboBox)f2).DisplayMember = "headName";
                        ((ComboBox)f2).ValueMember = "headCode";                           
                        con1.Close();
                    }
                }
                //.....................loading sub head........................


            }
        }


    }

地點

MajorCombohead.SelectedIndexChanged += new EventHandler(MajorCombohead_SelectedIndexChanged);

在加載MajorCombohead之前(聲明變量,添加事件偵聽器,然后將其放在表單上)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM