You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中For循环内If语句异常:同时输出目标值与0.00的解决方法

解决VB.NET For循环中If条件重复绘制的问题

我懂你遇到的麻烦了——现在你的代码在每一行循环时都会执行两个独立的If-Else块,这就导致了尴尬的情况:

  • 当遍历到"Admmission Fees"的行时,第一个If会绘制对应数值,但第二个If因为不匹配,会在Term Fees的位置画"0.00"
  • 当遍历到"Tearm Fees"的行时,第二个If会绘制对应数值,但第一个If又会在Admission Fees的位置画"0.00"
  • 最终两个位置会被多次覆盖,出现你看到的「同时显示对应值和0.00」的问题

正确的思路应该是:先把两个费用的默认值设为"0.00",遍历所有行找到对应的费用后更新变量,最后只统一绘制一次结果,而不是每一行都绘制一遍。

修改后的代码如下:

' 初始化两个费用的默认值为0.00
Dim admissionFee As String = "0.00"
Dim termFee As String = "0.00"

' 遍历所有行,匹配到对应费用就更新变量
For i As Integer = 0 To DataGridView1.Rows.Count - 1
    Dim cellValue As Object = DataGridView1.Rows(i).Cells(0).Value
    ' 先判断单元格值是否为空,避免空引用异常
    If cellValue IsNot Nothing Then
        Select Case cellValue.ToString().Trim()
            Case "Admmission Fees"
                ' 空值合并运算符确保单元格为空时仍显示0.00
                admissionFee = DataGridView1.Rows(i).Cells(2).Value?.ToString() ?? "0.00"
            Case "Tearm Fees"
                termFee = DataGridView1.Rows(i).Cells(2).Value?.ToString() ?? "0.00"
        End Select
    End If
Next

' 循环结束后统一绘制结果,每个位置只画一次
e.Graphics.DrawString(admissionFee, New Font("Arial", 10), Brushes.Black, New Point(250, 350))
e.Graphics.DrawString(termFee, New Font("Arial", 10), Brushes.Black, New Point(250, 375))

额外优化说明:

  • 用Select Case替代多个独立If,逻辑更清晰易维护
  • 添加了空值判断,避免运行时出现NullReferenceException
  • 统一在循环结束后绘制,彻底解决重复覆盖的问题
  • 用?.和??运算符处理单元格为空的边界情况,让代码更健壮

内容的提问来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:36:06