C# VB6中的COM控件:使容器脱离控件

C# VB6中的COM控件:使容器脱离控件,c#,com,vb6,containers,C#,Com,Vb6,Containers,我在VB6内部使用了一个c#控件,它基本上是一个圆角面板。我想知道是否有一种方法可以使控件成为一个容器,有点像框架是一个容器。基本上,我希望能够把东西放在它里面,让它们一起移动,最重要的是把东西放在它前面 现在,如果我在它上面放置一个标签或命令,它会在我的COM控件后面,使用前置和后置发送什么也不做 我需要在vb6中将其声明为容器吗?代码必须来自c#吗 编辑: 我已经签署了保密协议,所以我不能在这里发布全部代码,但我会发布一些并解释一些 public class AzPanel : Panel

我在VB6内部使用了一个c#控件,它基本上是一个圆角面板。我想知道是否有一种方法可以使控件成为一个容器,有点像框架是一个容器。基本上,我希望能够把东西放在它里面,让它们一起移动,最重要的是把东西放在它前面

现在,如果我在它上面放置一个标签或命令,它会在我的COM控件后面,使用
前置
后置发送
什么也不做

我需要在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),并将其导入运行Windows xp和vs2010(.net framework 4.0)的虚拟机上的VB6中


然后我可以实例化AZPanel,调整它们的大小,甚至在设计时移动它们,并且我可以毫无问题地向它们添加命令(按钮)。然而,当谈到形状或标签时,它们似乎出现在面板后面,我无法将它们放在前面。

根据@MarkBertenshaw评论

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


所以我已经让它大部分工作,但它似乎是最容易的部分。我可以使我的面板成为一个容器,但将形状、线条和标签放在“内部”会将它们放在我的控件后面。它们都随控件移动,但不可见。任何帮助都将不胜感激!我很乐意帮助您调试,但我不知道您的代码是什么样子的…请仔细检查,您正在通过COM在VB6中使用.net控件。快速搜索发现:tl;dr:该控件作为公共控件公开,但没有实现相同的接口,因此您不能向其添加控件。@tijizor您不能将无窗口控件(形状、标签等)与.NET容器组件一起使用。但是,您可以使用VB窗口控件,例如.NET组件中的框架(无边框)或图片框,将这些无窗口控件放置在其中。@MarkBertenshaw:我认为您应该将其添加为这个问题的答案。