如何在自定义控件中使用已经P好的图片? 重写PaintBackground,设置背景图 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在paint里修改的背景图,不过vs会死变的特别慢,或者干脆就不显示,直接在本应该显示控件的地方是一块空白。你做过这块木有,诚心求教 要不是你的图片太大,要不是你的代码有问题啊。一般图片,使用背景设置,或者onparint里画图,都没问题啊。 自定义ComboBox控件下拉框嵌入图片示例 private void beautyComboBox_DrawItem(object sender,DrawItemEventArgs e) { Graphics gComboBox = e.Graphics;//声明一个GDI+绘图图面类的对象 Rectangle rComboBox = e.Bounds;//声明一个表示矩形的位置和大小类的对象 Size imageSize = imageList1.ImageSize;//声明一个有序整数对的对象 FontDialog typeFace = new FontDialog();//定义一个字体类对象 Font Style = typeFace.Font;//定义一个定义特定的文本格式类对象 if(e.Index >= 0)//当绘制的索引项存在时 { string temp = (string)beautyComboBox.Items[e.Index];//获取ComboBox控件索引项下的文本内容 StringFormat stringFormat = new StringFormat();//定义一个封装文本布局信息类的对象 stringFormat.Alignment = StringAlignment.Near;//设定文本的布局方式 if(e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))//当绘制项没有键盘加速键和焦点可视化提示时 { e.Graphics.FillRectangle(new SolidBrush(Color.Red),rComboBox);//用指定的颜色填充自定义矩形的内部 imageList1.Draw(e.Graphics,rComboBox.Left,rComboBox.Top,e.Index);//在指定位置绘制指定索引的图片 e.Graphics.DrawString(temp,Style,new SolidBrush(Color.Black),rComboBox.Left + imageSize.Width,rComboBox.Top);//在指定的位置并且用指定的Font对象绘制指定的文本字符串 e.DrawFocusRectangle();//在指定的边界范围内绘制聚焦框 }//codego.net/tags/15/1/ else //当绘制项有键盘加速键或者焦点可视化提示时 { e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue),rComboBox);//用指定的颜色填充自定义矩形的内部 imageList1.Draw(e.Graphics,rComboBox.Left,rComboBox.Top,e.Index);//在指定位置绘制指定索引的图片 e.Graphics.DrawString(temp,Style,new SolidBrush(Color.Black),rComboBox.Left + imageSize.Width,rComboBox.Top);//在指定的位置并且用指定的Font对象绘制指定的文本字符串 e.DrawFocusRectangle();//在指定的边界范围内绘制聚焦框 } } } 自定义控件继承自Control??使用BackGround属性 + BackgroundImageLayout = Stretch可以吧。自定义控件继承自PictureBox??使用Image属性 + SizeMode = Stretch可以吧。elseOnPaintBackground里面使用e.Graphics.DrawImage可以吧??图片应该不会大到把内存撑崩了,我怀疑是不是图片的分辨率太大,超出你控件的范围。你试试在绘图的时候对图片先进行最适缩放。还有其他Idea? 页面错位问题. 跪求:谁能帮我把单房间的聊天室改成多房间的 如何搜索网络上的资源呢 郁闷!! 如何实现下载一个文件夹下的几个文件? 那位大虾用过mysql,请进来指点指点! ration xde 2002 for .net安装失败怎么解决? 如何实现把DataSet中的两个表生成一个DataView C#怎末把unicode码转换成字符? 如何判断哪一个是软驱,哪一个是光驱呢???? 关于.net控制台连接oracle遇到的问题 用vs向导生成的dataset,能否设置全局默认值?
一般图片,使用背景设置,或者onparint里画图,都没问题啊。
private void beautyComboBox_DrawItem(object sender,DrawItemEventArgs e)
{
Graphics gComboBox = e.Graphics;//声明一个GDI+绘图图面类的对象
Rectangle rComboBox = e.Bounds;//声明一个表示矩形的位置和大小类的对象
Size imageSize = imageList1.ImageSize;//声明一个有序整数对的对象
FontDialog typeFace = new FontDialog();//定义一个字体类对象
Font Style = typeFace.Font;//定义一个定义特定的文本格式类对象
if(e.Index >= 0)//当绘制的索引项存在时
{
string temp = (string)beautyComboBox.Items[e.Index];//获取ComboBox控件索引项下的文本内容
StringFormat stringFormat = new StringFormat();//定义一个封装文本布局信息类的对象
stringFormat.Alignment = StringAlignment.Near;//设定文本的布局方式
if(e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))//当绘制项没有键盘加速键和焦点可视化提示时
{
e.Graphics.FillRectangle(new SolidBrush(Color.Red),rComboBox);//用指定的颜色填充自定义矩形的内部
imageList1.Draw(e.Graphics,rComboBox.Left,rComboBox.Top,e.Index);//在指定位置绘制指定索引的图片
e.Graphics.DrawString(temp,Style,new SolidBrush(Color.Black),rComboBox.Left + imageSize.Width,rComboBox.Top);//在指定的位置并且用指定的Font对象绘制指定的文本字符串
e.DrawFocusRectangle();//在指定的边界范围内绘制聚焦框
}//codego.net/tags/15/1/
else //当绘制项有键盘加速键或者焦点可视化提示时
{
e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue),rComboBox);//用指定的颜色填充自定义矩形的内部
imageList1.Draw(e.Graphics,rComboBox.Left,rComboBox.Top,e.Index);//在指定位置绘制指定索引的图片
e.Graphics.DrawString(temp,Style,new SolidBrush(Color.Black),rComboBox.Left + imageSize.Width,rComboBox.Top);//在指定的位置并且用指定的Font对象绘制指定的文本字符串
e.DrawFocusRectangle();//在指定的边界范围内绘制聚焦框
}
}
}
自定义控件继承自PictureBox??使用Image属性 + SizeMode = Stretch可以吧。
else
OnPaintBackground里面使用e.Graphics.DrawImage可以吧??图片应该不会大到把内存撑崩了,我怀疑是不是图片的分辨率太大,超出你控件的范围。你试试在绘图的时候对图片先进行最适缩放。还有其他Idea?