用用户控件封装,OCX控件, ocx控件的事件不能在  用户控件中  触发,
哪位遇到过类似的问题, 是否可以解决,, 如何解决??
感激!

解决方案 »

  1.   

    那时肯定的,OCX控件是在客户端运行的,怎么能触发用户控件中的事件呢?
      

  2.   

    VS.Net提供了一个转换的程序,通过此程序可以把非受管代码转换为受管代码,这个程序的名称为"tlbimp.exe",它在\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin目录下。通过下面的命令就可以完成转换: 
    tlbimp mydll.ocx /out:my.dll   
    my就是命名空间的名字,你引用后,然后在程序里,using my;就OK了。
      

  3.   

    多谢  jxufewbt(我的目标是5星) 大侠:
    按你说的方法之后. 建成的 用户控件(当然是引用转换后的dll)   不能被主程序创建实例
    出现   异常为"未指定的错误"
    还请大侠继续指点!!!
    多谢!
      

  4.   

    to :  jxufewbt(我的目标是5星) 
    不是这样:
    那时肯定的,OCX控件是在客户端运行的,怎么能触发用户控件中的事件呢?而是 触发ocx中的事件  (则用户控件触发ocx中的事件)
      

  5.   

    to  terryshi(terryshi) 用  aximp  转后,能添加控件实例
    可是执行时出现错误:
    其他信息: 未能从程序集 jjjj, Version=1.0.2159.31020, Culture=neutral, PublicKeyToken=null 中加载类型 AxXXXLib.AxXXX。
      

  6.   

    aximp之后的dll是直接引用,在new了一个实例以后,要作如下初始化
    ((System.ComponentModel.ISupportInitialize)XXXXXX).BeginInit();
    this.Controls.Add(XXXXXX);
    ((System.ComponentModel.ISupportInitialize)XXXXXX).EndInit();
      

  7.   

    多谢  terryshi(terryshi)  老兄先.
    按你的方法在 用户控件  中封装之后,
    我其他的程序中只要,把用户控件一拖到
    主窗体中,马上就出现VS.net2003死去..不知道是什么原因,得继续麻烦这位大侠.
    ..... xxxx = new xxxx();
    ((System.ComponentModel.ISupportInitialize)XXXXXX).BeginInit();
    this.Controls.Add(XXXXXX);
    ((System.ComponentModel.ISupportInitialize)XXXXXX).EndInit();这段代码放在用户控件的 load 中,是否正确?!
      

  8.   

    不是把控件拖到界面上,那样的话就没有必要tximp了,始在引用中添加dll的引用,然后再程序里面new。
      

  9.   

    是的.我是在用户控件中添加引用....
    然后  在load(用户控件的) 中用 new 生成相应的对象,并执行 大侠的((System....)的代码.托到界面: 是拖我建的 [用户控件] (用户控件引用生成的dll)
    在没有包含((system...)代码前没有问题...
      

  10.   

    try {  
    ax_SwfObjects = new AxShockwaveFlashObjects.AxShockwaveFlash();
    ((System.ComponentModel.ISupportInitialize)(ax_SwfObjects)).BeginInit();
    this.Controls.Add(ax_SwfObjects);
    ((System.ComponentModel.ISupportInitialize)(ax_SwfObjects)).EndInit();
    this.ax_SwfObjects.Dock = System.Windows.Forms.DockStyle.Fill;
    this.ax_SwfObjects.Enabled = true;
    ax_SwfObjects.Menu = false;
    ax_SwfObjects.BeginInit();
    ax_SwfObjects.Movie=Application.StartupPath+@"\\test.swf";
    if (!File.Exists(ax_SwfObjects.Movie))
    MessageBox.Show("在"+Application.StartupPath+"路径下没有找到test.swf影片文件!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    else {
    ax_SwfObjects.Show();
    ax_SwfObjects.Play();
    timer_GetFrameNum.Start();
    timer_GetFrameNum.Interval = 30;
    }

    catch(Exception ex) {
    MessageBox.Show("错误"+ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
    }
      

  11.   

    多谢  terryshi(terryshi)  一直相助我再试试, 我用建一个用户控件来  封装 一下大侠的 代码,
    然后再使用该用户控件看行不行.. 如果可以.那可能就是我引
    用的ocx本身的问题.
      

  12.   

    我一值在作OCX控件:不过都是ASP.NET调用。没有用过用户控件封装OCX控件.
      

  13.   

    楼上,我想问一下,ASP.NET里面怎么调用呢?
    OCX控件都是客户端调用的呀,我想知道你是怎么在服务端调用的呀?或者客户端调用的方式?