Foxtable(狐表)用户栏目专家坐堂 → 老师,我做的日历报错


  共有4389人关注过本帖树形打印复制链接

主题:老师,我做的日历报错

帅哥哟,离线,有人找我吗?
cd_tdh
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
老师,我做的日历报错  发帖心情 Post By:2020/12/18 13:26:00 [显示全部帖子]

老师,我做的日历窗口,都是用的外部用户管理,用管理员登录就不报错,用其他用户登录就会报下面的错,日历窗口AfterLoad代码如下:

_my日历 = New 自定义日历
_my日历.Panel绑定(e.Form.Controls("Panel1"))        '该句代码有问题,但是用管理员登录又不会报错,发布前发布后都是这种情况
周历开个 = 0
周 = -10000
Dim MyDate1 As Date = _my日历.日期
e.Form.Controls("L_当前年月").text = MyDate1.Year & "年" & MyDate1.Month & "月"
_my日历.日期 = MyDate1
_my日历.刷新

 

 

全局代码绑定到panel是这样写的:

'为了方便应用,直接将控件绑定到传入的Panel控件
Public Sub Panel绑定(ByVal pl As Foxtable.WinForm.Panel)

 

 

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.11.3.1
错误所在事件:窗口,日历,AfterLoad
详细错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: index

[此贴子已经被作者于2020/12/18 13:30:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/18 14:04:00 [显示全部帖子]

全局代码中完整代码:


 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/18 14:07:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:日历全局代码.txt


 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/18 14:30:00 [显示全部帖子]

现在就是用管理员登录没问题,用其他账号登录就报错,发布前发不后都是这个问题
我在调试一下全局代码吧

 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/18 16:57:00 [显示全部帖子]

老师,全局代码中这样调试不行呢?

窗口中的代码就是第二句就报错

_my日历 = New 自定义日历
_my日历.Panel绑定(e.Form.Controls("Panel1"))        '该句代码有问题,但是用管理员登录又不会报错,发布前发布后都是这种情况
周历开个 = 0
周 = -10000
Dim MyDate1 As Date = _my日历.日期
e.Form.Controls("L_当前年月").text = MyDate1.Year & "年" & MyDate1.Month & "月"
_my日历.日期 = MyDate1
_my日历.刷新


 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/18 17:24:00 [显示全部帖子]

4出来了,5不出来


 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/19 17:50:00 [显示全部帖子]

还是没找到问题所在,请老师看看,我用部门:管理员,账号gly登录没问题,用其他部门账号登录就会有问题,发布前,发不够都一样。

 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/22 9:25:00 [显示全部帖子]

老师,这一段代码有问题,1、2出来了,3不出来?

'数据表刷新方法
Public Sub 数据刷新()
Dim Filter As String = n事务时间 & ">='" & _表首 & "' and " & n事务时间 & "<='" & _表尾 & "' and " & n姓名 & "='" & _UserXingMing & "' or " & n公开部门 & "='" & _UserGroup & "'"       'SQL Server数据源
If 事务主表_dt.SourceType = 2 Then   'SQL Server数据源
    Filter = n事务时间 & ">='" & _表首 & "' and " & n事务时间 & "<='" & _表尾 & "' and " & n姓名 & "='" & _UserXingMing & "' or " & n公开部门 & "='" & _UserGroup & "'"
End If
msgbox(1)
事务主表_dt.LoadFilter = Filter
事务主表_dt.LoadTop = "5000"         '2020.02.04 这里是代码修改的部分(如果不添加此代码, 你查看自己的事务日历永远只有10条记录,5000代表可加载5000条记录)
事务主表_dt.LoadOrder = n事务时间
事务主表_dt.Load()
msgbox(2)
End Sub

 

Public Sub 当前表数据刷新()
msgbox(3)
Dim Filter As String = n事务时间 & ">='" & _表首 & "' and " & n事务时间 & "<='" & _表尾 & "' and " & n姓名 & "='" & _UserXingMing & "' or " & n事务对象 & "='" & _UserXingMing & "' or " & n公开部门 & "='" & _UserGroup & "'"       'SQL Server数据源
If 事务主表_dt.SourceType = 2 Then 'SQL Server数据源
Filter = n事务时间 & ">='" & _表首 & "' and " & n事务时间 & "<='" & _表尾 & "' and " & n姓名 & "='" & _UserXingMing & "' or " & n事务对象 & "='" & _UserXingMing & "' or " & n公开部门 & "='" & _UserGroup & "'"
End If
msgbox(4)

'*****************************************新增查询条件1********************************
Dim Filter1 As String = ""
Dim lx As Integer
Select Case Forms("日历").Controls("事务类型").Text
    Case "会议"
        lx = 1
    Case "商务"
        lx = 2
    Case "法务"
        lx = 3
    Case "私人"
        lx = 4
End Select
Filter1 = IIF(lx = 0,filter,"事务类型 = " & lx & " And " & filter)
msgbox(5)
'*****************************************新增查询条件2(逻辑列)********************************
Dim Filter2 As String = ""
Dim lc As Integer = -1
Select Case Forms("日历").Controls("日程状态").Text '确定还是使用"事务类型"的内容做判断?
    Case "已完成"
        lc = 1 '这个列到底是逻辑列还是整数列?上面定义的是整数,这里赋值逻辑值?
    Case "未完成"
        lc = 0
End Select
Filter2 = IIF(lc = -1,filter1,"终止 = " & lc & " And " & filter1)
'''
事务主表_dt.LoadFilter = Filter2
事务主表_dt.LoadTop = "5000"    '表示可以查看5000条事务
事务主表_dt.LoadOrder = n事务时间
事务主表_dt.Load()
msgbox(6)
End Sub

用管理员登录时,不报错,是因为:用户部门(_UserGroup ),姓名(_UserXingMing )都是:管理员,但是其他账号登录时,部门和姓名不一样。

[此贴子已经被作者于2020/12/22 9:28:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/22 10:30:00 [显示全部帖子]

主要是我用管理员登录又没有报错啊?

 

报错后也能打开,只是没刷新,如下图:

 


图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看

 

正常的应该如下:

 


图片点击可在新窗口打开查看此主题相关图片如下:222.png
图片点击可在新窗口打开查看

问题好像不出在前面,还在后面,下面这段代码,14、19、21出来,后报错,用管理员登录不报错,调试代码出来正确顺序是:14、19、21、22、23、26然后循环

Dim n_行数 As Integer
Dim Left, Top, Width, Height As Integer
msgbox(14)
'循环字典
Dim a As 事务标签
For Each str In dc.Keys
' →→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→2020.02.04 这里是代码修改的部分开始
    d = (CDate(str) - _表首).Days   '和表首的日期差
    If  周历开个 =  0 Then '这里的周历开个其实是周历开关的意思, 我(李小胖)后期已经修改了
        r = (d \ 7) * 2 + 3             '取整数(行),跨行
    Else
    msgbox(15)
        If d >= 7 Then
    msgbox(16)
            Continue For
        Else
    msgbox(17)
            r = 3
        End If
    msgbox(18)
    End If
    c = (d Mod 7) + 1               '取列位置
    msgbox(19)
    If dc(str).Count > 4 Then
        n_行数 = 4
msgbox(20)
    Else
        n_行数 = dc(str).Count
    End If
msgbox(21)
    '→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→2020.02.04 这里是代码修改的部结束
    '获取单元格的坐标
    Left = Me.Cols(c).Left
    Width = Me.Cols(c).Right - Left
    Top = Me.Rows(r).Top
    Height = Me.Rows(r).Height - 2
msgbox(22)
    '获取表格空白可容纳的标签数量
    j = Height \ _事务标签_高度
    If dc(str).Count > j Then   '如果标签的数量单元格可容纳的标签数
msgbox(23)
        For i = 0 To j - 2
msgbox(24)
            a = New 事务标签
            a.SetData(dc(str)(i))
            a.Top = Top + _事务标签_高度 * i + 2
            a.Left = Left + 2
            a.Width = Width - 4
            a.Height = _事务标签_高度
            a.de = CDate(str)
            a.BringToFront()
            a.Visible = True
            Me.Controls.Add(a)
msgbox(25)
        Next

        a = New 事务标签
        a.SetData(Nothing)
        a.Top = Top + Height - _事务标签_高度 + 2
        a.Left = Left + 2
        a.Width = Width - 4
        a.Height = _事务标签_高度
        a.de = CDate(str)
        a.BringToFront()
        a.Visible = True
        Me.Controls.Add(a)
msgbox(26)
    Else
msgbox(27)
        i = 0
msgbox(28)
        For Each dr As Foxtable.DataRow In dc(str)
msgbox(29)
            a = New 事务标签
            a.SetData(dr)
            a.Top = Top + _事务标签_高度 * i + 2
            a.Left = Left + 2
            a.Width = Width - 4
            a.Height = _事务标签_高度
            a.de = CDate(str)
            a.BringToFront()
            a.Visible = True
            Me.Controls.Add(a)
            i += 1
        Next
msgbox(30)
    End If
Next
msgbox(31)
End Sub
End Class

[此贴子已经被作者于2020/12/22 10:44:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cd_tdh
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/12/22 10:45:00 [显示全部帖子]

问题好像不出在前面,还在后面,下面这段代码,14、19、21出来,后报错,用管理员登录不报错,调试代码出来正确顺序是:14、19、21、22、23、26然后循环

Dim n_行数 As Integer
Dim Left, Top, Width, Height As Integer
msgbox(14)
'循环字典
Dim a As 事务标签
For Each str In dc.Keys
' →→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→2020.02.04 这里是代码修改的部分开始
    d = (CDate(str) - _表首).Days   '和表首的日期差
    If  周历开个 =  0 Then '这里的周历开个其实是周历开关的意思, 我(李小胖)后期已经修改了
        r = (d \ 7) * 2 + 3             '取整数(行),跨行
    Else
    msgbox(15)
        If d >= 7 Then
    msgbox(16)
            Continue For
        Else
    msgbox(17)
            r = 3
        End If
    msgbox(18)
    End If
    c = (d Mod 7) + 1               '取列位置
    msgbox(19)
    If dc(str).Count > 4 Then
        n_行数 = 4
msgbox(20)
    Else
        n_行数 = dc(str).Count
    End If
msgbox(21)
    '→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→2020.02.04 这里是代码修改的部结束
    '获取单元格的坐标
    Left = Me.Cols(c).Left
    Width = Me.Cols(c).Right - Left
    Top = Me.Rows(r).Top
    Height = Me.Rows(r).Height - 2
msgbox(22)
    '获取表格空白可容纳的标签数量
    j = Height \ _事务标签_高度
    If dc(str).Count > j Then   '如果标签的数量单元格可容纳的标签数
msgbox(23)
        For i = 0 To j - 2
msgbox(24)
            a = New 事务标签
            a.SetData(dc(str)(i))
            a.Top = Top + _事务标签_高度 * i + 2
            a.Left = Left + 2
            a.Width = Width - 4
            a.Height = _事务标签_高度
            a.de = CDate(str)
            a.BringToFront()
            a.Visible = True
            Me.Controls.Add(a)
msgbox(25)
        Next

        a = New 事务标签
        a.SetData(Nothing)
        a.Top = Top + Height - _事务标签_高度 + 2
        a.Left = Left + 2
        a.Width = Width - 4
        a.Height = _事务标签_高度
        a.de = CDate(str)
        a.BringToFront()
        a.Visible = True
        Me.Controls.Add(a)
msgbox(26)
    Else
msgbox(27)
        i = 0
msgbox(28)
        For Each dr As Foxtable.DataRow In dc(str)
msgbox(29)
            a = New 事务标签
            a.SetData(dr)
            a.Top = Top + _事务标签_高度 * i + 2
            a.Left = Left + 2
            a.Width = Width - 4
            a.Height = _事务标签_高度
            a.de = CDate(str)
            a.BringToFront()
            a.Visible = True
            Me.Controls.Add(a)
            i += 1
        Next
msgbox(30)
    End If
Next
msgbox(31)
End Sub
End Class


 回到顶部
总数 17 1 2 下一页