2013-04-08 11 views
7

我有一个c#控件,我在VB6中使用,它基本上是一个带圆角的面板。我想知道是否有办法将控件制作成容器,就像Frame是一个容器。基本上我希望能够把东西放在里面让他们一起移动,最重要的是把东西放在的前面之内。VB6中的COM控件:使容器脱离控制

现在,如果我在其上放置一个标签或命令,它就落后于我的COM控件,并且使用Bring to FrontSend to Back什么都不做。

我需要声明它为vb6中的容器吗?代码是否必须来自c#?

编辑:

我已经签署了保密协议,所以我不能在这里张贴整个代码,但我会发布一些和解释一些。

public class AzPanel : Panel 
{ 
    protected const int BORDER_WIDTH = 3; 
    protected int BORDER_RADIUS = 4; 
    private object _lock = new object(); 
    private bool regionNeedsRefresh = false; 

    public AzPanel() : base() 
    { 
     this.SetStyle(
      ControlStyles.DoubleBuffer | 
      ControlStyles.AllPaintingInWmPaint | 
      ControlStyles.UserPaint, true); 
     this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); 
     this.SetStyle(ControlStyles.Selectable, false); 
     base.BackColor = Color.Transparent; 
     this.BorderColor = Color.DarkRed; 
     this.ContentColor = Color.DarkGoldenrod; 
     this.DoubleBuffered = true; 

     base.Padding = new Padding(3, 3, 4, 4); 
    } 
} 

还有一些其他东西来定义一个圆角的区域,但它基本上只是一个面板。我具有延伸AzPanel,AzPanelCOM具有以下属性的类:

[Guid("...")] 
[ProgId...] 
[ComVisible(true)] 
[ComdefaultInterface...] 
[ClassInterface(ClassInterfaceType.AutoDispatch)] 

除了一个接口,IAzPanelCOM,将其暴露在VB6。

[Guid("...")] 
[ComVisible(true)] 
public interface IAzPanelCOM 
{ 
    void DesignTimeReload(); 
    //some other things 
} 

在构建我用 “regasm.exe” 创建类型库(TLB),我在VB6导入运行Windows XP和VS2010(.NET Framework 4.0中)的虚拟机上。

然后,我可以实例化AzPanels,调整它们的大小并在设计时移动它们,并且我可以向它们添加命令(按钮)而不会出现任何问题。然而,当涉及形状或标签时,它们似乎出现在面板后面,我无法将它们带到前面。

+0

所以我大部分工作正常,但它看起来很容易。我能够做到这一点,所以我的面板是一个容器,但放置形状,线条和标签“内部”将它们放在我的控制之下。他们都随着控制而移动,但看不见。任何帮助将非常感激! – Felix 2013-04-10 12:18:13

+0

我很乐意帮助你调试,但我不知道你的代码是什么样的...... – djv 2013-04-15 14:53:02

+2

只是为了仔细检查,你是通过COM在VB6中使用.net控件。快速搜索揭示了这一点:http://social.msdn.microsoft.com/Forums/en-US/vbinterop/thread/1beac437-b5d8-42c9-b226-45688c6d5962 tl; dr:该控件是公开的常见控制,但不实现相同的接口,所以你不能添加控制。 – Fry 2013-04-15 15:41:54

回答

1

按照@MarkBertenshaw评论

不能与.NET容器组件使用窗口控件(形状,标签,et.c)。但是,您可以使用VB窗口控件,例如框架(无边框)或.NET组件内的图片框,您将这些无窗口控件放入其中。