我有一个C#控件,我在VB6中使用它,基本上是一个带有圆角的面板。我想知道是否有一种方法可以使该控件成为容器,就像框架是容器一样。基本上,我想能够将东西放在里面,以便它们一起移动,最重要的是将东西放在它的前面。
现在,如果我放置一个标签或命令在其上方,它会在我的COM控件后面,并且使用“Bring to Front”和“Send to Back”没有任何作用。
我需要在VB6中将其声明为容器吗?代码必须来自C#吗?
编辑:
我已经签署了保密协议,所以我无法在这里发布整个代码,但我会发布一些并解释一些。
在构建过程中,我使用 "regasm.exe" 来创建一个类型库(tlb),然后在运行 Windows xp 和 vs2010(.net framework 4.0)的虚拟机中导入该库到 VB6 中。
然后,我可以实例化 AzPanels、在设计时调整它们的大小和移动它们,并且可以毫无问题地向它们添加命令(按钮)。但是,当涉及到形状或标签时,它们似乎出现在面板的后面,我无法将它们置于最前面。
现在,如果我放置一个标签或命令在其上方,它会在我的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 中。
然后,我可以实例化 AzPanels、在设计时调整它们的大小和移动它们,并且可以毫无问题地向它们添加命令(按钮)。但是,当涉及到形状或标签时,它们似乎出现在面板的后面,我无法将它们置于最前面。