如何保持自定义绘制的复选框控件的透明度

Posted

技术标签:

【中文标题】如何保持自定义绘制的复选框控件的透明度【英文标题】:How to keep transparency on a custom painted Checkbox control 【发布时间】:2021-10-06 17:33:30 【问题描述】:

我无法创建所有者绘制的检查框,因为我不喜欢检查样式。子类化 Winform 复选框并不是什么大不了的事,而且对复选框本身进行重绘也很容易。但我不喜欢文本的位置,因为没有用于定位它的属性。

所以基本上,清除控件的图形,绘制复选框和文本我喜欢的方式和位置。

只是,不清除图形会导致黑色矩形,并且您会失去透明度。但如果不清除或重绘客户区,原始文本将始终与所有者绘制的文本重叠。

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

我现在找到的解决方案是将控件的文本设置为string.empty,调用基本的 OnPaint 方法并覆盖 OnTextChange 事件。而已。现在我可以完全按照我想要的方式绘制文本,并且控制仍然是透明的:

    class mycheckBox
    
        private string _Text;

        protected override void OnTextChanged(EventArgs e)
        
         // Prevent calling paint method on text change
        

       protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
       
        _Text = this.Text;
        this.Text = string.empty;
        base.OnPaint(e);
        Text = _Text; 

        // do your drawing here
        
    

【讨论】:

以上是关于如何保持自定义绘制的复选框控件的透明度的主要内容,如果未能解决你的问题,请参考以下文章

WinForm里的用户自定义控件如何半透明(急急)

Qt编写自定义控件21-圆弧仪表盘

在自定义 UserControl 上强制透明背景

如何在 QTableView 中绘制自定义控件?

VB6 自定义控件透明问题

如何在双向绑定的Image控件上绘制自定义标记(wpf)