找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证

超级版主

299

主题

7874

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13131

活字格认证圣诞拼拼乐微信认证勋章讲师达人元老葡萄悬赏达人

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-10-31 19:59  /   查看:5811  /  回复:0
Spread for WinForms 控件中提供了多种图形化单元格类型,比如:可以通过 ButtonCellType 在单元格中显示按钮,通过 ColorPickerCellType 在单元格中显示颜色对话框。

Spread 中 提供了 ComboBoxCellType 来显示这文本框控件,这文本框由一个可编辑的文本框和一个下拉列表组成。用户可以在文本框中直接输入值,也可以通过下拉列表选择一个值。

下面列出三种不同的属性来决定 ComboBoxCellType 下拉列表的显示方式:
1、Items:Items属性是一个字符串类型的数组,用户在下拉列表中看到的选项就是Items中的值
2、ItemData:通过该属性可以设置选项的值,该值不显示在下拉列表中
3、ImageList:该属性可以让您设置一个图像列表

通过以上属性,您可以显示图像/图标和文本在下拉列表中,不过在单元格中却不能同时显示图像/图标和文本的内容,下面我们就来看一看如何在单元格中同时显示图像/图标和文本内容。

为了实现以上功能,我们需要从ComboBoxCellType继承一个自定义的单元格类型,并且重写 PaintCell方法来实现同时显示图像和文本内容,代码如下:
  1.     public class ImageCombo : FarPoint.Win.Spread.CellType.ComboBoxCellType
  2.     {
  3.        public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  4.         {
  5.             if (value != null)
  6.             {
  7.                 int ind =0;
  8.                 for (int i = 0; i < base.Items.Length; i++)
  9.                 {
  10.                     if (base.Items[i] == value.ToString())
  11.                     {
  12.                         ind = i;
  13.                         break;
  14.                     }
  15.                 }
  16.                 Image img = base.ImageList.Images[ind];
  17.                 g.DrawImage(img, new Rectangle(new Point(r.X, r.Y), new Size(20, 20)));
  18.                 g.DrawString(value.ToString(), appearance.Font, new SolidBrush(Color.Black), new PointF(r.X + 20, r.Y-10 + 10));
  19.                 ControlPaint.DrawComboButton(g, new Rectangle(r.Right - 17, r.Y, 17, r.Height), ButtonState.Normal);               
  20.             }
  21.             else
  22.             {
  23.                 base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  24.             }
  25.         }      
  26.     }
复制代码


需要注意的是,当用户进行选择操作时,单元格只会显示文本内容,当单元格离开编辑模式时就会同时显示图像和文本内容

运行结果:
43.png

源码下载:VS2010 + Spread .NET 6.0
ImagesInCombo.zip (1.88 MB, 下载次数: 711)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部