zoukankan      html  css  js  c++  java
  • 做一个带WPF窗体的Access插件-1

    一、关于起因

    最近很多的一些小项目使用Access做数据库,其中碰到些很恼火的问题就是给表字段设置默认值。每个数据库的表都比较多并且每个表需要设置默认值的字段又比较多。如果人工去打开表一个个字段去设置确实是吃力不讨好。所以想把默认值放在一个表里面,通过一个插件来操作,完成批量设置。说动手就动手,开发过程中,碰到了好几个问题。

    二、问题一

    如果用VSTO来做,会发现VSTO里根本没有Access的模板。所以选择使用共享插件模板来开发。那想到VS从2012开始已经没有共享插件模板,所以只好再安装了VS2010来做,共享插件模板再VS2010的位置如下所示。

    三、问题二

    既然是Access,属于Office下的一个套件,至少得用一下Ribbon吧,结果共享插件里不能像VSTO模板里一样,直接添加带设计视图的Ribbon菜单文件。最后只好采取自己手工添加RibbonXML的方法。

    以下是插件的类模块Connect.vb中的代码。其中的Access应用程序对象在插件退出时,做了立即销毁处理,如果不这样处理,可能会造成Access程序退出时,还存在Access应用程序Com对象的引用存在。

     1 Imports Extensibility
     2 Imports System.Runtime.InteropServices
     3 Imports Microsoft.Office.Interop
     4 Imports Microsoft.Office.Core
     5 
     6 #Region " Read me for Add-in installation and setup information. "
     7 ' When run, the Add-in wizard prepared the registry for the Add-in.
     8 ' At a later time, if the Add-in becomes unavailable for reasons such as:
     9 '   1) You moved this project to a computer other than which is was originally created on.
    10 '   2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in.
    11 '   3) Registry corruption.
    12 ' you will need to re-register the Add-in by building the AccessHelperSetup project, 
    13 ' right click the project in the Solution Explorer, then choose install.
    14 #End Region
    15 
    16 <GuidAttribute("CFEFF0B2-8C51-432B-A7B2-478C732A7C64"), ProgIdAttribute("AccessHelper.Connect")> _
    17 Public Class Connect
    18 
    19     Implements Extensibility.IDTExtensibility2
    20     Implements IRibbonExtensibility
    21 
    22     Private mAccApp As Access.Application
    23     Private mAddInInstance As Object
    24 
    25     Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown
    26 
    27     End Sub
    28 
    29     Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
    30     End Sub
    31 
    32     Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
    33     End Sub
    34 
    35     Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
    36         mAccApp = Nothing
    37         mAddInInstance = Nothing
    38         GC.Collect()
    39         GC.WaitForPendingFinalizers()
    40     End Sub
    41 
    42     Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
    43         mAccApp = CType(application, Access.Application)
    44         mAddInInstance = addInInst
    45     End Sub
    46 
    47     Public Function GetCustomUI(ByVal RibbonID As String) As String Implements Microsoft.Office.Core.IRibbonExtensibility.GetCustomUI
    48         Return My.Resources.RibbonMenuXML
    49     End Function
    50 
    51     ''' <summary>
    52     ''' 统一处理所有Ribbon菜单控件的OnAction属性
    53     ''' </summary>
    54     ''' <param name="control">当前需要回调处理的Ribbon控件</param>
    55     ''' <remarks></remarks>
    56     Public Sub RibbonAction(ByVal control As IRibbonControl)
    57         Select Case control.Id
    58             Case Is = "mbtnTableEditor"
    59                 'Dim frmTableEditor As New FTableEditor(mAccApp)
    60                 'frmTableEditor.Show()
    61                 Dim wTblEditor As New WTableEditor(mAccApp)
    62                 wTblEditor.Show()
    63         End Select
    64     End Sub
    65 
    66 End Class
    四、问题三

    想在插件中使用WPF窗体,而非传统的WinForm。结果发现在为共享插件项目添加新项时,根本没法找到WPF窗体这个项目。只好自己手工建一个VS的项模板,创建自定义的项模板步骤如下所示。

  • 相关阅读:
    DICOM:DICOM3.0网络通信协议
    Maven使用—拷贝Maven依赖jar包到指定目录
    Spring Boot使用JavaMailSender发送邮件
    SpringBoot配置Email发送功能
    MariaDB 安装与启动 过程记录
    ESXi与Linux主机配置syslog日志上传远程服务器
    Linux--忘记MySQL密码的解决方法和输入mysqld_safe --skip-grant-tables &后无法进入MySQL的解决方法
    centos killall安装
    centos安装lspci工具
    oracle创建job和删除job
  • 原文地址:https://www.cnblogs.com/alexywt/p/6801807.html
Copyright © 2011-2022 走看看