一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Winform重繪單選、多選控件

 Csharp小記 2023-10-29 發(fā)布于江蘇

前言

對(duì)于單選和多選框這兩個(gè)控件的使用場景還是比較多的,但是在Winform中有一個(gè)很奇怪的現(xiàn)象:基本上所有帶可選擇功能的控件,這個(gè)選擇框都不能單獨(dú)調(diào)整大小,所以就會(huì)導(dǎo)致很多時(shí)候字體較大,但是選擇框是真的小,特別是在現(xiàn)在高分辨率的屏幕下,甚至還得去找......如果是在觸摸屏上使用的話,估計(jì)你已經(jīng)抓狂了;

所以,在之前的文章中,有針對(duì)DataGridView的選擇框做過一次重繪;這一篇就單獨(dú)用來重繪下這兩個(gè)控件,即RadioButtonCheckBox






開發(fā)環(huán)境:.NET Framework版本:4.8

開發(fā)工具:Visual Studio 2022










實(shí)現(xiàn)步驟

  1. 首先去找四個(gè)好看的圖標(biāo),分別對(duì)應(yīng)RadioButtonCheckBox的選中/未選中狀態(tài)(當(dāng)然不想用圖片也可以,比如自己畫框或者使用圖標(biāo)庫),然后將這些圖片加入到資源文件中。

  2. 創(chuàng)建自定義控件,定義Checked屬性 

private bool _checked = false;public bool Checked { get { return _checked; } set { _checked = value; Invalidate(); }
?

  1. 重寫OnPaint事件,做以下處理

    rotected override void OnPaint(PaintEventArgs e)        {            base.OnPaint(e);            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;            e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;            e.Graphics.CompositingQuality = CompositingQuality.HighQuality;            e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;            SizeF textSize = e.Graphics.MeasureString(Text, Font);            SizeF imgSize = new SizeF(textSize.Height, textSize.Height);            float imgX = 5, imgY = (Height - imgSize.Height) / 2;            e.Graphics.DrawImage(Checked ? Properties.Resources.Check_check : Properties.Resources.Check_normal, imgX, imgY, imgSize.Width, imgSize.Height);            float textX = imgX + imgSize.Width + 5, textY = (Height - textSize.Height) / 2 + 2;            e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), textX, textY);        }
  1. 重寫OnClick事件

     protected override void OnClick(EventArgs e)        {            base.OnClick(e);            Checked = !Checked;        }


  1. 針對(duì)單選情況需要特殊處理,即在同一個(gè)容器中的時(shí)候,只能選中一個(gè),所以RadioButtonOnClick事件如下

      protected override void OnClick(EventArgs e)        {            base.OnClick(e);            SetChecked();        }        private void SetChecked()        {            Checked = !Checked;            if (Parent != null && !(Parent is Form))            {                foreach (Control control in Parent.Controls)                {                    if (control is RadioEx radio)                    {                        radio.Checked = false;                    }                }                Checked = true;            }        }



  1. OnPaint事件中可以看到,選擇框的大小是隨著字體大小而調(diào)整的,所以只需要修改Font的屬性即可

實(shí)現(xiàn)效果

???點(diǎn)擊此處下載源碼???

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品欧美日韩中文字幕| 在线观看中文字幕91| 97人妻精品免费一区二区| 五月激情婷婷丁香六月网| 在线日本不卡一区二区| 老司机激情五月天在线不卡| 国产一区二区久久综合| 精品老司机视频在线观看| 精品视频一区二区三区不卡| 国产一级片内射视频免费播放| 国产色一区二区三区精品视频| 夫妻激情视频一区二区三区 | 丰满人妻少妇精品一区二区三区| 日本精品理论在线观看| 熟女免费视频一区二区| 草草草草在线观看视频| 狠狠亚洲丁香综合久久| 亚洲一区二区欧美在线| 久久精品福利在线观看| 黄色美女日本的美女日人| 在线观看欧美视频一区| 国产又长又粗又爽免费视频| 色婷婷亚洲精品综合网| 亚洲欧美日韩色图七区| 国产性情片一区二区三区| 欧美偷拍一区二区三区四区| 亚洲精品一二三区不卡| 亚洲最大的中文字幕在线视频| 亚洲天堂男人在线观看| 久久中文字人妻熟女小妇| 亚洲精品国男人在线视频| 99久久人妻精品免费一区| 极品少妇嫩草视频在线观看| 国产不卡最新在线视频| 欧美午夜国产在线观看| 久久中文字幕中文字幕中文| 国产性色精品福利在线观看| 日本一区二区三区黄色| 成人精品日韩专区在线观看| 91麻豆精品欧美视频| 日本在线高清精品人妻|