以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  点击按钮显示快捷菜单  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=173107)

--  作者:cd_tdh
--  发布时间:2021/11/15 17:03:00
--  点击按钮显示快捷菜单
已解决
[此贴子已经被作者于2021/11/15 17:15:01编辑过]

--  作者:有点蓝
--  发布时间:2021/11/15 17:16:00
--  
设计的是系统菜单,不是窗口菜单,这是2种完全不同的用法,不能混用。


--  作者:cd_tdh
--  发布时间:2021/11/16 9:27:00
--  

开始就是搞混了,在请教一下老师,我勾选的数据有两种报表,根据"是否使用工程款"来判断使用那种报表,一次勾选了多行数据,怎么按照勾选的顺序来生成一个Pdf文件的报表呢?

Dim  rs As List(of Row) = Tables("委托支付管理").GetCheckedRows
If rs.Count > 0 Then  \'如果存在符合条件的行
    Select Case e.StripItem.Name

        Case "支付委托"

            For Each  r As Row In rs \'逐行生成报表
                If r("是否使用工程款") = True Then
                    Dim tm As String  =  ProjectPath &  "Attachments\\工料机支付委托书工程款.docx" \'指定模板文件
                    Dim fl1 As String =  ProjectPath &  "Reports\\工料机支付委托书工程款.docx" \'指定目标文件
                    Dim fl2 As String =  ProjectPath &  "Reports\\工料机支付委托书工程款.pdf" \'指定目标PDF文件
                    Dim wrt As New WordReport(Tables("委托支付管理"),tm,fl1) \'定义一个WordReport
                Else
                    Dim tm As String  =  ProjectPath &  "Attachments\\工料机支付委托书.docx" \'指定模板文件
                    Dim fl1 As String =  ProjectPath &  "Reports\\工料机支付委托书.docx" \'指定目标文件
                    Dim fl2 As String =  ProjectPath &  "Reports\\工料机支付委托书.pdf" \'指定目标PDF文件
                    Dim wrt As New WordReport(Tables("委托支付管理"),tm,fl1) \'定义一个WordReport
                   
                    \'For Each  r As Row In rs \'逐行生成报表
                        wrt.BuildOne(r)
                        r.Checked =False
                    Next
                    wrt.SaveToPDF(fl2) \'保存为PDF文件
                    wrt.Quit() \'退出
                    Dim Proc As New Process \'打开PDF文件
                    Proc.File = fl2
                    Proc.Start()
                End If

        End Select
    Else
        MessageBox.Show("请先勾选你需要打印的数据!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        Return
    End If

[此贴子已经被作者于2021/11/16 9:52:53编辑过]

--  作者:有点蓝
--  发布时间:2021/11/16 10:04:00
--  

        Case "支付委托"

            For Each  r As Row In rs \'逐行生成报表

Dim wrt As WordReport

Dim fl2 As String
                If r("是否使用工程款") = True Then
                    Dim tm As String  =  ProjectPath &  "Attachments\\工料机支付委托书工程款.docx" \'指定模板文件
                    Dim fl1 As String =  ProjectPath &  "Reports\\工料机支付委托书工程款.docx" \'指定目标文件
                    fl2 =  ProjectPath &  "Reports\\工料机支付委托书工程款.pdf" \'指定目标PDF文件
                    wrt = New WordReport(Tables("委托支付管理"),tm,fl1) \'定义一个WordReport
                Else
                    Dim tm As String  =  ProjectPath &  "Attachments\\工料机支付委托书.docx" \'指定模板文件
                    Dim fl1 As String =  ProjectPath &  "Reports\\工料机支付委托书.docx" \'指定目标文件
                    fl2 =  ProjectPath &  "Reports\\工料机支付委托书.pdf" \'指定目标PDF文件
                    wrt = New WordReport(Tables("委托支付管理"),tm,fl1) \'定义一个WordReport
                End If

                        wrt.BuildOne(r)
                        r.Checked =False
                    
                    wrt.SaveToPDF(fl2) \'保存为PDF文件
                    wrt.Quit() \'退出

Next

        End Select


--  作者:cd_tdh
--  发布时间:2021/11/16 10:33:00
--  

老师,这样生成出来的是一条数据一个pdf文件,不是勾选的所有数据一个文件,怎么修改?

        Case "支付委托"
            For Each  r As Row In rs \'逐行生成报表
                Dim wrt As WordReport
                Dim fl2 As String
                If r("是否使用工程款") = True Then
                    Dim tm As String  =  ProjectPath &  "Attachments\\工料机支付委托书工程款.docx" \'指定模板文件
                    Dim fl1 As String =  ProjectPath &  "Reports\\工料机支付委托书工程款.docx" \'指定目标文件
                    fl2 =  ProjectPath &  "Reports\\工料机支付委托书工程款.pdf" \'指定目标PDF文件
                    wrt = New WordReport(Tables("委托支付管理"),tm,fl1) \'定义一个WordReport
                Else
                    Dim tm As String  =  ProjectPath &  "Attachments\\工料机支付委托书.docx" \'指定模板文件
                    Dim fl1 As String =  ProjectPath &  "Reports\\工料机支付委托书.docx" \'指定目标文件
                    fl2 =  ProjectPath &  "Reports\\工料机支付委托书.pdf" \'指定目标PDF文件
                    wrt = New WordReport(Tables("委托支付管理"),tm,fl1) \'定义一个WordReport
                End If
                wrt.BuildOne(r)
                r.Checked =False
                wrt.SaveToPDF(fl2) \'保存为PDF文件
                wrt.Quit()    \'退出
                Dim Proc As New Process \'打开PDF文件
                Proc.File = fl2
                Proc.Start()  \'打开
            Next

End Select

[此贴子已经被作者于2021/11/16 10:40:47编辑过]

--  作者:有点蓝
--  发布时间:2021/11/16 10:56:00
--  
使用的模板都不一样,怎么可以一个文件?至少2个文件

做筛选分2次处理,先筛选处理"是否使用工程款" = True的数据,然后在处理=false的数据
--  作者:cd_tdh
--  发布时间:2021/11/16 11:37:00
--  

我另外找方法处理吧,请老师看看动态增加窗口的快捷菜单,出来不对呢?图标不是在前面,后面标题和名称也没显示

Dim Strip As WinForm.Strip
Strip = e.Form.Strips.Add("快捷菜单1",  StripTypeEnum.ContextMenu)
Strip.Items.Add("打印凭证","打印凭证","new.ico", StripItemTypeEnum.Button)
Strip.Items.Add("打印委托","打印委托","Open.ico", StripItemTypeEnum.Button)

e.Form.Controls("Button1").ContextStrip = e.Form.Strips("快捷菜单1")

 


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20211116113635.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2021/11/16 11:39:32编辑过]

--  作者:有点蓝
--  发布时间:2021/11/16 11:57:00
--  
快捷菜单不要使用按钮

Strip.Items.Add("打印凭证","打印凭证","new.ico", StripItemTypeEnum.MenuItem)

--  作者:cd_tdh
--  发布时间:2021/11/16 16:34:00
--  

请教一下老师,word报表中的true和False怎么显示成这样带√的框和不带√的框,代码里面没法用特殊符号啊

我变通的话可以判断了来替换

            For Each  r As Row In rs \'逐行生成报表
                If r("是否使用工程款") = True Then
                    wrt.ReplaceOne("[否工程款]",False)  \'用代码替换复核人
                    wrt.ReplaceOne("[是工程款]",True)  \'用代码替换复核人
                Else
                    wrt.ReplaceOne("[否工程款]",True)  \'用代码替换复核人
                    wrt.ReplaceOne("[是工程款]",False)  \'用代码替换复核人
                End If
                wrt.BuildOne(r)
                r.Checked =False
            Next

[此贴子已经被作者于2021/11/16 16:36:41编辑过]

--  作者:有点蓝
--  发布时间:2021/11/16 16:37:00
--  
代码编辑器第一行放3个单引号

wrt.ReplaceOne("[否工程款]","
")