Introduction
When I create a project for using a DataGrid
with ComboBox
, I hope to get a resizable ComboBox
to set its Height
as the Height
of DataGrid
cell. This is my trial to create a resizable ComboBox
ActiveX, now I can change its Height
. Some programmers use Form
, ListBox
, TextBox
and Butt
on to create ComboBox
, but I am using Panel
, ComboBox
, TextBox
and Button
to create my ActiveX.
Background
I am using Panel
to hide the upper part of ComboBox
and using this Panel
as container for 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: Combo_C#.zip and Combo_VB.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, 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.
Using the Code
C# code to bind the ActiveX with data:
public void cmbBindData(string cmbSql, OleDbConnection cmbCnn, string cmbField)
{
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;
}
VB code to bind the ActiveX with data:
Public Sub cmbBindData(ByVal cmbSql As String, _
ByVal cmbCnn As OleDbConnection, ByVal cmbField As String)
If (cmbCnn.State = ConnectionState.Open) Then cmbCnn.Close()
cmbCnn.Open()
Dim cmdReader As OleDbCommand = New OleDbCommand(cmbSql, cmbCnn)
Dim datRdr As OleDbDataReader = cmdReader.ExecuteReader()
ComboCtrl.Items.Clear()
While (datRdr.Read())
ComboCtrl.Items.Add(datRdr(cmbField))
End While
ComboCtrl.SelectedIndex = 0
End Sub
Remark
When executing the test project, please resize any row to see how the ComboBox
changes its Height
.
Final Words
I hope this article is useful. If you have any ideas, please tell me. Thanks to CodeProject and thanks to all.
Mostafa Kaisoun
m_kaisoun@hotmail.com
History
- 21st February, 2011: Initial version