一个Xp风格的表单类(一)

其实是一个 无边框窗体,写成的表单类....但是外表看起来和普通的FORM完全一样.

呵呵. 最可惜的是,现在还没找到,在工具栏上放菜单的办法......哭....

下面是运行时候的图片..

win8_1

我喜欢程序,更喜欢程序有个PL的界面....

但是网上似乎找不到详细的,关于此方面的教程或源码.

重绘时改用了双缓冲,在窗体上有动画的时候,重绘不会出现闪烁的现象了.

献丑一下,把源码贴出来,大家一起交流....

下面是引用,以及,声明的部分##########################################

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Runtime.InteropServices;

namespace XpFormOfApc
{
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    public class XpForm : System.Windows.Forms.Form
    {
        public delegate void SysHandler(object sender, System.EventArgs e);
        public event SysHandler SysDoubleClick;

        //############API设置窗口STYLE#############
        private const int GWL_STYLE = (-16);
        private const int WS_SYSMENU = 0x80000;
        private const int WS_SIZEBOX = 0x40000;
        private const int WS_MAXIMIZEBOX = 0x10000;
        private const int WS_MINIMIZEBOX = 0x20000;

        [System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SetWindowLong")]
        private static extern int SetWindowLongA(int hwnd, int nIndex, int dwNewLong);
        //###########普通组件定义#################
        private System.ComponentModel.IContainer components;
        private System.Windows.Forms.ImageList imglist;
        private System.Windows.Forms.ImageList syslist;
        //###############组件属性##################
        //---系统按钮---
        private bool Sys_Close_Visible = true;
        private bool Sys_Max_Visible = true;
        private bool Sys_Res_Visible = false;
        private bool Sys_Min_Visible = true;
        private bool Sys_Down_Visible = false;
        private bool Sys_Up_Visible = true;
        private bool Sys_Tray_Visible = true;
        private bool IsShowInTray = false;
        private int FormIconWidth = 16;
        private int FormIconHeight = 16;
        private const int ONE = 23;  //按钮宽21+2间隔
        private int[,] SysCmd = new int[9, 7]{
                                            {1,0,7,0,6,21,21},
           {1,1,8,0,6,21,21},
           {0,2,9,0,6,21,21},
           {1,3,10,0,6,21,21},
           {0,4,11,0,6,21,21},
           {1,5,12,0,6,21,21},
           {1,6,13,0,6,21,21},
           {10,5,12,0,0,21,21},
           {11,5,12,32,0,0,30}
            }; //10-FORM_ICON   11-FORM_TITLE
        //---表单图标--托盘图标---
        private NotifyIcon ni = new NotifyIcon();
        private Icon TrayIcon;
        private ContextMenu TrayContextMenu;
        private string[] TrayToolTip;
        private string TempTrayToolTip;
        //public event SysOnDoubleClick (System.EventArgs e);    //托盘图标双击事件

        private Rectangle FormRect;//表单上一状态的RECT 用于Down还原

        //允许拖拽标志 - 坐标
        private bool CanMove = false;
        private Point CurPoint = new Point(0, 0);
        private Point CurPoint2 = new Point(0, 0);

        //
        private int CanUp = 0;

        //====================================================
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_MOVE = 0xF010;
        private const int HTCAPTION = 0x0002;
        private const int HTRIGHT = 0x0011;


        //################  下面是代码  ###############
        public XpForm()
        {
            //
            // Windows 窗体设计器支持所必需的
            //
            InitializeComponent();
            //this.SetBounds(4,30,this.Width-8,this.Height-34);
            //
            // TOD 在 InitializeComponent 调用后添加任何构造函数代码
            //
        }

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(XpForm));
            this.imglist = new System.Windows.Forms.ImageList(this.components);
            this.syslist = new System.Windows.Forms.ImageList(this.components);
            // 
            // imglist
            // 
            this.imglist.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
            this.imglist.ImageSize = new System.Drawing.Size(50, 50);
            this.imglist.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imglist.ImageStream")));
            this.imglist.TransparentColor = System.Drawing.Color.Black;
            // 
            // syslist
            // 
            this.syslist.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
            this.syslist.ImageSize = new System.Drawing.Size(21, 21);
            this.syslist.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("syslist.ImageStream")));
            this.syslist.TransparentColor = System.Drawing.Color.Transparent;
            // 
            // XpForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            this.ClientSize = new System.Drawing.Size(280, 136);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.Name = "XpForm";
            this.Text = "APC心灵空间";

        }
        #endregion

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //XpForm xf=new XpForm();
            //xf.SysDoubleClick+=new SysHandler(xf.ni_DoubleClick);
            Application.Run(new XpForm());
        }

        //######################### 自 定 函 数 ##############################
        private void RePaint(bool ClearAll)
        {
            Graphics g = this.CreateGraphics();
            if (ClearAll == true) { g.Clear(Color.FromArgb(242, 242, 242)); }
            //画XP边框
            g.DrawImage(imglist.Images[1], 0, 0, this.Width + 50, 30);   //横幅
            g.DrawImage(imglist.Images[0], 0, 0, 6, 30);      //左角
            g.DrawImage(imglist.Images[2], this.Width - 6, 0, 6, 30);    //右角
            g.DrawImage(imglist.Images[5], 0, this.Height - 4, this.Width + 50, 4);//下边
            g.DrawImage(imglist.Images[3], 0, 7, 4, this.Height);      //左边
            g.DrawImage(imglist.Images[4], this.Width - 4, 7, 4, this.Height);//右边
                                                                              //画图标
            g.DrawImage((Image)this.Icon.ToBitmap(), new Rectangle(8, 6, FormIconWidth, FormIconHeight));
            //画标题
            g.DrawString(this.Text, new Font("宋体", 9, FontStyle.Bold), new SolidBrush(Color.White), 32, 10);
            //计算..画按钮
            InitSysCmd();
            int SysIndex = 1;
            for (int i = 0; i <= 6; i++)
            {
                //if(SysVisible[i]==1)
                if (SysCmd[i, 0] == 1)
                {
                    g.DrawImage(syslist.Images[i], this.Width - ONE * SysIndex - 6, 6, 21, 21);
                    SysCmd[i, 3] = this.Width - ONE * SysIndex - 6;  //记录各SysCmd的Rect.X
                    SysCmd[8, 5] = this.Width - ONE * SysIndex - 6; //标题栏拖拽的长度
                    SysIndex += 1;
                }
            }

            g.Dispose();
        }

        private void RePaint()
        {
            Bitmap b = new Bitmap(this.Width, this.Height);
            Graphics bmp = Graphics.FromImage((Image)b);

            //Bitmap c=new Bitmap(100,100,this.CreateGraphics());
            //g.Clear(this.BackColor);

            //画XP边框
            bmp.DrawImage(imglist.Images[1], 0, 0, this.Width + 50, 30);   //横幅
            bmp.DrawImage(imglist.Images[0], 0, 0, 6, 30);      //左角
            bmp.DrawImage(imglist.Images[2], this.Width - 6, 0, 6, 30);    //右角
            bmp.DrawImage(imglist.Images[5], 0, this.Height - 4, this.Width + 50, 4);//下边
            bmp.DrawImage(imglist.Images[3], 0, 7, 4, this.Height);      //左边
            bmp.DrawImage(imglist.Images[4], this.Width - 4, 7, 4, this.Height);//右边
                                                                                //画图标
            bmp.DrawImage((Image)this.Icon.ToBitmap(), new Rectangle(8, 6, FormIconWidth, FormIconHeight));
            //画标题
            bmp.DrawString(this.Text, new Font("宋体", 9, FontStyle.Bold), new SolidBrush(Color.White), 32, 10);
            //计算..画按钮
            InitSysCmd();
            int SysIndex = 1;
            for (int i = 0; i <= 6; i++)
            {
                //if(SysVisible[i]==1)
                if (SysCmd[i, 0] == 1)
                {
                    bmp.DrawImage(syslist.Images[i], this.Width - ONE * SysIndex - 6, 6, 21, 21);
                    SysCmd[i, 3] = this.Width - ONE * SysIndex - 6;  //记录各SysCmd的Rect.X
                    SysCmd[8, 5] = this.Width - ONE * SysIndex - 6; //标题栏拖拽的长度
                    SysIndex += 1;
                }
            }
            Graphics g = this.CreateGraphics();
            g.DrawImage(b, 0, 0);
            bmp.Dispose();
            g.Dispose();
        }

        private void ReCreateRegion()
        {
            Rectangle r = Screen.GetWorkingArea(this);
            Point[] p = new Point[]{
              new Point(0,6),
              new Point(1,4),
              new Point(4,1),
              new Point(6,0),
              new Point(this.Width-6,0),
              new Point(this.Width-4,1),
              new Point(this.Width-1,4),
              new Point(this.Width-1,5),
              new Point(this.Width,this.Height),
              new Point(0,this.Height)};
            byte[] b = new byte[]{
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line,
               (byte)PathPointType.Line};
            System.Drawing.Drawing2D.GraphicsPath path = new GraphicsPath(p, b);
            this.Region = new Region(path);
        }

        private void InitSysCmd()
        {
            if (Sys_Close_Visible == true) { SysCmd[0, 0] = 1; }
            else { SysCmd[0, 0] = 0; }
            if (Sys_Max_Visible == true) { SysCmd[1, 0] = 1; }
            else { SysCmd[1, 0] = 0; }
            if (Sys_Res_Visible == true) { SysCmd[2, 0] = 1; }
            else { SysCmd[2, 0] = 0; }
            if (Sys_Min_Visible == true) { SysCmd[3, 0] = 1; }
            else { SysCmd[3, 0] = 0; }
            if (Sys_Up_Visible == true) { SysCmd[5, 0] = 1; }
            else { SysCmd[5, 0] = 0; }
            if (Sys_Down_Visible == true) { SysCmd[4, 0] = 1; }
            else { SysCmd[4, 0] = 0; }
            if (Sys_Tray_Visible == true) { SysCmd[6, 0] = 1; }
            else { SysCmd[6, 0] = 0; }
        }

        private void DoClick(int i)
        {
            switch (i)
            {
                case 0://关闭
                    this.Close();
                    break;
                case 1://最大化
                    this.WindowState = FormWindowState.Maximized;
                    break;
                case 2://还原
                    this.WindowState = FormWindowState.Normal;
                    break;
                case 3://最小化
                    this.WindowState = FormWindowState.Minimized;
                    break;
                case 4://放下
                    this.Top = FormRect.Y;
                    this.Left = FormRect.X;
                    this.Width = FormRect.Width;
                    this.Height = FormRect.Height;
                    Sys_Down_Visible = false;
                    Sys_Up_Visible = true;
                    //this.RePaint();
                    break;
                case 5://收起
                    FormRect = new Rectangle(this.Left, this.Top, this.Width, this.Height);
                    this.Height = 30;
                    this.Top = 0;
                    Sys_Up_Visible = false;
                    Sys_Down_Visible = true;
                    this.RePaint();
                    break;
                case 6://缩入托盘
                    ni.Text = TempTrayToolTip;
                    ni.Icon = TrayIcon;
                    ni.ContextMenu = TrayContextMenu;
                    this.WindowState = FormWindowState.Minimized;
                    this.ShowInTaskbar = false;
                    this.Visible = false;
                    ni.Visible = true;
                    break;
            }
        }

        private void ni_DoubleClick(object sender, System.EventArgs e)
        {
            OnSysDoubleClick(e);
            if (ShowInTray == true)
            {
                ni.Visible = true;
            }
        }

        void OnSysDoubleClick(System.EventArgs e)
        {
            if (this.Visible == true)
            {
                this.WindowState = FormWindowState.Minimized;
                this.ShowInTaskbar = false;
                this.Visible = false;
                ni.Visible = true;
            }
            else
            {
                int mStyle = WS_SYSMENU;
                if (Sys_Max_Visible == true) { mStyle = mStyle | WS_MAXIMIZEBOX; }
                if (Sys_Min_Visible == true) { mStyle = mStyle | WS_MINIMIZEBOX; }

                if (ShowInTray == false) { ni.Visible = false; }

                this.ShowInTaskbar = true;
                this.WindowState = FormWindowState.Minimized;
                int a = SetWindowLongA(this.Handle.ToInt32(), GWL_STYLE, mStyle);
                this.Visible = true;
                this.WindowState = FormWindowState.Normal;
            }
        }

        #region __重 载 事 件___
        //######################### 重 载 事 件 ###############################
        protected override void OnLoad(System.EventArgs e)
        {
            int mStyle = WS_SYSMENU;
            if (Sys_Max_Visible == true) { mStyle = mStyle | WS_MAXIMIZEBOX; }
            if (Sys_Min_Visible == true) { mStyle = mStyle | WS_MINIMIZEBOX; }
            int a = SetWindowLongA(this.Handle.ToInt32(), GWL_STYLE, mStyle);
            if (IsShowInTray == true) { ni.Icon = TrayIcon; ni.ContextMenu = TrayContextMenu; ni.Text = TempTrayToolTip; ni.Visible = true; }
            this.ni.DoubleClick += new System.EventHandler(this.ni_DoubleClick);
            this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.ContainerControl, true);
        }

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            //base.OnPaint(e);
            this.RePaint();
            base.OnPaint(e);
            //ee=e;
        }

        protected override void OnResize(System.EventArgs e)
        {
            Rectangle r = Screen.GetWorkingArea(this);
            this.MaximumSize = new Size(r.Width, r.Height);
            if (this.WindowState == FormWindowState.Maximized)
            {
                if (Sys_Max_Visible == true)
                {
                    Sys_Max_Visible = false;
                    Sys_Res_Visible = true;
                }
                if (Sys_Up_Visible == true)
                {
                    Sys_Up_Visible = false;
                    CanUp = 1;
                }
            }
            if (this.WindowState == FormWindowState.Normal)
            {
                if (Sys_Res_Visible == true)
                {
                    Sys_Max_Visible = true;
                    Sys_Res_Visible = false;
                }
                if (CanUp == 1)
                {
                    Sys_Up_Visible = true;
                    CanUp = 0;
                }
            }
            this.RePaint();
            //this.OnPaint(ee);
            ReCreateRegion();
            this.Refresh();
        }

        protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
        {
            if (CanMove == true)
            {
                //this.Cursor=Cursors.SizeAll;
                //this.Top=Cursor.Position.Y-CurPoint.Y;
                //this.Left=Cursor.Position.X-CurPoint.X;
                if (CurPoint.X > SysCmd[8, 3] && CurPoint.X < SysCmd[8, 5] && CurPoint.Y < 30 && (Sys_Res_Visible != true))
                {
                    ReleaseCapture();
                    SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
                }
            }

            Graphics g = this.CreateGraphics();
            for (int i = 0; i <= 6; i++)
            {
                if (SysCmd[i, 0] == 1)
                {
                    if (e.X > SysCmd[i, 3] && e.X < SysCmd[i, 3] + 21 && e.Y > 6 && e.Y < 27)
                    { g.DrawImage(syslist.Images[SysCmd[i, 2]], SysCmd[i, 3], 6, 21, 21); }
                    else { g.DrawImage(syslist.Images[SysCmd[i, 1]], SysCmd[i, 3], 6, 21, 21); }
                }
            }
            g.Dispose();

            CurPoint2.X = Cursor.Position.X - this.Left;
            CurPoint2.Y = Cursor.Position.Y - this.Top;
        }

        protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && e.X > SysCmd[8, 3] && e.X < SysCmd[8, 5] && e.Y < 30)
            {
                CanMove = true;
            }
            CurPoint.X = e.X;
            CurPoint.Y = e.Y;
        }

        protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
        {
            //if(e.Button==MouseButtons.Left && e.X>SysCmd[8,3] && e.X<SysCmd[8,5] && e.Y<30)
            //{
            CanMove = false;
            this.Cursor = Cursors.Default;
            //}
        }

        protected override void OnClick(System.EventArgs e)
        {
            for (int i = 0; i <= 6; i++)
            {
                if (SysCmd[i, 0] == 1)
                {
                    if (CurPoint.X > SysCmd[i, 3] && CurPoint.X < SysCmd[i, 3] + 21 && CurPoint.Y > 6 && CurPoint.Y < 27)
                    { DoClick(i); }
                    else { }
                }
            }
        }

        protected override void OnDoubleClick(System.EventArgs e)
        {
            if (CurPoint.X > SysCmd[8, 3] && CurPoint.X < SysCmd[8, 5] && CurPoint.Y < 30 && (Sys_Max_Visible == true || Sys_Res_Visible == true))
            {
                if (this.WindowState == FormWindowState.Maximized)
                {
                    this.WindowState = FormWindowState.Normal;
                }
                else
                {
                    this.WindowState = FormWindowState.Maximized;
                }
                this.Cursor = Cursors.Default;
            }
        }

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            ni.Visible = false;
            ni.Dispose();
        }

        protected override void OnTextChanged(System.EventArgs e)
        { this.RePaint(false); }

        //protected override void OnLayout(System.Windows.Forms.LayoutEventArgs e)
        //{
        //mmd,在这里一加事件,居然从TRAY里恢复窗口的时候,不从画子控件了..郁闷
        //this.XpPanel.Location=new Point(4,30);
        //this.XpPanel.Size=new Size(this.Width-8,this.Height-34);
        //this.XpPanel.SendToBack();
        //foreach(Control c in this.Controls)
        //{
        //c.Parent=this.XpPanel;
        //}
        //}

        //protected override void OnControlAdded(System.Windows.Forms.ControlEventArgs ce)
        //{
        /*  这也不是什么根本的办法,,,,,自己用还中....
        try
        {
         if(ce.Control.Parent==this && ce.Control.Name!=this.Name && ce.Control.Name!=this.XpPanel.Name)
         {
          ce.Control.Parent=this.XpPanel;
         }
        }
        catch{}
        */
        //}

        /*
        protected override void WndProc(ref Message m) 
        {
         base.WndProc(ref m);
         if (m.Msg == 0x0084 && CurPoint2.Y<=30 ) //WM_NCHITTEST
         {
          m.Result= (IntPtr)2; // HTCLIENT
          this.Text=this.CurPoint2.Y.ToString();
          return;
         }

        }*/
        //protected override void OnActivated(System.EventArgs e)
        //{

        //}
        //####################################################################
        #endregion

        #region  自 定 义 属 性
        //####################### 自 定 义 属 性 #############################
        [Category("XpForm属性"), Description("获取或设置窗体的关闭按钮是否可见.")]
        public bool Sys_Close_IsVisible
        {
            get { return Sys_Close_Visible; }
            set
            {
                Sys_Close_Visible = value;
                InitSysCmd();
                int SysIndex = 0;
                for (int i = 0; i <= 6; i++)
                {
                    if (SysCmd[i, 0] == 1)
                    {
                        SysIndex += 1;
                    }
                }
                this.Invalidate(new Rectangle(this.Width - 6 - ONE * SysIndex, 6, 6 + ONE * SysIndex, 21));
            }
        }

        [Category("XpForm属性"), Description("获取或设置窗体的最大化按钮是否可见.")]
        public bool Sys_Max_IsVisible
        {
            get { return Sys_Max_Visible; }
            set
            {
                Sys_Max_Visible = value;
                InitSysCmd();
                int SysIndex = 0;
                for (int i = 0; i <= 6; i++)
                {
                    if (SysCmd[i, 0] == 1)
                    {
                        SysIndex += 1;
                    }
                }
                this.Invalidate(new Rectangle(this.Width - 6 - ONE * SysIndex, 6, 6 + ONE * SysIndex, 21));
            }
        }

        [Category("XpForm属性"), Description("获取或设置窗体的最小化按钮是否可见.")]
        public bool Sys_Min_IsVisible
        {
            get { return Sys_Min_Visible; }
            set
            {
                Sys_Min_Visible = value;
                InitSysCmd();
                int SysIndex = 0;
                for (int i = 0; i <= 6; i++)
                {
                    if (SysCmd[i, 0] == 1)
                    {
                        SysIndex += 1;
                    }
                }
                this.Invalidate(new Rectangle(this.Width - 6 - ONE * SysIndex, 6, 6 + ONE * SysIndex, 21));
            }
        }

        [Category("XpForm属性"), Description("获取或设置窗体的收起(向上)按钮是否可见.")]
        public bool Sys_Up_IsVisible
        {
            get { return Sys_Up_Visible; }
            set
            {
                Sys_Up_Visible = value;
                InitSysCmd();
                int SysIndex = 0;
                for (int i = 0; i <= 6; i++)
                {
                    if (SysCmd[i, 0] == 1)
                    {
                        SysIndex += 1;
                    }
                }
                this.Invalidate(new Rectangle(this.Width - 6 - ONE * SysIndex, 6, 6 + ONE * SysIndex, 21));
            }
        }

        [Category("XpForm属性"), Description("获取或设置窗体的缩入托盘按钮是否可见.")]
        public bool Sys_Tray_IsVisible
        {
            get { return Sys_Tray_Visible; }
            set
            {
                Sys_Tray_Visible = value;
                InitSysCmd();
                int SysIndex = 0;
                for (int i = 0; i <= 6; i++)
                {
                    if (SysCmd[i, 0] == 1)
                    {
                        SysIndex += 1;
                    }
                }
                this.Invalidate(new Rectangle(this.Width - 6 - ONE * SysIndex, 6, 6 + ONE * SysIndex, 21));
            }
        }

        [Category("XpForm属性"), Description("获取或设置窗体在托盘区显示的图标.")]
        public Icon Sys_Icon
        {
            get { return TrayIcon; }
            set { TrayIcon = value; ni.Icon = TrayIcon; }
        }

        [Category("XpForm属性"), Description("获取或设置窗体在托盘区的上下文菜单.")]
        public ContextMenu Sys_ContextMenu
        {
            get { return TrayContextMenu; }
            set { TrayContextMenu = value; ni.ContextMenu = TrayContextMenu; }
        }

        [Category("XpForm属性"), Description("获取或设置当鼠标停留在托盘区图标上时的提示文字.")]
        public string Sys_ToolTip
        {
            get { return TempTrayToolTip; }
            set { TempTrayToolTip = value; TrayToolTip = TempTrayToolTip.Split("\n".ToCharArray(), 0); ni.Text = value; }
        }

        [Category("XpForm属性"), Description("多行编辑控件中的文本行,作为字符串值的数组.(用于设置多行ToolTip)")]
        public string[] Sys_ToolTip_Lines
        {
            get { return TrayToolTip; }
            set
            {
                string[] a = value;
                //TrayToolTip=value[0];
                TempTrayToolTip = "";
                for (int i = 0; i <= a.Length - 1; i++)
                {
                    TempTrayToolTip = TempTrayToolTip + a.GetValue(i).ToString();
                    if (i < a.Length - 1)
                    {
                        TempTrayToolTip = TempTrayToolTip + "\n";
                    }
                }
                ni.Text = TempTrayToolTip;
                TrayToolTip = value;
            }
        }

        [Category("XpForm属性"), Description("获取或设置窗体刚启动时是否在托盘区显示.(需要先设置Sys_Icon属性.)")]
        public bool ShowInTray
        {
            get { return IsShowInTray; }
            set
            {
                IsShowInTray = value;
                if (!this.DesignMode)
                {
                    ni.Icon = TrayIcon;
                    ni.ContextMenu = TrayContextMenu;
                    ni.Text = TempTrayToolTip;
                    ni.Visible = value;
                }
            }
        }

        [Category("XpForm属性"), Description("窗体图标的宽.)")]
        public int FormIcon_Width
        {
            get { return FormIconWidth; }
            set
            {
                if (value >= FormIconWidth)
                {
                    FormIconWidth = value;
                    this.Invalidate(new Rectangle(8, 6, value, FormIconHeight));
                }
                else
                {
                    int temp = FormIconWidth;
                    FormIconWidth = value;
                    this.Invalidate(new Rectangle(8, 6, value, temp));
                }
            }
        }
        
        [Category("XpForm属性"), Description("窗体图标的高.)")]
        public int FormIcon_Height
        {
            get { return FormIconHeight; }
            set
            {
                if (value >= FormIconHeight)
                {
                    FormIconHeight = value;
                    this.Invalidate(new Rectangle(8, 6, FormIconWidth, value));
                }
                else
                {
                    int temp = FormIconHeight;
                    FormIconHeight = value;
                    this.Invalidate(new Rectangle(8, 6, temp, value));
                }
            }
        }
        //####################################################################
        #endregion
    }
}
Contributors: FHL