请问这段代码的意思是什么?是点击spread中的复选框触发的事件。能否解释一下?

C罗子 2016-11-11 08:13:45
请问这段代码的意思是什么?是点击spread中的复选框触发的事件。能否解释一下这段代码主要是在点击复选框后做了什么事情??
其中checkbox_obj是spread中的复选框,date1,date2都是日期字段,但是date2这一列的值是空,这句代码: m_rs.Fields("date2").Value = Format$(DateAdd("d", Dtype, m_rs.Fields("date1").Value), "yyyy/mm/dd")是什么意思呢?DateAdd是把date1加了第11列的值(日加了第11列)赋给了date2吗?
If .Value <> "checkbox_obj"是什么意思?
If .Value <> 2 Then 又是什么意思?

再有就是 .Row = Row以及 .Col = Col,这个 ".Row"和".Col"指得是什么?是当前被鼠标选中的复选框所在的行和列吗?
Private Sub sprdMain_Click(ByVal Col As Long, ByVal Row As Long)
Dim Value As Variant
Dim Dtype As Integer

On Error GoTo Err_Handler

If Col = 6 Then
With sprdMain

If Row = 0 Then
Exit Sub
End If

If Row = -1 Then
Exit Sub
End If

.Row = Row

.Col = 11
Dtype = .Text

.Col = Col
If .Value <> "checkbox_obj" Then
If .Value <> 2 Then
If .Value = 0 Then
.Value = 1
m_rs.Fields("checkbox_obj").Value = 1
m_rs.Fields("date2").Value = Format$(DateAdd("d", Dtype, m_rs.Fields("date1").Value), "yyyy/mm/dd")
m_rs.Update
.Col = 7
.Lock = False
.BackColor = vbWhite
.BackColorStyle = BackColorStyleUnderGrid
Else
.Value = 0
m_rs.Fields("checkbox_obj").Value = 0
m_rs.Fields("data2").Value = Null
m_rs.Update
.Col = 7
.Lock = True
.BackColor = &HC0FFFF
.BackColorStyle = BackColorStyleUnderGrid
End If
End If
End If
End With
Else
End If
Exit Sub
Err_Handler:
Call ShowError(Err.Number, TypeName(Me) & "::sprdMain_Click", Err.Description)
End Sub 'sprdMain_Click

效果图如下图所示:
页面刚加载时:

点击了一个复选框后:
...全文
289 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-11
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试是程序员必须掌握的技能之一。 注释掉所有On Error Resume Next语句,在VB6 IDE中运行,出错后点击调试,光标会停在出错的那条语句处,此时可以在立即窗口中使用 ?变量名 或 ?函数名(函数参数) 或 过程名(参数) 辅助调试。
赵4老师 2016-11-11
  • 打赏
  • 举报
回复
C罗子 2016-11-11
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
这段代码的大致解释
Option Explicit

Private Sub sprdMain_Click(ByVal Col As Long, ByVal Row As Long)
Dim Value As Variant
Dim Dtype As Integer

On Error GoTo Err_Handler

    If Col = 6 Then '只处理第6列(应该是CheckBox列吧)的点击'
        With sprdMain
      
            If Row = 0 Then
                Exit Sub
            End If
            
            If Row = -1 Then
                Exit Sub
            End If
        
            .Row = Row '访问点击的行'
            
            .Col = 11 '取该行第11列的显示文本赋值给Dtype(String隐式转换为Integer)'
            Dtype = .Text
          
            .Col = Col
            If .Value <> "checkbox_obj" Then '这两个判断看不出用处,CheckBox的取值应该只有0/1'
                If .Value <> 2 Then
                    If .Value = 0 Then
                        .Value = 1 '点击后CheckBox从未选中变成选中'
                        m_rs.Fields("checkbox_obj").Value = 1
                        '两个函数:DateAdd 把字段 date1 加 Dtype 天,Format$ 把结果日期格式化为文本。'
                        '如果 data1 的值不带时分秒,并且 data2 是日期类型,Format$ 函数是不必要的。'
                        m_rs.Fields("date2").Value = Format$(DateAdd("d", Dtype, m_rs.Fields("date1").Value), "yyyy/mm/dd")
                        m_rs.Update
                        .Col = 7
                        .Lock = False
                        .BackColor = vbWhite
                        .BackColorStyle = BackColorStyleUnderGrid
                    Else
                        .Value = 0 '点击后CheckBox从选中变成未选中'
                        m_rs.Fields("checkbox_obj").Value = 0
                        m_rs.Fields("data2").Value = Null
                        m_rs.Update
                        .Col = 7
                        .Lock = True
                        .BackColor = &HC0FFFF
                        .BackColorStyle = BackColorStyleUnderGrid
                    End If
                End If
            End If
        End With
    Else
    End If
    Exit Sub
Err_Handler:
    Call ShowError(Err.Number, TypeName(Me) & "::sprdMain_Click", Err.Description)
End Sub 'sprdMain_Click
感谢您!
Tiger_Zhao 2016-11-11
  • 打赏
  • 举报
回复
这段代码的大致解释
Option Explicit

Private Sub sprdMain_Click(ByVal Col As Long, ByVal Row As Long)
Dim Value As Variant
Dim Dtype As Integer

On Error GoTo Err_Handler

    If Col = 6 Then '只处理第6列(应该是CheckBox列吧)的点击'
        With sprdMain
      
            If Row = 0 Then
                Exit Sub
            End If
            
            If Row = -1 Then
                Exit Sub
            End If
        
            .Row = Row '访问点击的行'
            
            .Col = 11 '取该行第11列的显示文本赋值给Dtype(String隐式转换为Integer)'
            Dtype = .Text
          
            .Col = Col
            If .Value <> "checkbox_obj" Then '这两个判断看不出用处,CheckBox的取值应该只有0/1'
                If .Value <> 2 Then
                    If .Value = 0 Then
                        .Value = 1 '点击后CheckBox从未选中变成选中'
                        m_rs.Fields("checkbox_obj").Value = 1
                        '两个函数:DateAdd 把字段 date1 加 Dtype 天,Format$ 把结果日期格式化为文本。'
                        '如果 data1 的值不带时分秒,并且 data2 是日期类型,Format$ 函数是不必要的。'
                        m_rs.Fields("date2").Value = Format$(DateAdd("d", Dtype, m_rs.Fields("date1").Value), "yyyy/mm/dd")
                        m_rs.Update
                        .Col = 7
                        .Lock = False
                        .BackColor = vbWhite
                        .BackColorStyle = BackColorStyleUnderGrid
                    Else
                        .Value = 0 '点击后CheckBox从选中变成未选中'
                        m_rs.Fields("checkbox_obj").Value = 0
                        m_rs.Fields("data2").Value = Null
                        m_rs.Update
                        .Col = 7
                        .Lock = True
                        .BackColor = &HC0FFFF
                        .BackColorStyle = BackColorStyleUnderGrid
                    End If
                End If
            End If
        End With
    Else
    End If
    Exit Sub
Err_Handler:
    Call ShowError(Err.Number, TypeName(Me) & "::sprdMain_Click", Err.Description)
End Sub 'sprdMain_Click
Tiger_Zhao 2016-11-11
  • 打赏
  • 举报
回复
引用 2 楼 xianying7509 的回复:
请问If .Value <> "checkbox_obj" Then If .Value <> 2 Then If .Value = 0 Then .Value = 1 这个.Value指得是谁的值?
FPSpread 控件属于精简设计,不像 Excel 一样通过 .Cells(row,col) 获取特定单元对象,然后通过单元对象来访问单元的 Value、Text。 它只有控件自己这个对象,要先设定 Row、Col 属性来指定当前要操作的单元,之后的 Value、Text 就是该单元的属性了。
C罗子 2016-11-11
  • 打赏
  • 举报
回复
引用 3 楼 of123 的回复:
[quote=引用 2 楼 xianying7509 的回复:] [quote=引用 1 楼 Topc008 的回复:] 那个sprdMain应该是一个类似于listview的控件吧,你看看那个控件的属性界面...... 这段代码的作用无非就是保存复选框的状态到数据库里......... DateAdd是日期增减计算函数,是一个内部函数,你查查相关的说明.......
请问If .Value <> "checkbox_obj" Then If .Value <> 2 Then If .Value = 0 Then .Value = 1 这个.Value指得是谁的值?[/quote] 最近 With 了谁,就是谁。[/quote] 您好,最近With的是 sprdMain,这是个spread对象,If .Value <> "checkbox_obj" Then就等价于If sprdMain.Value <> "checkbox_obj" Then吗? 那么再下面一句If .Value <> 2 Then是等价于If sprdMain.Value <> 2 Then吗?如果是等价于If sprdMain.Value <> 2 Then那么我感觉应该不对,因为sprdMain.Value 都是列名啊,不能出现2这种整型啊,请问 If .Value <> 2 Then中的.Value是spread的value还是spread下的某个列的value还是别的什么东西?
of123 2016-11-11
  • 打赏
  • 举报
回复
引用 2 楼 xianying7509 的回复:
[quote=引用 1 楼 Topc008 的回复:] 那个sprdMain应该是一个类似于listview的控件吧,你看看那个控件的属性界面...... 这段代码的作用无非就是保存复选框的状态到数据库里......... DateAdd是日期增减计算函数,是一个内部函数,你查查相关的说明.......
请问If .Value <> "checkbox_obj" Then If .Value <> 2 Then If .Value = 0 Then .Value = 1 这个.Value指得是谁的值?[/quote] 最近 With 了谁,就是谁。
C罗子 2016-11-11
  • 打赏
  • 举报
回复
引用 1 楼 Topc008 的回复:
那个sprdMain应该是一个类似于listview的控件吧,你看看那个控件的属性界面...... 这段代码的作用无非就是保存复选框的状态到数据库里......... DateAdd是日期增减计算函数,是一个内部函数,你查查相关的说明.......
请问If .Value <> "checkbox_obj" Then If .Value <> 2 Then If .Value = 0 Then .Value = 1 这个.Value指得是谁的值?
一如既往哈 2016-11-11
  • 打赏
  • 举报
回复
那个sprdMain应该是一个类似于listview的控件吧,你看看那个控件的属性界面...... 这段代码的作用无非就是保存复选框的状态到数据库里......... DateAdd是日期增减计算函数,是一个内部函数,你查查相关的说明.......

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧