根据提供的文件信息,我们可以分析出该段代码是用于实现一个特定功能:即在.NET框架下创建一个自定义的DataGridView列,专门用来展示货币类型的数值。接下来,我们将详细解析这一功能的具体实现过程及其背后的设计思想。 ### 一、自定义DataGridViewCurrencyColumn类 此部分主要介绍`DataGridViewCurrencyColumn`类的实现细节,它继承自`DataGridViewColumn`,并实现了对货币类型数据的显示和格式化。 #### 实现细节 1. **构造函数**:通过调用基类的构造函数,并传入一个新的`DataGridViewCurrencyCell`实例来初始化`DataGridViewCurrencyColumn`对象。这表明此类中的每个单元格都是由`DataGridViewCurrencyCell`负责管理的。 ```vbnet Public Sub New() MyBase.New(New DataGridViewCurrencyCell()) Resizable = DataGridViewTriState.False Width = 120 End Sub ``` 2. **属性Resizable**:此属性被设置为不可调整大小,以确保用户无法改变列宽,从而保持货币值的稳定显示格式。 ```vbnet Public NotOverridable Overrides Property Resizable() As DataGridViewTriState Get Return MyBase.Resizable End Get Set(value As DataGridViewTriState) MyBase.Resizable = value End Set End Property ``` ### 二、自定义DataGridViewCurrencyCell类 这部分详细介绍了`DataGridViewCurrencyCell`类,它是用于存储和显示货币数值的核心组件。 #### 实现细节 1. **ValueType属性**:此属性指定了单元格中存储的数据类型为`Decimal`,这是处理货币数值的理想选择,因为它可以精确地表示小数点后的数字。 ```vbnet Public Overrides ReadOnly Property ValueType() As Type Get Return GetType(Decimal) End Get End Property ``` 2. **Paint方法**:此方法重写了父类的Paint方法,用于自定义单元格的绘制逻辑。具体包括: - 背景颜色:根据当前单元格的状态(是否选中)来决定背景色。 - 边框绘制:如果`paintParts`包含`Border`部分,则绘制边框。 - 数值格式化:将货币数值转换为字符串形式,其中整数部分和小数部分分别进行处理。 - 整数部分:使用`Math.Truncate()`函数获取。 - 小数部分:通过乘以100取模运算得到。 ```vbnet Protected Overrides Sub Paint(graphics As Graphics, clipBounds As Rectangle, cellBounds As Rectangle, rowIndex As Integer, cellState As DataGridViewElementStates, value As Object, _ formattedValue As Object, errorText As String, cellStyle As DataGridViewCellStyle, advancedBorderStyle As DataGridViewAdvancedBorderStyle, paintParts As DataGridViewPaintParts) ' 背景颜色 Dim clr_background As Color = If((cellState And DataGridViewElementStates.Selected) <> DataGridViewElementStates.Selected, cellStyle.BackColor, cellStyle.SelectionBackColor) Using bru As Brush = New SolidBrush(clr_background) graphics.FillRectangle(bru, cellBounds) End Using ' 边框绘制 If (paintParts And DataGridViewPaintParts.Border) <> 0 Then PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle) End If ' 分隔线绘制 For i As Integer = 1 To 9 graphics.DrawLine(Pens.DarkCyan, cellBounds.Left + i * P_WIDTH, cellBounds.Top, cellBounds.Left + i * P_WIDTH, cellBounds.Bottom - 1) Next graphics.DrawLine(Pens.Red, cellBounds.Left + 10 * P_WIDTH, cellBounds.Top, cellBounds.Left + 10 * P_WIDTH, cellBounds.Bottom - 1) graphics.DrawLine(Pens.DarkCyan, cellBounds.Left + 11 * P_WIDTH, cellBounds.Top, cellBounds.Left + 11 * P_WIDTH, cellBounds.Bottom - 1) ' 数值格式化 If value Is Nothing Then Return End If Dim sf = New StringFormat With { _ .Alignment = StringAlignment.Center, _ .LineAlignment = StringAlignment.Center _ } Dim v As Decimal = Convert.ToDecimal(value) Dim s_intAsString = CInt(Math.Truncate(v)).ToString() ' 小数部分 Dim s_decAsString = (v * 100 Mod 100).ToString("00") Dim s_valueAsString = "$" & s_intAsString & "." & s_decAsString ' 绘制数值 graphics.DrawString(s_valueAsString, cellStyle.Font, Brushes.Black, cellBounds, sf) End Sub ``` 这段代码通过自定义`DataGridViewCurrencyColumn`和`DataGridViewCurrencyCell`类,实现了对货币类型数据的高效管理和格式化显示。这对于财务软件或其他需要精确展示货币数值的应用来说非常有用。
Public Class DataGridViewCurrencyColumn
Inherits DataGridViewColumn
Public Sub New()
MyBase.New(New DataGridViewCurrencyCell())
Resizable = DataGridViewTriState.[False]
'固定宽度
Width = 120
End Sub
Public NotOverridable Overrides Property Resizable() As DataGridViewTriState
Get
Return MyBase.Resizable
End Get
Set(value As DataGridViewTriState)
MyBase.Resizable = value
End Set
End Property
End Class
Public Class DataGridViewCurrencyCell
Inherits DataGridViewTextBoxCell
'每一位数字的宽度
Private Const P_WIDTH As Integer = 10
Public Overrides ReadOnly Property ValueType() As Type
Get
Return GetType(Decimal)
End Get
End Property
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于CNN的车牌号识别全部资料+详细文档+高分项目.zip
- 基于C++,使用BP神经网络识别手写字体全部资料+详细文档+高分项目.zip
- 基于CNN的验证码整体识别全部资料+详细文档+高分项目.zip
- 基于facenet的实时人脸识别系统全部资料+详细文档+高分项目.zip
- 基于dVector的说话人识别keras全部资料+详细文档+高分项目.zip
- 焊接预热和后热的理论基础及实际应用.pdf
- 焊接直边锥形壳体与筒体焊接结构工艺性试验.pdf
- 焊接质量对联箱水压泄漏的影响分析.pdf
- 焊接质量控制手册.pdf
- 焊接质量对搪玻璃设备搪烧工艺质量的影响分析.pdf
- 基于Google Tesseract-OCR 文字识别 仿小猿搜题、作业帮全部资料+详细文档+高分项目.zip
- 焊接质量控制系统.pdf
- 焊接质量与焊条使用.pdf
- 基于FPGA进行车牌识别全部资料+详细文档+高分项目.zip
- 合成氨一段炉旧管焊接.pdf
- 基于Java实现CNN,并附MNIST和语音(MFCC特征)性别识别示例。全部资料+详细文档+高分项目.zip