Foxtable(狐表)用户栏目专家坐堂 → [求助]窗口中PictureViewer的使用 4月11号 16楼有新问题,例子在9楼


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

主题:[求助]窗口中PictureViewer的使用 4月11号 16楼有新问题,例子在9楼

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/4/8 12:33:00 [只看该作者]

蓝老师,试了下代码,发现 新增按钮 中代码并不需要更改,只要把BeforeAddFile事件改了就行,执行结果是正确的
请问,您在“新增”加入的代码是目的是什么
另外,在BeforeAddFile事件增加的二行代码,原理是什么。
我准备把这个例子发到论坛上来让新手学习下,我要对每一行代码都加上注释

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/8 14:00:00 [只看该作者]

PictureViewer不指定ftp默认从Attachments取图片显示,如果指定ftp会从ftp下载文件到RemoteFiles,然后显示文件。

BeforeAddFile事件使用了e.cancel,所以添加的文件不会添加到单元格,要自己手工添加

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/4/8 14:48:00 [只看该作者]

可我在BeforeAddFile 事件中已经有了相关代码:
    Dim pv As WinForm.PictureViewer = e.Form.Controls("PictureViewer1")
    pv.FTPclient = ftp1
    pv.ManagerCommand.Visible = False '管理按钮
    pv.UpdateCommand.Visible = False '更新按钮
    pv.ConnectCommand.Visible = False '重连按钮

这样一来,是不是在窗口的“新增”中加入对FTP信息的指定是不是多余了,或者说,如果在“新增”中加入了对FTP的指定,在BeforeAddFile事件中就不用再写一次pv.FTPclient = ftp1了,是这么个情况吗?

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/8 15:44:00 [只看该作者]

理论上是不需要了。但是窗口刚打开时,并没有上传图片操作的时候,PictureViewer1就不会有这个设置,导致已加载数据的图片无法显示。所以这些设置应该放到表格fill加载数据之后。反过来应该可以去掉BeforeAddFile 事件的设置

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/4/8 16:12:00 [只看该作者]

对,是这个道理

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/4/11 15:54:00 [只看该作者]

蓝老师,这个例子中又发现个问题
触发的过程如下:
新增图片A与B
删除图片A
再新增图片C
此时,PictureViewer中,会有图片A,B,C,但是A是无法预览状态,当然,此时删除A就会报错,因为服务器上实际已经没有A了

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/11 15:56:00 [只看该作者]

同样的道理。说明删除图片的时候,没有从单元格去掉这个图片的名称

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/4/11 16:06:00 [只看该作者]

我有观察窗口中的table表,附件列是去掉相关名称的
但在增加图片C时,A又被自动增加上到附件列
[此贴子已经被作者于2020/4/11 16:07:14编辑过]

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/11 16:40:00 [只看该作者]

A文件没有从ftp里删除掉。应该路径不对,删除BeforeDeleteFile事件这一句【ftp1.RootDir = "/上下游公司名录附件" '设置根目录】

单元格文件名应该已经包含了"/上下游公司名录附件"

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/4/11 16:49:00 [只看该作者]

在实际的项目中,我已经改过代码了,代码如下,请老师看下:
增加:
e.Cancel = True
Dim dlg As New openFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "图形文件|*.bmp;*.jpg;*.gif;*.png" '设置筛选器
dlg.MultiSelect = True
If dlg.showDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim lb As WinForm.Label = e.Form.Controls("Label_代码")
    Dim dr As DataRow
    dr = DataTables("公司名录维护新增模式窗口_Table1").SQLFind("代码 = '" & lb.Text & "'")
    Dim pv As WinForm.PictureViewer = e.Form.Controls("PictureViewer1")
    pv.FTPclient = _ftp公司名录附件
    'pv.AddCommand.Visible = False
    'pv.DeleteCommand.Visible = False
    'pv.ClearCommand.Visible = False
    pv.ManagerCommand.Visible = False
    pv.UpdateCommand.Visible = False
    pv.ConnectCommand.Visible = False
    If dr IsNot Nothing Then '如果找到的话  
        Dim ls = dr.Lines("附件")
        For Each f As String In dlg.FileNames
            Dim file = "/公司名录附件/" & dr("公司") & "/" & filesys.GetName(f)
            If _ftp公司名录附件.DirExists("/公司名录附件/" & dr("公司")) = False Then
                _ftp公司名录附件.MakeDir("/公司名录附件/" & dr("公司")) '此处不可删除"/公司名录附件/",要不然会直接在RemoteFiles目录下生成公司名目录
                'Dim file = dr("公司") & "/" & filesys.GetName(f)
                'If _ftp公司名录附件.DirExists(dr("公司")) = False Then
                '    _ftp公司名录附件.MakeDir(dr("公司"))
            End If
            Dim Result As DialogResult
            If _ftp公司名录附件.FileExists(file) Then
                Result = MessageBox.Show("文件已经存在,是否覆盖?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            End If
            If result = Nothing OrElse result = DialogResult.Yes Then
                If  _ftp公司名录附件.Upload(f,file,True) = True Then
                    If ls.contains(file) = False Then
                        ls.add(file)
                        pv.AddFile(file)
                    End If
                Else
                    MessageBox.Show( f & "上传失败" ,"提示" ,MessageBoxButtons.OK,MessageBoxIcon.Question)
                End If
            End If
        Next
        dr.lines("附件") = ls
        e.DataRow.lines("附件") = ls
        e.DataTable.AcceptChanges
        dr.Save
        _ftp公司名录附件.Close
    Else
        MessageBox.Show("增加附件失败,请与管理员联系","意外错误!",MessageBoxButtons.OK,MessageBoxIcon.Error)
    End If
End If

删除:
If e.DataCol.name = "附件" Then
    Dim Result As DialogResult
    Result = MessageBox.Show("确定要删除文件【" & e.FileName & "】?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
        'e.DataCol.FTPClient.DeleteFile(e.FileName) '如果是用表格上的窗口管理器,则用此行代码,下面的不需要,因为设置扩展属性时设定了FTP的相关信息
        Dim lb As WinForm.Label = e.Form.Controls("Label_代码")
        Dim dr As DataRow
        dr = DataTables("公司名录维护新增模式窗口_Table1").SQLFind("代码 = '" & lb.Text & "'")
        If dr IsNot Nothing Then '如果找到的话
            _ftp公司名录附件.DeleteFile(e.FileName)
            FileSys.DeleteFile(ProjectPath & "RemoteFiles\" & e.FileName.Replace("/","\"))  '同步删除本机上的文件
            Dim fls As List(of String)
            fls = _ftp公司名录附件.GetFileList(dr("公司")) '返回此FTP目录下的文件数
            If fls.Count = 0 Then
                _ftp公司名录附件.DeleteDir(dr("公司"),True)  '直接删除此目录及下面的所有文件
                FileSys.DeleteDirectory(ProjectPath & "RemoteFiles" & _ftp公司名录附件.RootDir.Replace("/","\")  & dr("公司"),2,2)  '删除本机的目录
            End If
            dr.Save
            _ftp公司名录附件.Close
        End If
    Else
        e.Cancel = True
    End If
End If

FTP的代码如下:
_ftp公司名录附件.host=""
_ftp公司名录附件.port = ""
_ftp公司名录附件.Account = ""
_ftp公司名录附件.password = ""
_ftp公司名录附件.RootDir = "/公司名录附件" '设置根目录

 回到顶部
总数 25 上一页 1 2 3 下一页