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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目要求是在c#中的combobox控件的下拉列表中添加图片。我有代码,可是有错误,图片添加部分不相关的知识,希望对你有一定的参考价值。

题目要求是在c#中的combobox控件的下拉列表中添加图片。我有代码,可是有错误,图片添加部分不会更改。求大神指导。回答详细帮我解决的。还可以加金币。说到做到。我自有办法。

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(这里是图片,这里是文本)
其中文本可以为空
这是我自己写的、如果觉得外观不好看什么的可以自己修改上面的代码追问

非常感谢您给写的代码,但是我们要求了代码,没办法更改成这个,而且我也试了。有一个错误。

这是我们给定的代码和我出现的错误。

追答

图片中是你们给定的代码? 报错是说没有名字为PicturesInComboBox的工程。

追问

昂。对对对。

就是这样。

这就是运行结果。

可是我解决不了出现的错误。

追答

要不你把你的工程打包发给我(yj9525@163.com)我帮你看看、不然这样我也不知道错在哪里、

参考技术A 直接在后台combobox的item的项定义时指向图片路径追问

发错了

怎么破?

追答

cboxPictures.Items.Add(图片路径);

追问

尝试了。应用不了啊。哭

参考技术B 用imagelist不可以吗追问

初学。不会弄啊。我有代码,做好的部分程序能发给你帮忙修改么?

追答

有时候不只是有代码就行了,还得调节控件属性和添加控件事件,都在控件属性里面可以设置

追问

我有最后的结果图,有代码,但是无法还原过程。程序无法执行,所以……我也不知道要怎么解释了

追答

是不是没有添加事件啊

你是用drawitem么

追问

明天开电脑给你发下截图吧,这样说我好像给你解释不清楚呢。我只用了bottom和combobox还有就是imagelist

追答

好的

追问

好。谢谢。

追答

imagelist添加图片不用代码,在右下角属性就可以添加了

追问

可是错误提示里的picturesincombobox 提示没有,是怎么回事?

这应该是最后的运行结果

追答

Picturecombobox哪里定义的啊

追问

我想问这个呢。你能帮我做下么?

追答

你找的代码不对

这两个代码主要内容是一样的你放一起看看就做出来了

追问

代码是老师给的。只有结果,让我做出过程,能实现最后的运行。而且代码中间也不只有图片的插入,还有字体的设置什么的。

运行有错误。

能不能帮忙给做?加财富值……

追答

有的属性是得自己加的

你是不是没有加事件啊

你是不是没有加事件啊

点击combobox然后右边有属性,有一个闪电的图标,单击它,然后找到DrawItem,双击它后面的空白,系统就自动生成了drawitem的事件函数,然后把代码里的函数复制下就OK了

这个东西得写在你电脑里才行,只有代码是没用的

追问

试过了。运行错误,没办法执行。

追答

什么错误

追问

执行以后根本不显示图片。

追答

我运行了,没错误啊

你添加图片到imagelist里了吗

追问

能不能给做啊!我要疯了!!!成功了财富值加200!!!我都试过了!!根本不行啊!!!

追答

你怎么不明白呢,我写好代码给你你也用不了,因为有些东西需要在visual studio里面设置

追问

我已经成功了。有人帮忙了。如果你不怕麻烦,我可以另外瞎写一个问题,你回答,采纳给你50财富值。

追答

不用了,问题解决了就好

追问

好。谢谢善良的你。

C# winform 下拉列表控件(comboBox)

窗体上有两个comboBox 控件 ,comboBox1的选项值改变时,comboBox2的选项值跟着改变
新人入门 求解……谢谢各位大虾们

在comboBox1的selectedindex_changed事件里面加入类似如下代码:
comboBox2.Text="123".这样当你选择ComboBox1的值的时候ComboBox2的text会跟着改变,如果你想改变ComboBox里面的元素的话就这么写:comboBox2.Items.clear();comboBox2.Items.Add(newone);类似这样就可以了
参考技术A comboBox1增加textchange之类的事件,在事件里 把comboBox1的值赋给comboBox2就可以了追问

如果comboBox1 选择的下标为 0 ,comboBox2 就选择 0
comboBox1 选择 1,comboBox2 就选择1
两个comboBox 里面的值是固定的 根据comboBox1的下标 来确定comboBox2 的下标
怎么写?

追答

comboBox1 .SelectedIndexChange += new Evernt...(myWork)//自动生成一个事件处理函数myWork()里,comboBox2 .SelectIndex = ComBox1.SelectedIndex

参考技术B 在comboBox1的selectedindex_changed事件里面加入类似如下代码:
ComboBox2.Selectedindex=comboBox1.Selectedindex;
这样写的话,必须保证两个列表的项一致,否则会报错的。

以上是关于题目要求是在c#中的combobox控件的下拉列表中添加图片。我有代码,可是有错误,图片添加部分不的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 下拉列表控件(comboBox)

C# Winform ComboBox列表里加入CheckBox

C# combobox 模糊搜索。

c#中怎么把combobox控件的一部分选项改为不可选?

C#使用 ComboBox 控件

C#中有种下拉框(combobox),还有中控件,我是在网上下的下拉框(comboboxEdit),我没找到他的下拉属性