• WEB下引用.NET Windows Control(Windows控件)经常出现的错误和解决办法


    因为B/S项目有很多打印发票单据的需要,所以在网页中使用了Windows Control,专门用C#做了一个打印控件,页面调用这个打印控件,控件从WEBSERVICE获取数据进行打印,使用中出现过的一些问题,总结了一下,希望对大家有所帮助。
    控件的代码如下:
      1using System;
      2using System.Collections;
      3using System.ComponentModel;
      4using System.Drawing;
      5using System.Data;
      6using System.Windows.Forms;
      7using WGSys.DataExchange;
      8using WGSys.DataExchange.WGService;
      9
     10namespace WGSys.WGCtrlLib
     11{
     12    /// <summary>
     13    /// Summary description for CtrlPrint.
     14    /// </summary>

     15    public class CtrlPrint : System.Windows.Forms.UserControl
     16    {
     17        /// <summary> 
     18        /// Required designer variable.
     19        /// </summary>

     20        private System.ComponentModel.Container components = null;
     21        private System.Windows.Forms.Label label1;
     22        WGSys.DataExchange.WGProxy svc = new WGSys.DataExchange.WGProxy();
     23        public CtrlPrint()
     24        {
     25            // This call is required by the Windows.Forms Form Designer.
     26            InitializeComponent();
     27
     28            // TODO: Add any initialization after the InitializeComponent call
     29
     30        }

     31        private System.Drawing.Printing.PrintDocument printDoc;
     32        Component Designer generated code
     63
     64        变量销毁
     80
     81        判断是否安装打印机
    140
    141
    142        测试控件
    153    }

    154}
    页面引用的代码如下
     1<OBJECT id="CtrlPrint" style="WIDTH: 80px; HEIGHT: 50px" height="32" width="32" 
     2                                            classid="http:../WGCtrlLib.dll#WGSys.WGCtrlLib.CtrlPrint" VIEWASTEXT>
     3</OBJECT>
     4<INPUT class="NormalButton" style="WIDTH: 80px; HEIGHT: 24px" onclick="test1();" type="button" value="测试1">
     5<INPUT class="NormalButton" style="WIDTH: 80px; HEIGHT: 24px" onclick="test2();" type="button" value="测试2">
     6<INPUT class="NormalButton" style="WIDTH: 80px; HEIGHT: 24px" onclick="test3();" type="button" value="测试3">
     7<SCRIPT language="javascript">
     8                                    function test1()
     9                                    {
    10                                        try
    11                                        {
    12                                            alert(document.all["CtrlPrint"]);
    13                                        }

    14                                        catch(e)
    15                                        {
    16                                            alert(e.message);
    17                                        }

    18                                    }

    19                                    function test2()
    20                                    {
    21                                        if(document.all["CtrlPrint"]=="WGSys.WGCtrlLib.CtrlPrint")
    22                                        {
    23                                            try
    24                                            {
    25                                                document.all["CtrlPrint"].ShowHelp();
    26                                            }

    27                                            catch(e)
    28                                            {
    29                                                alert(e.message);
    30                                            }

    31                                        }

    32                                        else
    33                                        {
    34                                            alert("打印控件未能正确加载!");
    35                                        }

    36                                    }

    37                                    function test3()
    38                                    {
    39                                        if(document.all["CtrlPrint"]=="WGSys.WGCtrlLib.CtrlPrint")
    40                                        {
    41                                            try
    42                                            {
    43                                                document.all["CtrlPrint"].HavePaperType("A4");
    44                                            }

    45                                            catch(e)
    46                                            {
    47                                                alert(e.message);
    48                                            }

    49                                        }

    50                                        else
    51                                        {
    52                                            alert("打印控件未能正确加载!");
    53                                        }

    54                                    }

    55
    </SCRIPT>

    这个程序正常情况下应该显示如图,点击“测试1”按钮后,弹出"WGSys.WGCtrlLib.CtrlPrint"



    错误1控件不能正确加载,控件状态如下图,访问控件的时候脚本错误“拒绝访问”

    这种情况往往是因为页面引用控件的位置不正确,比如本来应该是classid="http:../WGCtrlLib.dll#WGSys.WGCtrlLib.CtrlPrint"
    却写成了classid="http:../WGCtrlLib2.dll#WGSys.WGCtrlLib.CtrlPrint",还有一种情况是Bin目录下边的Dll是不能直接引用的,所以这个控件不要放在bin下面,我是放在网站根目录下面的。

    错误2控件加载,但是不能判断出具体类型,控件状态如下图

    在脚本中测试 alert(document.all["CtrlPrint"]);的时候提示[object],说明页面已经判断出来这个控件了,但是不知道具体类型
    产生这个错误的原因可能是classid里边的名称控件不正确,比如写成了classid="http:../WGCtrlLib.dll#WGSys.WGCtrlLib.CtrlPrint2"还有一种情况比较奇怪,如果你用了客户机器里边不存在的字体,控件也是这种状态,比如我控件上显示OK的字体用"Arial Black",如果客户机器上没有这个字体,控件同样是这种状态,不能正常加载。估计是MS的Bug...

    错误3 控件在页面上彻底的不显示,连空白的地方都没有留
    原因是你用.Net 1.1写的控件,客户机器上装的是.Net 2.0 估计还是MS的Bug,应该向下兼容才对啊。

    错误4 无法验证发行者。您确定要运行此软件吗?

    目前为止,只有一台机器每次加载控件的时候都提示这个错误。点击运行按钮后控件工作正常,但是很烦。
    本来以为是Internet选项 -> 安全 -> 安全设置 里边的“运行未用Authenticode签名的组件”的设置问题,但是选择“启用”后仍然不起作用。并且选择“提示”后提示的窗口跟这个窗口是不同的。
    提示的窗口应该如下

    这个问题还没有解决,谁有办法请指教。
    错误5 控件可能加载正常,运行某些方法的时候控件抛出“请求****类型的权限已失败”的异常?

    这个可以到 管理工具->Microsoft .NET Framework 1.1 向导->调整.NET安全性 里边调节相应区域的安全级别
  • 相关阅读:
    mysql 8安装
    MYSQL escape用法--转义
    为什么lombok不起作用
    zookeeper的作用
    限流的玩法汇总
    Golang程序调试工具介绍(gdb vs dlv)
    净化Git之rebase变基的使用
    深入linux下磁盘Disk,分区Partition,挂载Mount
    利用SSH(无密码)免登录来节省你的生命
    tcp_tw_reuse、tcp_tw_recycle注意事项
  • 原文地址:https://www.cnblogs.com/wormday/p/457691.html
Copyright © 2020-2023  润新知