Foxtable(狐表)用户栏目专家坐堂 → [求助]自定义登录窗口及窗口控件权限


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

主题:[求助]自定义登录窗口及窗口控件权限

帅哥,在线噢!
lgj716330
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
[求助]自定义登录窗口及窗口控件权限  发帖心情 Post By:2022/1/8 9:43:00 [显示全部帖子]

在自定义登录窗口的确定按钮中写了以下代码来控制窗口控件的权限
For Each frm As WinForm.Form In Forms
For Each c As Winform.Control In frm.Controls
    c.Enabled = True
Next
Next
    For Each dr11 As DataRow In DataTables("窗口控件权限表").DataRows
        If dr11.IsNull("角色") = False Then
        Dim nms() As String = dr11("角色").Split(",")
        For Each nm As String In nms
            If nm.length>0 Then
                If _UserRoles.contains(nm) Then
                    For Each dr As DataRow In DataTables("窗口控件权限表").Select("角色 like '%" & nm & "%'")
                    If dr.isnull("控件名称")=False Then
                        Forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = Not dr("不可用")
                    End If
                    Next
                End If
            End If
        Next
        End If
    Next

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

登录的时候总提示以下错误

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



 回到顶部
帅哥,在线噢!
lgj716330
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/9 19:46:00 [显示全部帖子]

我改成了自定义函数,然后在相关窗口中引用,Functions.Execute("ckkj",e.Form)
Dim frm As WinForm.Form =args(0)
    For Each dr11 As DataRow In DataTables("窗口控件权限表").DataRows
        If dr11.IsNull("角色") = False Then
        Dim nms() As String = dr11("角色").Split(",")
        For Each nm As String In nms
            If nm.length>0 Then
                For Each dr As DataRow In DataTables("窗口控件权限表").Select("角色 like '%" & nm & "%'")
                    If _UserRoles.contains(nm) Then
                        If dr.Isnull("窗口名称")=False And dr.Isnull("控件名称")=False And dr("不可用") = True Then
                            forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = False
                        End If
                    End If
                Next
            End If
        Next
        End If
    Next
在显示自定义用户登录窗口之前提示下面的错误,但进入系统后权限控制是有效的

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


 回到顶部
帅哥,在线噢!
lgj716330
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/11 9:07:00 [显示全部帖子]

我直接在相关窗口的AfterLoad中写下面代码,发现当多个窗口中使用下面代码的时候,打开项目显示自定义用户登录窗口前也会出现上面的错误,只有一个窗口不会有错误提示
Dim nms() As String = _UserRoles.Split(",")
For Each nm As String In nms
    If nm.length>0 Then
        For Each c As object In e.form.controls
            Dim dr As DataRow
            dr = DataTables("窗口控件权限表").Find("角色 like '%" & nm & "%' and 窗口名称 = '" & e.Form.name & "' and 控件名称 = '" & c.name & "'")
            If dr IsNot Nothing Then
                forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = False
            End If
        Next
    End If
Next

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

[此贴子已经被作者于2022/1/11 9:12:42编辑过]

 回到顶部
帅哥,在线噢!
lgj716330
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/11 11:30:00 [显示全部帖子]

打开项目出现自定义用户登录窗口前会跳出以下窗口。我目前仅两个窗口在测试,然后第一个窗口会正常跳出msgbox信息,代码也是有效的,第二个窗口即下面显示的窗口2没有任何提示,代码是无效的。

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

[此贴子已经被作者于2022/1/11 11:33:54编辑过]

 回到顶部
帅哥,在线噢!
lgj716330
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/11 11:43:00 [显示全部帖子]

不自动打开是不会有跳出错误提示,但在项目中点击应用窗口时也是会跳出错误提示。偿试了在没用自定义用户登录的项目中是没有问题的
[此贴子已经被作者于2022/1/11 11:44:01编辑过]

 回到顶部
帅哥,在线噢!
lgj716330
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/11 12:15:00 [显示全部帖子]

Dim nms() As String = _UserRoles.Split(",")
For Each nm As String In nms
    If nm.length>0 Then
把前面的角色判断去掉,按下面这样是正常的

For Each c As object In e.form.controls
            Dim dr As DataRow
            dr = DataTables("窗口控件权限表").Find("窗口名称 = '窗口2' And 控件名称 = '" & c.name & "'")
            If dr IsNot Nothing Then
                forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = False
            End If
        Next

 回到顶部
帅哥,在线噢!
lgj716330
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/11 19:59:00 [显示全部帖子]

改成了以下代码,不会出现错误提示,但打开项目后,代码对第二个窗口无效,然后又做了一个按钮将代码放里面,点击下按钮,第二个窗口就有效了。想不明白
Dim ur As String = "'" & _UserRoles & "'"
For Each c As object In e.form.controls
    Dim dr As DataRow
    dr = DataTables("窗口控件权限表").Find("窗口名称 = '窗口2' And 控件名称 = '" & c.name & "'")
    If dr IsNot Nothing Then
        Dim nms() As String = dr("角色").Split(",")
        For Each nm As String In nms
            If ur Like "'*" & nm & "*'" Then
                forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = False
            End If
        Next
    End If
Next


 回到顶部
帅哥,在线噢!
lgj716330
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/13 21:40:00 [显示全部帖子]




[此贴子已经被作者于2022/1/13 21:41:26编辑过]

 回到顶部