7

我有我在 VB6 内部使用的 ac# 控件,它基本上是一个带有圆角的面板。我想知道是否有办法使该控件成为一个容器,有点像 Frame 是一个容器。基本上我希望能够把东西放在里面,这样它们就可以一起移动,最重要的是把东西放在它的前面

现在,如果我在它上面放置一个标签或一个命令,它就会在我的 COM 控制和使用之后Bring to Front,并且Send 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),我在运行 Windows xp 和 vs2010 (.net framework 4.0) 的虚拟机上导入 VB6。

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

4

1 回答 1

1

根据@MarkBertenshaw 评论

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

于 2014-12-23T20:19:23.897 回答