指定网格值 VB.NET 的值范围

Posted

技术标签:

【中文标题】指定网格值 VB.NET 的值范围【英文标题】:Specifying Value Range for Grid Value VB.NET 【发布时间】:2022-01-04 12:45:01 【问题描述】:

如何避免收到此警告?如果警告和代码保持如下,软件会抛出运行时错误吗?编写此代码的更好方法是什么?由于我不能对网格值使用最小值和最大值,因此我只能使用 .Value ,因此我编写了以下代码。

Select Case CSng(dgv_config.Item(dgv_config.Columns("p").Index, rowindex).Value)
                        
Case 1 To 150

#Disable Warning BC42019 ' Operands of type Object used for operator
                            If dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value > 400 Then
#Enable Warning BC42019 ' Operands of type Object used for operator
                                dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value = 400
                            End If
#Disable Warning BC42019 ' Operands of type Object used for operator
                            If dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value < 50 Then
#Enable Warning BC42019 ' Operands of type Object used for operator
                                dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value = 50
                            End If
End Select

【问题讨论】:

好吧,我猜 Option strict 现在已关闭,我建议在继续之前将其打开(它应该几乎总是打开,很多指南已经解释了该过程)。实际问题虽然,它确实为您解释了它。 dgv 中的值是 object 类型,您将其与数字类型进行比较。简单的答案是将 dvg 值的结果类型转换为适当的类型 【参考方案1】:

Hursey 的评论是正确的,类型转换会删除警告。

为了解释,我将重写你的一些代码以使其更清晰,从这里...

If dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value > 400 Then
    dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value = 400
End If

...到这个:

Dim columnIndex As Integer = dgv_config.Columns("tsamp").Index
Dim cellValue As Object = dgv_config.Item(columnIndex, rowindex).Value

If cellValue > 400 Then
    dgv_config.Item(columnIndex, rowindex).Value = 400
End If

注意cellValue 的类型是Object。那是因为DataGridViewCell.Value 属性返回一个对象。这样做的原因是因为单元格中可以有不同类型的内容,例如字符串或整数。您的列将包含一个整数,但编译器不知道这一点。

在我的 Visual Studio 中,上面的代码 sn-ps 显示了您遇到的警告:BC42019: Operands of type Object used for operator '&lt;'; runtime errors could occur.

为了消除警告,我们添加了一个类型转换,例如 Cint():If CInt(dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value) &gt; 400 Then

或者用Integer.Parse()告诉编译器我们需要一个整数的另一种方式。If Integer.Parse(dgv_config.Item(dgv_config.Columns("tsamp").Index, rowindex).Value) &gt; 400 Then

顺便说一句,在我启用“后期绑定”之前,我的 Visual Studio 中不会出现警告;项目设置 - 编译页面上的运行时警告配置调用可能会失败。

【讨论】:

以上是关于指定网格值 VB.NET 的值范围的主要内容,如果未能解决你的问题,请参考以下文章

日期时间范围 vb.net for 循环

使用 VB.Net 将 excel 中的特定列值导出到数据网格

Python matplotlib更改超出颜色条范围的值的默认颜色

将栅格中的值检索到具有不同范围和分辨率的另一个栅格中

在 SQL Server 中为指定的值范围填充前导零的字符串

获取给定范围与最后一个值 = 0 之间的值