闲话WinFrom与WPF(3) 控件篇——CheckedListBox

本文探讨如何在WinForm和WPF中实现CheckedListBox功能。WinForm实现相对死板,依赖ItemCheck事件,而WPF可通过自定义样式轻松达成。作者指出WPF的灵活性可能导致多种实现方法,鼓励开发者不断探索更好的解决方案。
摘要由CSDN通过智能技术生成

我曾经写过一个筛选的Demo,里面有一个列表选择控件:

列表选择

这次只是说一个全选功能。
我曾经以为应该有更优雅的方式去实现全选功能,即使到现在我还是没有找到,有时候人们会告诉你不要对一个问题过于纠结,只要实现了功能就成,但是程序员往往不是这么想。
当我开始再一次用WinForm实现这个功能时,发现还是只能使用原来的方法,没有更好的方案去做这个。这要说还是由于WinForm过于死板,无法如WPF一般简单的实现自定义。
鉴于此Demo为本系列文章的第一篇WPF的Demo,这里尽量说的自己感觉易懂,仅仅展示重写模板的一些问题。

原文地址:http://nanqi.info/blog/2013/03/31/winform-wpf-3/

WinForm中的实现方案


代码几乎与那个筛选的Demo没有改变多少,唯一不同的是我发现其实不必自己去控制CheckedBox的选择(AutoCheck),同时也发现其实自己当时做的也没有错,因为如果当CheckedBox的CheckState属性为indeterminate时,想让再点一次让其选中,那么还必须我这么做(其实也从侧面反应,自己不止实现多余,而且做错了)。
我依旧使用CheckedListBox的ItemCheck事件,代码如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Winform中,要重绘表格控件,可以使用以下方法: 1. 首先,确定要重绘的表格控件,可以是DataGridView或ListView等任何支持表格展示的控件。 2. 创建一个继承自表格控件的自定义控件类,例如`CustomDataGridView`。 3. 在自定义控件类中,重写`OnPaint`方法。在方法中编写自定义的绘制逻辑,例如绘制行列的边框、绘制单元格的背景色等。 4. 在`OnPaint`方法中,可以使用`Graphics`类来进行绘制操作。可以使用`e.Graphics`获取当前绘图对象,并在该对象上进行绘画操作。 5. 在需要重绘表格的时候,调用自定义控件类的`Invalidate`方法,强制触发`OnPaint`方法进行重绘。 6. 如果需要在表格控件的事件中进行重绘,可以在事件处理程序中调用`Invalidate`方法。 例如,以下代码片段展示了一个简单的自定义DataGridView控件类: ```csharp public class CustomDataGridView : DataGridView { protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // 自定义绘制逻辑,例如绘制边框 Pen pen = new Pen(Color.Black); e.Graphics.DrawRectangle(pen, ClientRectangle); pen.Dispose(); } } ``` 然后,在使用表格控件的地方,可以使用自定义的控件类`CustomDataGridView`来代替原生的控件类,以实现重绘的效果。 需要注意的是,重绘表格控件会增加系统资源的使用,并可能影响界面的响应速度,因此应该避免过度的重绘操作。 ### 回答2: 在WinForms中,要重绘一个表格控件,可以按照以下步骤进行操作。 首先,需要创建一个继承自DataGridView的自定义控件。这个自定义控件将包含表格的所有定制逻辑。 然后,在自定义控件的构造函数中,可以设置表格的样式,如行高、列宽、表头等。 接着,可以重写OnPaint方法,以便在控件绘制时自定义绘制表格的内容。在OnPaint方法中,可以使用Graphics对象的方法绘制表格的背景、行、列、单元格内容等。 此外,还可以重写OnCellPainting方法,以便在每个单元格绘制时自定义绘制单元格的样式。在OnCellPainting方法中,可以使用Graphics对象的方法绘制单元格的边框、背景、内容等。 当需要更新表格的显示数据时,可以调用自定义控件的Refresh方法,强制重新绘制控件。在Refresh方法中,可以重新计算表格的行数、列数、内容等,然后调用自定义控件的Invalidate方法,使控件无效,从而触发重绘。 需要注意的是,在使用自定义控件时,需要将其添加到窗体或其他容器中,并设置好位置、大小等属性,才能正确显示和重绘表格。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值