FpSpread中实现颜色选择ComboBox的方法

来源:互联网 发布:mac canada 编辑:程序博客网 时间:2024/05/21 10:14

一,FpSpread中实现选择颜色的方法很多中,正好拿来练练手,选了一种最麻烦的。其实可以利用FpSpread中本身提供的方法完全可以实现。

 

/// <summary>
/// 选择颜色的ComboBox
/// </summary>
public partial class ComboBoxCellTypeForColor : FarPoint.Win.Spread.CellType.ComboBoxCellType
{
    private ComboBox _cmb = new ComboBox();
    private object[] m_strItems;

    /// <summary>
    ///
    /// </summary>
    public ComboBoxCellTypeForColor()
        : base()
    {
        _cmb.DrawMode = DrawMode.OwnerDrawFixed;
        _cmb.DropDownStyle = ComboBoxStyle.DropDownList;
        _cmb.DrawItem += new DrawItemEventHandler(combo_DrawItem);
    }

    /// <summary>
    /// ComboBox取得
    /// </summary>
    public ComboBox ComboBox
    {
        get { return _cmb; }
    }

    /// <summary>
    /// Item取得和設定
    /// </summary>
    public object[] Items
    {
        get
        {
            return m_strItems;
        }
        set
        {
            m_strItems = value;
            _cmb.Items.AddRange(m_strItems);
        }
    }

    /// <summary>
    /// 编辑中的Control取得
    /// </summary>
    /// <param name="appearance"></param>
    /// <param name="zoomFactor"></param>
    /// <returns></returns>
    public override Control GetEditorControl(FarPoint.Win.Spread.Appearance appearance, float zoomFactor)
    {
        return _cmb;
    }
    /// <summary>
    /// 编辑控件的値取得
    /// </summary>
    /// <returns></returns>
    public override object GetEditorValue()
    {
        return _cmb.SelectedItem == null ? "" : ColorTranslator.ToHtml((Color)_cmb.SelectedItem).Trim('#');
    }
    /// <summary>
    /// 编辑控件的值设定
    /// </summary>
    /// <param name="value"></param>
    public override void SetEditorValue(object value)
    {
        _cmb.SelectedItem = value;
    }
    /// <summary>
    /// Cell编辑开始
    /// </summary>
    /// <param name="e"></param>
    /// <param name="selectAll"></param>
    /// <param name="autoClipboard"></param>
    public override void StartEditing(EventArgs e, bool selectAll, bool autoClipboard)
    {
        base.StartEditing(e, selectAll, autoClipboard);
    }
    /// <summary>
    /// Cell编辑结束
    /// </summary>
    /// <returns></returns>
    public override bool StopEditing()
    {
        return base.StopEditing();
    }
    /// <summary>
    /// 非编辑中的Cell描画
    /// </summary>
    /// <param name="g"></param>
    /// <param name="r"></param>
    /// <param name="appearance"></param>
    /// <param name="value"></param>
    /// <param name="isSelected"></param>
    /// <param name="isLocked"></param>
    /// <param name="zoomFactor"></param>
    public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
    {
        base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);

        System.Drawing.RectangleF RectBack = new RectangleF(r.Left + 1, r.Top + 1, r.Width - 19, r.Height - 2);
        SolidBrush BackBrush;

        if (_cmb.SelectedIndex == -1)
        {
            BackBrush = new SolidBrush(Color.White);
        }
        else
        {
            BackBrush = new SolidBrush((Color)_cmb.Items[_cmb.SelectedIndex]);
        }
        g.FillRectangle(BackBrush, RectBack);
    }

    /// <summary>
    /// 颜色选择变更是发生事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void combo_DrawItem(object sender, DrawItemEventArgs e)
    {
        if (e.Index < 0) return;

        System.Drawing.Rectangle rect = e.Bounds;

        SolidBrush bSolidBrush = new SolidBrush((Color)_cmb.Items[e.Index]);

        e.Graphics.FillRectangle(bSolidBrush, rect);

    }

}

 

二,具体使用

/// <summary>
/// 色
/// </summary>
private readonly object[] DrawColorArrary = {
    Color.FromArgb(0,0,0),          //Black(RGB[0,0,0])
    Color.FromArgb(255,0,0),        //Red(RGB[255,0,0])
    Color.FromArgb(0,0,255),        //Blue(RGB[0,0, 255])
    Color.FromArgb(0,128,0),        //Green(RGB[0,128,0])
    Color.FromArgb(255,255,0),      //Yellow(RGB[255,255,0])
    Color.FromArgb(255,128,0),      //Orange(RGB[255,128,0])
    Color.FromArgb(128,0,255),      //Purple(RGB[128,0,255])
    Color.FromArgb(128,64,0),       //Brown(RGB[128,64,0])
    Color.FromArgb(128,128,128)     //Gray(RGB[128,128,128])
};

 

ComboBoxCellTypeForColor oCmbColor = new ComboBoxCellTypeForColor();
oCmbColor.Items = DrawColorArrary;
poSheetView.Cells[aiRow, (int)OptionColName.COL_DRAWCOLOR].CellType = oCmbColor;

原创粉丝点击