باش بەت > ماقالىلەر > پروگرامما تۈزۈش

C# دا كونتروللارنى ئۆزى بىكىتىش

پروگرامما تۈزۈشخىيال2025-05-07 00:40:20A+A-

WinForm ( Windows Forms ) بولسا Microsoft.NET رامكىسىدىكى تېخنىكا بولۇپ، Windows ئۈستەل ئۈستىلى قوللىنىشچان پروگراممىلىرىنى تەرەققىي قىلدۇرۇشتا ئىشلىتىلىدۇ. ئۇ بىر يۈرۈش مول كونترول قىلىش دېتالى ۋە بىرىكمە دېتال بىلەن تەمىنلىدى. كونتىروللىغۇچنى سۆرەپ قويۇپ بېرىش، ۋەقەنى بىر تەرەپ قىلىش پروگراممىسىنى يېزىش قاتارلىق ئۇسۇللار ئارقىلىق ئابونت كۆرۈنۈشى تېز سۈرئەتتە بەرپا قىلىنىدۇ. خاسلىق كۆزنىكى ئارقىلىق بۇ كونتىروللىغۇچنىڭ سىرتقى كۆرۈنۈشى ۋە ھەرىكىتىنى زاكاز قىلىش. سانلىق مەلۇماتنى باغلاش ئارقىلىق، UI كونتروللىغۇچ بىلەن سانلىق مەلۇمات مەنبەسىنى ئۇلاپ، سانلىق مەلۇماتنى كۆرسىتىش ۋە يېڭىلاشنى ئىشقا ئاشۇرىدۇ. يۇقىرىقى ئۇسۇل ئارقىلىق ئاچقۇچىلارنىڭ ئۈستەل يۈزى كۆزنىكى قوللىنىشچان پروگراممىسىنى يۇقىرى ئۈنۈملۈك بەرپا قىلىشىغا ياردەم بېرىدۇ، بولۇپمۇ يېڭى ئۆگەنگۈچىلەر ۋە تېز سۈرئەتتە ئېچىشقا تېگىشلىك تۈرلەرگە ماس كېلىدۇ.

بۇ ماقالىدە Winform كۆزنەك گەۋدىسىنى قانداق قۇرۇش ھەمدە كۆزنەك شەكلى ۋە كۆزنەك گەۋدىسىنىڭ ئاساسىي ئىقتىدارىغا ئۆزى ئېنىقلىما بېرىش تونۇشتۇرۇلدى. 

  1. كۆزنەكنى تاقاش، ئەڭ چوڭ قىلىش، كىچىكلىتىش ۋە ماسلىشىش.

2. چېگراسىز رامكا يۆتكەش ۋە رامكا چوڭ-كىچىكلىكىنى تەڭشەش.

 3. تىزىملىكنى كېڭەيتىپ قاتلاش.


تەپسىلى كۈرۈنمە كۆزنەك ئۈنۈمىنى كۈرۈپ باقايلى:


屏幕截图 2025-05-07 004414.png

كۇنۇپكىنى ئۆزىمىز بىكىتىش كودى:


public class UCButton : Button{    #region  公共字段、属性    private bool _selectedState = false;
    [Category("UserProperty")]    [Description("选中状态")]    public bool SelectedState    {        get => _selectedState;        private set        {            _selectedState = value;            this.Invalidate();        }    }

    private int radius = 15;
    [Category("UserProperty")]    [Description("圆角半径")]    public int Radius    {        get { return radius; }        set        {            radius = value;            this.Invalidate();        }    }    private Color _defaultColor;
    private Color _hoverColor = Color.LightBlue;
    [Category("UserProperty")]    [Description("鼠标悬停时的背景色")]    public Color HoverColor     {         get => _hoverColor;         set => _hoverColor = value;     }    #endregion    public UCButton()    {        Initialize();    }    private void Initialize()    {        this.DoubleBuffered = true;        this.FlatStyle = FlatStyle.Flat;        this.FlatAppearance.BorderSize = 0;        this.SetStyle(ControlStyles.UserPaint            | ControlStyles.AllPaintingInWmPaint            | ControlStyles.OptimizedDoubleBuffer            | ControlStyles.ResizeRedraw            | ControlStyles.SupportsTransparentBackColor, true);        _defaultColor = BackColor;
        this.MouseEnter += UCButton_MouseEnter;        this.MouseLeave += UCButton_MouseLeave;    }    private void UCButton_MouseEnter(object sender, EventArgs e)    {        this.BackColor = HoverColor; // 鼠标进入时更改背景色    }    private void UCButton_MouseLeave(object sender, EventArgs e)    {        this.BackColor = _defaultColor; // 鼠标离开时恢复默认背景色    }    protected override void OnClick(EventArgs e)    {        base.OnClick(e);        _selectedState = !_selectedState;    }    protected override void OnPaint(PaintEventArgs e)    {        base.OnPaint(e);        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;                     // 设置抗锯齿        e.Graphics.CompositingQuality = CompositingQuality.HighQuality;         // 高质量合成        e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;    // 高质量插值        // 绘制圆角矩形        using (GraphicsPath path = new GraphicsPath())        {            path.AddArc(00, radius, radius, 18090);                         // 左上角            path.AddArc(this.Width - radius, 0, radius, radius, 27090);       // 右上角            path.AddArc(this.Width - radius, this.Height - radius, radius, radius, 090);  // 右下角            path.AddArc(0this.Height - radius, radius, radius, 9090);                   // 左下角            path.CloseFigure();
            this.Region = new Region(path); // 设置按钮的区域为圆角矩形        }        // 绘制按钮文本        using (Brush brush = new SolidBrush(this.ForeColor))        {            SizeF textSize = e.Graphics.MeasureString(this.Text, this.Font);            PointF textLocation = new PointF((this.Width - textSize.Width) / 2, (this.Height - textSize.Height) / 2);            e.Graphics.DrawString(this.Text, this.Font, brush, textLocation);        }    }}

كۆزنەكنى ئۆزىمىز بىكىتىش كودى:



public partial class MainForm : Form{    private int ButtonWidth = 62;
   #region 窗体初始化、加载、关闭    public MainForm()    {        InitializeComponent();        this.CenterToParent();        this.CenterToScreen();    }    private void MainForm_Load(object sender, System.EventArgs e)    {        WinMoveBinding(panel_TopBorderItem);        WinMoveBinding(pic_WinIcon);        this.WindowState = FormWindowState.Normal;        this.MinimumSize = new System.Drawing.Size(150, 150);        panel_MenuItemText.Hide();        ButtonWidth = btn_Expand.Width;    }    private void MainForm_FormClosing(object sender, FormClosingEventArgs e)    {
   }    #endregion
   /// <summary>    /// 窗体移动功能事件绑定    /// </summary>    private void WinMoveBinding(Control control)    {        control.MouseDown += topBorderPanel_MouseDown;        control.MouseMove += topBorderPanel_MouseMove;        control.MouseUp += topBorderPanel_MouseUp;    }
   #region 窗体拖动    private Point mouseOffset;    private void topBorderPanel_MouseDown(object sender, MouseEventArgs e)    {        if (e.Button == MouseButtons.Left)        {            mouseOffset = new Point(-e.X, -e.Y);        }    }
   private void topBorderPanel_MouseMove(object sender, MouseEventArgs e)    {        if (e.Button == MouseButtons.Left)        {            Point mousePos = Control.MousePosition;            mousePos.Offset(mouseOffset.X, mouseOffset.Y);            this.Location = mousePos;        }    }
   private void topBorderPanel_MouseUp(object sender, MouseEventArgs e)    {        mouseOffset = Point.Empty;    }    #endregion
   #region 无边框窗体随意拖动和改变尺寸    const int WM_NCHITTEST = 0x0084;    const int HTLEFT = 10;    const int HTRIGHT = 11;    const int HTTOP = 12;    const int HTTOPLEFT = 13;    const int HTTOPRIGHT = 14;    const int HTBOTTOM = 15;    const int HTBOTTOMLEFT = 0x10;    const int HTBOTTOMRIGHT = 17;    protected override void WndProc(ref Message m)    {        base.WndProc(ref m);        switch (m.Msg)        {            case WM_NCHITTEST:                Point vPoint = new Point((int)m.LParam & 0xFFFF,                    (int)m.LParam >> 16 & 0xFFFF);                vPoint = PointToClient(vPoint);                if (vPoint.X <= 5)                    if (vPoint.Y <= 5)                        m.Result = (IntPtr)HTTOPLEFT;                    else if (vPoint.Y >= ClientSize.Height - 5)                        m.Result = (IntPtr)HTBOTTOMLEFT;                    else m.Result = (IntPtr)HTLEFT;                else if (vPoint.X >= ClientSize.Width - 5)                    if (vPoint.Y <= 5)                        m.Result = (IntPtr)HTTOPRIGHT;                    else if (vPoint.Y >= ClientSize.Height - 5)                        m.Result = (IntPtr)HTBOTTOMRIGHT;                    else m.Result = (IntPtr)HTRIGHT;                else if (vPoint.Y <= 5)                    m.Result = (IntPtr)HTTOP;                else if (vPoint.Y >= ClientSize.Height - 5)                    m.Result = (IntPtr)HTBOTTOM;                break;        }    }    #endregion
   #region 窗体关闭、最大化、最小化    private void btn_ClosingWindow_Click(object sender, System.EventArgs e)    {        if (MessageBox.Show("是否关闭窗体!", "关闭", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)        {            this.Close();        }    }
   private void btn_Maximize_Click(object sender, System.EventArgs e)    {        Button button = sender as Button;        if (this.WindowState == FormWindowState.Maximized)        {            this.WindowState = FormWindowState.Normal;            button.Image = global::ModbusDemo.Properties.Resources.maximize_blue_32;        }        else        {            this.WindowState = FormWindowState.Maximized;            button.Image = global::ModbusDemo.Properties.Resources.restore_blue_32;
       }    }
   private void btn_Minimize_Click(object sender, System.EventArgs e)    {        this.WindowState = FormWindowState.Minimized;    }
   #endregion
   /// <summary>    /// 折叠按钮    /// </summary>    private void btn_Expand_Click(object sender, System.EventArgs e)    {        //展开        if (!btn_Expand.SelectedState)        {            btn_Expand.Image = global::ModbusDemo.Properties.Resources.collapse_left_blue_32;            panel_MenuItemIcon.Width = ButtonWidth;            panel_MenuItemText.ScrollControlIntoView(btn_Expand);            panel_MenuItemText.Show();            panel_LeftMenuItem.Width = 256;        }        //折叠        else        {            btn_Expand.Image = global::ModbusDemo.Properties.Resources.collapse_right_blue_32;
           panel_MenuItemIcon.Width = ButtonWidth;            panel_LeftMenuItem.Width = ButtonWidth;            panel_MenuItemText.Hide();        }    }
   /// <summary>    /// 首页按钮    /// </summary>    private void btn_Home_Click(object sender, EventArgs e)    {
   }}


بۇ يەرنى بېسىپ تىما ئادرىسىنى كۆچۈرۈڭ يۇقارقىلار بولسا خىيال ئۇنۋېرسال تور بېكىتىنىڭ تەييارلىغان ماتېرىياللىرى، باشقىلارغا ھەمبەھىرلىگەندە مەنبەسىنى ئەسكەرتىڭ! خاتالىق بولسا بىز بىلەن ئالاقىلىشىڭ. رەھمەت!

مۇناسىۋەتلىك ماقالىلەر

ئېچىلىۋاتىدۇ...

Copyright © 2006-2023 خىيال ئۇنۋېرسال تورى يۇمشاق دىتال ئىشخانىسى
بىكىتىمىزنىڭ رويىخەت نومۇرى:苏ICP备17005574号-1
TAGخەتكۈچلەر

qrcode
توردا مۇلازىمەت
تېلېفۇنىمىز

مۇلازىمەت تېلېفۇنى

1362998XXXX

ئۇندىدار
我的网站名称
ئۈستىگە قايتىش
X我的网站名称

截屏,微信识别二维码

微信号:86805363

(点击微信号复制,添加好友)

  打开微信

微信号已复制,请打开微信添加咨询详情!