Foxtable(狐表)用户栏目专家坐堂 → [求助]内置的文件管理器到底应该怎么用?


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

主题:[求助]内置的文件管理器到底应该怎么用?

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[求助]内置的文件管理器到底应该怎么用?  发帖心情 Post By:2016/3/23 18:14:00 [只看该作者]

    假设“附件”列为多文件列:
    1、考虑到任意一个系统都不会只是纯外网或内网使用,所以,经过测试,发现“附件”列属性中关于远程文件、服务器地址、用户名、用户密码、UTF8、根目录等设置都是多余的,最终还是需要用代码进行设置,但帮助文档对此并没有进行系统、完整的讲解,而是一些支离破碎的内容,甚至也没有告知这些应该在哪个项目事件或哪个表事件设置,导致初学者浪费很多时间去反复调试。
    由此联想到帮助文档中关于系统升级的属性设置部分也没有考虑到外网和内网共用的情况。
    建议狐爸提供一套完整的、使用并控制内置文件管理器进行FTP管理的代码。
    2、到底哪一个是帮助文档中说的内置文件管理器?——“附件”列实际上有两个窗口,一个是标题为“附件”的窗口,这个窗口的按钮按照帮助文档是可以控制的,即addcommand.enabled等属性设置是有效的;另一个窗口是标题为“文件管理器”的窗口,上述属性设置对这个窗口是无效的,也可能是我不知道怎么引用并控制这个窗口。这时候会出现下述的漏洞,甚至可以说是悲剧。另外,帮助文档在“窗口设计”一章中提到了“filemanager1”控件。整个帮助是将3种窗口混在一起讲的吗?比如:

    独立设置各命令

    FileManager提供了以下属性,用于返回底端的各命令:

    AddCommand :增加
    AddFolderCommand:目录
    DeleteCommand:删除
    ClearCommand:清除
    OpenCommand:打开
    ManagerCommand:管理
    SaveAsCommand:另存
    ConnectCommand:重连

    命令的属性有:

    Enabled:  逻辑型,用于设置命令是否可用。
    Visible:  逻辑型,用于设置命令是否可见。
    Text:   字符型,用于设置命令标题。
    BackColor:Color类型,用于设置命令的背景颜色。
    ForeColor:Color类型:用于设置命令的字体颜色。

    示例

    希望隐藏文件管理器中的删除和清除两个命令:

    Dim fm As WinForm.FileManager = e.Form.Controls("FileManager1")
    fm.DeleteCommand.Visible = False
    fm.ClearCommand.
Visible = False

    示例之前应该适用于所有窗口,而示例的dim语句说明该示例只适用于自定义窗口,而下面的代码应该紧跟在上述代码之后进一步讨论这8个命令的属性设置方法,而不应该另立一节,以说明适用于标题为“附件”的内置文件管理器:

    设置内置的文件管理器

    我们知道,如果将某列的扩展列类型设置为多文件型,默认会自动打开一个文件管理器,可以通过Col的FileManager属性获得此文件管理器,进行细节设置。

    示例

    假定员工表的附件列是一个多文件型,我们可以通过下面的代码打开此列的文件管理器,并禁用其文件管理器的“删除”和“清除”两个命令:

    Tables("员工").Cols("附件").OpenWindow()
    Dim fl As WinForm.FileManager = Tables("员工").Cols("附件").FileManager
    fl.DeleteCommand.Enabled = False
    fl.ClearCommand.Enabled =
False

    问题是:标题为“文件管理器”的这个窗口该如何设置上述属性呢?

    而关于“远程文件”的属性设置代码竟然是在搜索“ftp”的时候发现的,且隐藏在附录中,真是太凌乱了:

        DataTables("合同").DataCols("文档").ExtendType = ExtendTypeEnum.FILES
        DataTables("
合同").DataCols("文档").Remote = True
        DataTables("
合同").DataCols("文档").FTPClient.Host ="192.168.1.202"
        DataTables("
合同").DataCols("文档").FTPClient.Account = "foxtable"
        DataTables("
合同").DataCols("文档").FTPClient.password = "foxtable"

    “使用指南”中属性设置的代码形式真是介绍的太少了。
    3、“附件”列会自动出现“..."按钮,任何人都可以点此按钮进入“文件管理器”界面进行“增加”操作,这是漏洞,如果多人恶意增加文件会导致服务器的指定文件夹爆满,从而影响其他人的正常上传,而且看不出是谁干的坏事,除非增加包含用户名的文件夹予以专用(这也不失为一种好办法),但真正的权限控制问题并没有解决。
    4、我有一个技术文件的“审查管理”表,只允许当前行的"项目经理"(列名)或文件的"编写设计"(列名)者才能点击“增加”按钮上传需要审查的文件(先不谈搞破坏,至少不让别人做无用功),但现在不知道到底该怎么对“文件管理器”(窗口名)中的“增加”按钮进行权限控制,自然也就解决最可怕的“管理”按钮的控制了。
    5、另外,如果一个系统中存在多个多文件列,又该如何优化设置呢?
    我已经折腾了很久,但仍是不得要领,希望广大高手赐教。在此先谢过了。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/23 18:32:00 [只看该作者]

 内置的肯定有诸多限制,你可以动态限制一下

 

下载信息  [文件大小:312.0 KB  下载次数:7]
图片点击可在新窗口打开查看点击浏览该文件:动态修改foxtable窗口_例子.table

 

 当然,最好的,还是自己做一个......


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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2016/3/23 22:09:00 [只看该作者]

看来只能在文件夹方面动脑子了。谁上传的就都知道,除了开发者和管理者,不能进入别人的文件夹,自己的东西随便折腾吧。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/23 22:12:00 [只看该作者]

 方法一:控制好文件管理窗口的显示内容;

 

 方法二:每一个用户分配一个ftp用户,定义好每个用户的账号密码,登陆的时候,用代码设置存放目录那些信息,就能控制权限。


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


加好友 发短信
等级:六尾狐 帖子:1425 积分:11332 威望:0 精华:0 注册:2008/9/1 22:20:00
  发帖心情 Post By:2016/12/29 13:58:00 [只看该作者]

同问

[此贴子已经被作者于2016/12/29 13:59:00编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/29 14:27:00 [只看该作者]

以下是引用bahamute在2016/12/29 13:58:00的发言:
同问

[此贴子已经被作者于2016/12/29 13:59:00编辑过]

 

在timerTick事件加入下面的代码,然后去处理一下

 

Dim lbx As object = e.Form.Controls("FileManager1").basecontrol.Controls("SplitContainer1").panel1.Controls("ListBox1")
For i As Integer = 0 To lbx.Items.Count - 1
    lbx.items(i) = FileSys.GetName(lbx.items(i))
Next


 回到顶部