当选择项目时,我尝试从组合框中的图像列表中绘制图像。
我能够绘制图像,但是当DrawMode.OwnerDrawFixed
事件结束时,我丢失了图像。
我的组合框已经有ListImage
我有一个名为ImageList的 protected override void OnSelectedIndexChanged(EventArgs e)
{
base.OnSelectedIndexChanged(e);
if (this.SelectedIndex > -1)
{
var g = this.CreateGraphics();
this.ImageList.Draw(g, 0, 0, 1);
}
}
控件,包含10张图片。
对于我的简短示例,我只需要在我的组合框中绘制我的ImageList位置1的图像,这就是为什么我得到这个.ImageList.Draw(g,0,0, 1 );
{{1}}
可能我不赞成正确的事件。有什么建议吗?
在Draw之后的IndexChanged中看到带有断点的图片。这是工作,但我在活动结束后失去了我的形象。
答案 0 :(得分:3)
将ComboBox
DrawMode
更改为OwnerDrawVariable
使用DrawItem
事件从ComboBox项目Bounds中的源(图像列表,在本例中)中绘制图像。
如果ComboBox DropDownStyle
设置为DropDownList
,则图片将显示在选择框中;如果设置为DropDown
,则仅绘制文本。
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index > -1)
{
e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
using (Brush backgbrush = new SolidBrush(comboBox1.BackColor))
e.Graphics.FillRectangle(backgbrush, e.Bounds);
using (Brush textbrush = new SolidBrush(comboBox1.ForeColor))
e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(),
e.Font, textbrush, e.Bounds.Height + 10, e.Bounds.Y,
StringFormat.GenericTypographic);
e.Graphics.DrawImage(this.imageList1.Images[e.Index],
new Rectangle(e.Bounds.Location,
new Size(e.Bounds.Height - 2, e.Bounds.Height - 2)));
e.DrawFocusRectangle();
}
}
此处的幻数(10, -2
)只是偏移:
e.Bounds.Height + 10 =>
图片右侧10个像素
e.Bounds.Height -2 =>
比item.Bounds.Height
小2个像素。