题目要求是在c#中的combobox控件的下拉列表中添加图片。我有代码,可是有错误,图片添加部分不

题目要求是在c#中的combobox控件的下拉列表中添加图片。我有代码,可是有错误,图片添加部分不会更改。求大神指导。回答详细帮我解决的。还可以加金币。说到做到。我自有办... 题目要求是在c#中的combobox控件的下拉列表中添加图片。我有代码,可是有错误,图片添加部分不会更改。求大神指导。回答详细帮我解决的。还可以加金币。说到做到。我自有办法。 展开
 我来答
白衣飘飘的年华
2015-07-04 · TA获得超过193个赞
知道小有建树答主
回答量:138
采纳率:100%
帮助的人:126万
展开全部
class PicComboBox : System.Windows.Forms.ComboBox
{
public PicComboBox()
{
//默认值设置
DrawMode = DrawMode.OwnerDrawFixed;
DropDownStyle = ComboBoxStyle.DropDownList;
ItemHeight = 50;
Width = 200;
}

protected override void OnDrawItem(DrawItemEventArgs e)
{
if (Items.Count == 0 || e.Index == -1) return;
if ((e.State & DrawItemState.Selected) != 0)
{
//选中项背景
LinearGradientBrush brush = new LinearGradientBrush(e.Bounds, Color.FromArgb(255, 251, 237), Color.FromArgb(255, 236, 181), LinearGradientMode.Vertical);
//LinearGradientBrush brush = new LinearGradientBrush(e.Bounds, Color.Red , Color.Blue , LinearGradientMode.Vertical);
Rectangle borderRect = new Rectangle(0, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.FillRectangle(brush, borderRect);

Pen pen = new Pen(Color.FromArgb(229, 195, 101));
e.Graphics.DrawRectangle(pen, borderRect);
}
else
{
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 255));
e.Graphics.FillRectangle(brush, e.Bounds);
}
//绘制图片
PicItem item = (PicItem)Items[e.Index];
Image img = item.Image;
double newwidth = Convert.ToDouble(ItemHeight - 3) * img.Width / img.Height;//保持图片高宽比不变,并先满足高度
Rectangle imgRect = new Rectangle(2, e.Bounds.Y + 2, Convert.ToInt16(newwidth), e.Bounds.Height - 3);
e.Graphics.DrawImage(img, imgRect);
//绘制文本
Rectangle textRect = new Rectangle(imgRect.Right + 2, imgRect.Y, e.Bounds.Width - imgRect.Width, e.Bounds.Height - 3);
String itemText = Items[e.Index].ToString();
StringFormat strFormat = new StringFormat();
strFormat.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(itemText, Font, new SolidBrush(ForeColor), textRect, strFormat);
base.OnDrawItem(e);
}

/// <summary>
/// 内部类,用于添加图片文本项
/// </summary>

public class PicItem
{
public PicItem(Image img, string text)
{
Text = text;
Image = img;
}

public string Text { get; set; }
public Image Image { get; set; }

public override string ToString()
{
return Text;
}
}
}
这是一个完整的可以添加图片的combox类,用法:
PicComboBox PCB = new PicComboBox();
PCB.Items.Add(new PicComboBox .PicItem(这里是图片,这里是文本)
其中文本可以为空
这是我自己写的、如果觉得外观不好看什么的可以自己修改上面的代码
更多追问追答
追问
非常感谢您给写的代码,但是我们要求了代码,没办法更改成这个,而且我也试了。有一个错误。

星空下的man
2015-07-04 · 超过32用户采纳过TA的回答
知道答主
回答量:167
采纳率:50%
帮助的人:40.1万
展开全部
直接在后台combobox的item的项定义时指向图片路径
更多追问追答
追问

发错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大概撒格沙弗
2015-07-03 · 超过20用户采纳过TA的回答
知道答主
回答量:176
采纳率:0%
帮助的人:50.9万
展开全部
用imagelist不可以吗
更多追问追答
追问
初学。不会弄啊。我有代码,做好的部分程序能发给你帮忙修改么?
追答
有时候不只是有代码就行了,还得调节控件属性和添加控件事件,都在控件属性里面可以设置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式