以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]窗口中PictureViewer的使用 4月11号 16楼有新问题,例子在9楼  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=148428)

--  作者:huangfanzi
--  发布时间:2020/4/7 22:30:00
--  [求助]窗口中PictureViewer的使用 4月11号 16楼有新问题,例子在9楼
就差最后一步了,老师帮我看下
我做了个例子,窗口中有一个table 一个PictureViewer,一个TextBox 有一个新增按钮 还有一个上传附件按钮
新增按钮代码:
Dim tb As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim dr As DataRow = _dt上下游公司名录.AddNew
dr("公司") = tb.Value
dr.Save
Dim t As Table = Tables(e.Form.Name & "_Table1")
t.Fill("S elect  * From {上下游公司名录} Where 公司 = \'" & tb.Value & "\'","ShcsErpSql",False)
t.AutoSizeCols()
Dim dt As DataTable = t.DataTable
dt.DataCols("附件").ExtendType = ExtendTypeEnum.Images
Dim pv As WinForm.PictureViewer = e.Form.Controls("PictureViewer1")
pv.BindingField = t.Name & ".附件"
t.AllowEdit = True

上传附件按钮代码:
Dim dlg As New openFileDialog \'定义一个新的SaveFileDialog
dlg.Filter= "图形文件|*.bmp;*.jpg;*.gif;*.png" \'设置筛选器
dlg.MultiSelect = True
If dlg.showDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim ftp1 As new  ftpclient
    ftp1.host=""
    ftp1.port = ""
    ftp1.Account = ""
    ftp1.password = ""   
    Dim tb As WinForm.TextBox = e.Form.Controls("TextBox1")
    Dim dr As DataRow
    dr = DataTables("上下游公司名录").SQLFind("公司 = \'" & tb.Value & "\'")
    If dr IsNot Nothing Then \'如果找到的话
        Dim ls = dr.Lines("附件")
        For Each f As String In dlg.FileNames
            Dim file = "/上下游公司名录附件/" & dr("公司") & "/" & filesys.GetName(f)
            If ftp1.DirExists("/上下游公司名录附件/" & dr("公司")) = False Then
                ftp1.MakeDir("/上下游公司名录附件/" & dr("公司"))
            End If
            Dim Result As DialogResult
            If ftp1.FileExists(file) Then
                Result = MessageBox.Show("文件已经存在,是否覆盖?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            End If
            If result = Nothing OrElse result = DialogResult.Yes Then
                If  ftp1.Upload(f,file,True) = True Then
                    If ls.contains(file) = False Then
                        ls.add(file)
                    End If
                Else
                    MessageBox.Show( f & "上传失败" ,"提示" ,MessageBoxButtons.OK,MessageBoxIcon.Question)
                End If
            End If
        Next
        dr.lines("附件") = ls
        dr.Save
        ftp1.Close
    End If
End If

上传附件是成功的,我远程到服务器看过,但如何让这个PictureViewer立即能看到上传的图片呢?
[此贴子已经被作者于2020/4/11 15:55:53编辑过]

--  作者:有点蓝
--  发布时间:2020/4/7 22:45:00
--  
Dim pv As WinForm.PictureViewer = e.Form.Controls("PictureViewer1")
    If dr IsNot Nothing Then \'如果找到的话
        Dim ls = dr.Lines("附件")
        For Each f As String In dlg.FileNames
            Dim file = "/上下游公司名录附件/" & dr("公司") & "/" & filesys.GetName(f)
            If ftp1.DirExists("/上下游公司名录附件/" & dr("公司")) = False Then
                ftp1.MakeDir("/上下游公司名录附件/" & dr("公司"))
            End If
            Dim Result As DialogResult
            If ftp1.FileExists(file) Then
                Result = MessageBox.Show("文件已经存在,是否覆盖?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            End If
            If result = Nothing OrElse result = DialogResult.Yes Then
                If  ftp1.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

--  作者:huangfanzi
--  发布时间:2020/4/7 23:30:00
--  
蓝老师,我发现一个问题,不知是不是BUG
用以上的代码加入图片后,然后用PictureViewer的删除按钮删除某个图片,假定为A图,再添加A图,此时A图不会显示在PictureViewer中,通过远程桌面到服务器,此时A图还是再一次的被上传上去了,也就是说删除某个文件名的图片后再上传此同命图片,PictureViewer中不再显示此图片,此外,查看窗口中table表中的这条记录,附件列中没有写入内容,首次添加文件时这个table表中附件就会有内容,在PictureViewer中删除图片时附件列中也会 同步删除内容
下面是删除的代码:
窗口中table1的BeforeDeleteFile事件
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 ftp1 As new ftpclient
        ftp1.host=""
        ftp1.port = ""
        ftp1.Account = ""
        ftp1.password = ""
        ftp1.RootDir = "/上下游公司名录附件" \'设置根目录
        Dim tb As WinForm.TextBox = e.Form.Controls("TextBox1")
        Dim dr As DataRow
        dr = DataTables("上下游公司名录维护新增模式窗口_Table1").SQLFind("公司 = \'" & tb.Value & "\'")
        If dr IsNot Nothing Then \'如果找到的话
            ftp1.DeleteFile(e.FileName)
            Dim fls As List(of String)
            fls = ftp1.GetFileList(dr("公司")) \'返回此FTP目录下的文件数
            If fls.Count = 0 Then
                ftp1.DeleteDir(dr("公司"),True)  \'直接删除此目录及下面的所有文件
            End If
            dr.Save
        End If
    Else
        e.Cancel = True
    End If
End If
[此贴子已经被作者于2020/4/8 7:54:04编辑过]

--  作者:有点蓝
--  发布时间:2020/4/8 8:37:00
--  
再上传同命图片的时候是不是没有往PictureViewer里添加?
--  作者:huangfanzi
--  发布时间:2020/4/8 8:57:00
--  
再上传还是用的原来的上传代码,这么说吧,窗口中有个上传按钮,上传后,在PictureViewer中点删除,然后再点上传按钮上传同名文件,在服务器上实际是上传了,可在窗口中的table中,附件列没有再增加内容
另外,我发现本地也会存在上传的文件,在项目的一个目录中,这个能不能关掉啊,不要本地也保存了,没找到相关代码
[此贴子已经被作者于2020/4/8 8:59:53编辑过]

--  作者:有点蓝
--  发布时间:2020/4/8 9:48:00
--  
上传实例测试

本地是必须有文件的,ftp的文件必须下载到本机,才能使用,控件才能显示图片。
--  作者:huangfanzi
--  发布时间:2020/4/8 9:56:00
--  
晚上,我把项目文件发你看下,至于本地必须有文件,哪么请问,我如何在PictureViewer中点删除,本地的文件能同步删除吗,现在是删除不了的,没找到删除的代码,其实我想问的就是,控件中的自动复制附件与自动删除附件代码如何写
--  作者:有点蓝
--  发布时间:2020/4/8 9:58:00
--  
BeforeDeleteFile事件到项目里的RemoteFiles删除同名文件即可
--  作者:huangfanzi
--  发布时间:2020/4/8 11:06:00
--  
蓝老师,我做了个模板,不过FT是2018年的版本,我上班的电脑上装的,不过一样可以用
打开项目后,有个窗口1,第一步点“新增”按钮后会有一条记录,公司名我默认是 公司A 
然后在PictureViewer中点增加,假定加入图片A,然后删除此图片A,再增加图片A,这时你可以看到二个情况
一是PictureViewer中没有增加图片A
二是窗口中的table表上的附件列也没有相应的写入内容


以下内容是专门发给有点蓝浏览




--  作者:有点蓝
--  发布时间:2020/4/8 11:35:00
--  
BeforeAddFile事件
……

        dr.lines("附件") = ls
        e.DataRow.lines("附件") = ls
        e.DataTable.AcceptChanges
        dr.Save
        ftp1.Close
    End If
End If

新增按钮
……
Dim pv As WinForm.PictureViewer = e.Form.Controls("PictureViewer1")
Dim ftp As New FTPClient
ftp.host="xxx"
ftp.port = "xxx"
ftp.Account = "xxx"
ftp.password = "xxx"
pv.FTPclient = ftp
pv.BindingField = t.Name & ".附件"
t.AllowEdit = True