Introduction
When I create a project for using a DataGrid with a ComboBox, I hope to get a resizable ComboBox to set its height as the height of the DataGrid cell. This is my attempt to create a resizable ComboBox ActiveX, now I can change its Height. Some programmers use a Form, ListBox, TextBox and a Button to create a ComboBox, but I am using a Panel, ComboBox, TextBox and a Button to create my ActiveX. Using a Panel to hide the upper part of the ComboBox and using this Panel as the container for the TextBox and Button.
About the Project of my ActiveX:
- Name of the Project is: MKCombo
- Name of UserControl is: KCombo
- Name of Panel is: ComboHide
- Name of ComboBox is: ComboCtrl
- Name of TextBox is: ComboText
- Name of Button is: ComboButton
After you expand the files: ComboC.zip, you can open "SizableCombo" solution to read the code of my ActiveX in the "MKCombo" project and read the code to test the ActiveX in the "SizableCombo" project.
I try to use "DataSource" to bind my ActiveX with data but I can't, so then I use another idea.
My ActiveX has:
- Event: cmbSelectedChanged for SelectedIndexChanged event.
- Property: cmbBorderStyle for BorderStyle property.
- Property: cmbSelectedIndex for SelectedIndex property.
- Property: cmbSelectedItem for SelectedItem property.
- Property: cmbText for Text property.
- Property: cmbItemsCount for Items.Count property.
- Method: cmbAddItem for Items.Add method.
- Method: cmbClear for Items.Clear method.
About the Code
Code to bind the ActiveX with data:
{
if (cmbCnn.State == ConnectionState.Open)
cmbCnn.Close();
cmbCnn.Open();
OleDbCommand cmdReader = new OleDbCommand(cmbSql, cmbCnn);
OleDbDataReader datRdr = cmdReader.ExecuteReader();
ComboCtrl.Items.Clear();
while (datRdr.Read())
{
ComboCtrl.Items.Add(datRdr[cmbField]);
}
ComboCtrl.SelectedIndex = 0;
}
Remark
When the test project is executed, please resize any row to see how the ComboBox changes its height.
I hope this article is useful. If you have any idea, please tell me.