Date日期选择美化控件----------WinForm控件开发系列

下面是控件显示界面源码,日期选择面板源码太多了3000行左右,没有贴出来,可以下载源码去看。你可以完善这个日期控件。

 /// <summary>
  /// 日期选择美化控件
  /// </summary>
  [ToolboxItem(true)]
  [DefaultProperty("DatePicker")]
  [Description("日期选择美化控件")]
  public partial class DateExt : Control
  {
    #region

    private bool backBorderShow = true;
    /// <summary>
    /// 是否显示边框
    /// </summary>
    [DefaultValue(true)]
    [Description("是否显示边框")]
    public bool BackBorderShow
    {
      get { return this.backBorderShow; }
      set
      {
        if (this.backBorderShow == value)
          return;
        this.backBorderShow = value;
        this.Invalidate();
      }
    }

    private ImageAnchors imageAnchor = ImageAnchors.Right;
    /// <summary>
    /// 图片位置
    /// </summary>
    [DefaultValue(ImageAnchors.Right)]
    [Description("图片位置")]
    public ImageAnchors ImageAnchor
    {
      get { return this.imageAnchor; }
      set
      {
        if (this.imageAnchor == value)
          return;
        this.imageAnchor = value;
        this.Invalidate();
      }
    }

    private Color backBorderColor = Color.FromArgb(192, 192, 192);
    /// <summary>
    /// 边框颜色
    /// </summary>
    [DefaultValue(typeof(Color), "192, 192, 192")]
    [Description("边框颜色")]
    [Editor(typeof(ColorEditorExt), typeof(System.Drawing.Design.UITypeEditor))]
    public Color BackBorderColor
    {
      get { return this.backBorderColor; }
      set
      {
        if (this.backBorderColor == value)
          return;
        this.backBorderColor = value;
        this.Invalidate();
      }
    }

    private DatePickerExt datePicker = null;
    /// <summary>
    /// 日期选择面板
    /// </summary>
    [Browsable(true)]
    [Description("日期选择面板")]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public DatePickerExt DatePicker
    {
      get { return this.datePicker; }
      set { this.datePicker = value; }
    }

    protected override Size DefaultSize
    {
      get
      {
        return new Size(130, 23);
      }
    }

    protected override Cursor DefaultCursor
    {
      get
      {
        return Cursors.Hand;
      }
    }

    /// <summary>
    /// 日期面板显示状态
    /// </summary>
    private bool DisplayStatus = false;

    private ToolStripDropDown tsdd = null;

    private ToolStripControlHost tsch = null;

    private readonly StringFormat date_sf = new StringFormat() { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center, Trimming = StringTrimming.None, FormatFlags = StringFormatFlags.NoWrap };

    #endregion

    public DateExt()
    {
      SetStyle(ControlStyles.UserPaint, true);
      SetStyle(ControlStyles.AllPaintingInWmPaint, true);
      SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
      SetStyle(ControlStyles.ResizeRedraw, true);
      SetStyle(ControlStyles.SupportsTransparentBackColor, true);
      InitializeComponent();

      this.BackColor = Color.FromArgb(255, 255, 255);
      this.ForeColor = Color.FromArgb(105, 105, 105);
      this.Font = new Font("微软雅黑", 9);

      this.DatePicker = new DatePickerExt();
      this.tsdd = new ToolStripDropDown() { Padding = Padding.Empty };
      this.tsch = new ToolStripControlHost(this.DatePicker) { Margin = Padding.Empty, Padding = Padding.Empty };
      tsdd.Items.Add(this.tsch);


      this.tsdd.Closed += new ToolStripDropDownClosedEventHandler(this.tsdd_Closed);
      this.DatePicker.BottomBarConfirmClick += new DatePickerExt.BottomBarIiemClickEvent(this.DatePicker_BottomBarConfirmClick);

    }

    protected override void OnPaint(PaintEventArgs e)
    {
      base.OnPaint(e);
      Graphics g = e.Graphics;

      if (this.BackBorderShow)
      {
        Pen backborder_pen = new Pen(this.BackBorderColor, 1);
        g.DrawRectangle(backborder_pen, new Rectangle(e.ClipRectangle.X, e.ClipRectangle.Y, e.ClipRectangle.Width - 1, e.ClipRectangle.Height - 1));
        backborder_pen.Dispose();
      }

      string date_format = this.DatePicker.DateDisplayType == DatePickerExt.DateDisplayTypes.Year ? "yyyy" : (this.DatePicker.DateDisplayType == DatePickerExt.DateDisplayTypes.YearMonth ? "yyyy-MM" : "yyyy-MM-dd");
      int image_width = global::AnimationLibrary.Properties.Resources.date.Width;
      int image_height = global::AnimationLibrary.Properties.Resources.date.Height;
      Rectangle image_rect = new Rectangle(e.ClipRectangle.Right - image_width - 2, (e.ClipRectangle.Y + e.ClipRectangle.Height - image_height) / 2, 16, 16);
      Rectangle date_rect = new Rectangle(e.ClipRectangle.X + 5, e.ClipRectangle.Y, e.ClipRectangle.Width - image_width - 12, e.ClipRectangle.Height);
      if (this.ImageAnchor == ImageAnchors.Left)
      {
        image_rect = new Rectangle(e.ClipRectangle.X + 2, (e.ClipRectangle.Y + e.ClipRectangle.Height - image_height) / 2, 16, 16);
        date_rect = new Rectangle(e.ClipRectangle.X + 2 + image_width + 5, e.ClipRectangle.Y, e.ClipRectangle.Width - image_width - 12, e.ClipRectangle.Height);
      }
      SolidBrush date_sb = new SolidBrush(this.ForeColor);
      g.DrawImage(global::AnimationLibrary.Properties.Resources.date, image_rect);
      g.DrawString(this.DatePicker.Value.ToString(date_format), this.Font, date_sb, date_rect, date_sf);
      date_sb.Dispose();
    }

    protected override void OnClick(EventArgs e)
    {
      base.OnClick(e);
      if (!this.DisplayStatus)
      {
        tsdd.Show(this.PointToScreen(new Point(0, this.Height + 2)));
      }
    }

    protected override void Dispose(bool disposing)
    {
      if (disposing && (components != null))
      {
        components.Dispose();
        if (this.date_sf != null)
          this.date_sf.Dispose();
      }
      base.Dispose(disposing);
    }

    private void DatePicker_BottomBarConfirmClick(object sender, DatePickerExt.BottomBarIiemEventArgs e)
    {
      this.tsdd.Close();
      this.DisplayStatus = false;
      this.Invalidate();
    }

    private void tsdd_Closed(object sender, ToolStripDropDownClosedEventArgs e)
    {
      this.Invalidate();
      this.DisplayStatus = false;
    }

    /// <summary>
    /// 图片位置
    /// </summary>
    [Description("图片位置")]
    public enum ImageAnchors
    {
      /// <summary>
      /// 左边
      /// </summary>
      Left,
      /// <summary>
      /// 右边
      /// </summary>
      Right
    }

  }

源码下载:日期选择美化控件.zip

猜你喜欢

转载自www.cnblogs.com/tlmbem/p/11480577.html