C#中,偶给ComboBox在Load事件中绑定了数据集,然后借助DrawItem和MeasureItem更改了ComboBox的ItemHeight,这个高度成功更改了,可是窗体中ComboxBox不能正常显示文本,请教各位高手该如何解决。
附: private void FormStuAdd_Load(object sender, EventArgs e)
{
//绑定专业信息
#region;
Db myDb = new Db();
SqlConnection myDbConnection = myDb.DbOpen();
string sqlStr = "select id,name from [xj_zhuanye]";
SqlDataAdapter adp = new SqlDataAdapter(sqlStr,myDbConnection);
DataSet ds = new DataSet();
adp.Fill(ds);
cbZhuanYe.DataSource = ds.Tables[0].DefaultView;
cbZhuanYe.DisplayMember = "name";
cbZhuanYe.ValueMember = "id";
myDb.DbClose(myDbConnection);
#endregion;
}private void cbZhuanYe_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
StringFormat strFmt = new System.Drawing.StringFormat();
strFmt.Alignment = StringAlignment.Center; //文本垂直居中
//strFmt.LineAlignment = StringAlignment.Center; //文本水平居中
e.Graphics.DrawString(cbZhuanYe.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, strFmt);
e.DrawFocusRectangle();
} private void cbZhuanYe_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = 22;
}
附: private void FormStuAdd_Load(object sender, EventArgs e)
{
//绑定专业信息
#region;
Db myDb = new Db();
SqlConnection myDbConnection = myDb.DbOpen();
string sqlStr = "select id,name from [xj_zhuanye]";
SqlDataAdapter adp = new SqlDataAdapter(sqlStr,myDbConnection);
DataSet ds = new DataSet();
adp.Fill(ds);
cbZhuanYe.DataSource = ds.Tables[0].DefaultView;
cbZhuanYe.DisplayMember = "name";
cbZhuanYe.ValueMember = "id";
myDb.DbClose(myDbConnection);
#endregion;
}private void cbZhuanYe_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
StringFormat strFmt = new System.Drawing.StringFormat();
strFmt.Alignment = StringAlignment.Center; //文本垂直居中
//strFmt.LineAlignment = StringAlignment.Center; //文本水平居中
e.Graphics.DrawString(cbZhuanYe.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, strFmt);
e.DrawFocusRectangle();
} private void cbZhuanYe_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = 22;
}
private string[] animals; // This method initializes the owner-drawn combo box.
// The drop-down width is set much wider than the size of the combo box
// to accomodate the large items in the list. The drop-down style is set to
// ComboBox.DropDown, which requires the user to click on the arrow to
// see the list.
private void InitializeComboBox()
{
this.ComboBox1 = new ComboBox();
this.ComboBox1.DrawMode =
System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.ComboBox1.Location = new System.Drawing.Point(10, 20);
this.ComboBox1.Name = "ComboBox1";
this.ComboBox1.Size = new System.Drawing.Size(100, 120);
this.ComboBox1.DropDownWidth = 250;
this.ComboBox1.TabIndex = 0;
this.ComboBox1.DropDownStyle = ComboBoxStyle.DropDown;
animals = new string[]{"Elephant", "c r o c o d i l e", "lion"};
ComboBox1.DataSource = animals;
this.Controls.Add(this.ComboBox1); // Hook up the MeasureItem and DrawItem events
this.ComboBox1.DrawItem +=
new DrawItemEventHandler(ComboBox1_DrawItem);
this.ComboBox1.MeasureItem +=
new MeasureItemEventHandler(ComboBox1_MeasureItem);
} // If you set the Draw property to DrawMode.OwnerDrawVariable,
// you must handle the MeasureItem event. This event handler
// will set the height and width of each item before it is drawn.
private void ComboBox1_MeasureItem(object sender,
System.Windows.Forms.MeasureItemEventArgs e)
{ switch(e.Index)
{
case 0:
e.ItemHeight = 45;
break;
case 1:
e.ItemHeight = 20;
break;
case 2:
e.ItemHeight = 35;
break;
}
e.ItemWidth = 260; } // You must handle the DrawItem event for owner-drawn combo boxes.
// This event handler changes the color, size and font of an
// item based on its position in the array.
private void ComboBox1_DrawItem(object sender,
System.Windows.Forms.DrawItemEventArgs e)
{ float size = 0;
System.Drawing.Font myFont;
FontFamily family = null; System.Drawing.Color animalColor = new System.Drawing.Color();
switch(e.Index)
{
case 0:
size = 30;
animalColor = System.Drawing.Color.Gray;
family = FontFamily.GenericSansSerif;
break;
case 1:
size = 10;
animalColor = System.Drawing.Color.LawnGreen;
family = FontFamily.GenericMonospace;
break;
case 2:
size = 15;
animalColor = System.Drawing.Color.Tan;
family = FontFamily.GenericSansSerif;
break;
} // Draw the background of the item.
e.DrawBackground(); // Create a square filled with the animals color. Vary the size
// of the rectangle based on the length of the animals name.
Rectangle rectangle = new Rectangle(2, e.Bounds.Top+2,
e.Bounds.Height, e.Bounds.Height-4);
e.Graphics.FillRectangle(new SolidBrush(animalColor), rectangle); // Draw each string in the array, using a different size, color,
// and font for each item.
myFont = new Font(family, size, FontStyle.Bold);
e.Graphics.DrawString(animals[e.Index], myFont, System.Drawing.Brushes.Black, new RectangleF(e.Bounds.X+rectangle.Width, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)); // Draw the focus rectangle if the mouse hovers over an item.
e.DrawFocusRectangle();
}看例题
e.Graphics.DrawString(cbZhuanYe.Items[e.Index].ToString(), myFont, new SolidBrush(e.ForeColor), e.Bounds, strFmt); // Draw each string in the array, using a different size, color,
// and font for each item.
myFont = new Font(family, size, FontStyle.Bold);
e.Graphics.DrawString(animals[e.Index], myFont, System.Drawing.Brushes.Black, new RectangleF(e.Bounds.X+rectangle.Width, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
谁你怎么说