基本的に角の丸いパネルである VB6 内で使用する ac# コントロールがあります。そのコントロールをコンテナーにする方法があるかどうかを知りたいのですが、フレームがコンテナーであるようなものです。基本的には、すべてが一緒に動くように中に物を配置できるようにしたいと考えています。最も重要なことは、物を前に配置することです。
現在、たとえばラベルやコマンドをその上に配置すると、COM コントロールと使用の背後にあり、何もBring to Front
しSend to Back
ません。
vb6でコンテナとして宣言する必要がありますか? コードは c# から取得する必要がありますか?
編集:
NDA に署名したので、ここにコード全体を掲載することはできませんが、一部を掲載し、一部を説明します。
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」を使用して、Windows XP および vs2010 (.net Framework 4.0) を実行している仮想マシン上の VB6 にインポートするタイプ ライブラリ (tlb) を作成します。
次に、AzPanel をインスタンス化し、サイズを変更して、設計時でも移動できます。コマンド (ボタン) を問題なく追加できます。ただし、形状やラベルに関しては、パネルの後ろに表示されているようで、前面に持ってくることができません。