2013-04-08 24 views
7

Tôi có điều khiển C# mà tôi sử dụng bên trong VB6, cơ bản là một bảng điều khiển với các góc tròn. Tôi muốn biết nếu có một cách để làm cho điều khiển một container, loại giống như một khung là một container. Về cơ bản tôi muốn có thể đặt mọi thứ bên trong nó để tất cả chúng di chuyển cùng nhau, và quan trọng nhất là đặt mọi thứ Ở mặt trước của nó.Điều khiển COM trong VB6: Tạo vùng chứa ngoài tầm kiểm soát

Ngay bây giờ nếu tôi đặt, nói, nhãn hoặc lệnh trên đầu trang, nó sẽ nằm sau điều khiển COM của tôi và sử dụng Bring to FrontSend to Back sẽ không làm gì cả.

Tôi có cần khai báo nó dưới dạng vùng chứa trong vb6 không? Mã có phải đến từ C# không?

Edit:

tôi đã ký một NDA vì vậy tôi không thể gửi toàn bộ mã ở đây, nhưng tôi sẽ đăng một số và giải thích một số.

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); 
    } 
} 

Có một số công cụ khác để xác định khu vực có góc tròn, nhưng về cơ bản chỉ là một bảng điều khiển. Tôi có một lớp học mở rộng AzPanel, AzPanelCOM với các thuộc tính sau:

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

Cũng như giao diện, IAzPanelCOM, để hiển thị nó với VB6.

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

On build tôi sử dụng "regasm.exe" để tạo ra một thư viện kiểu (TLB) mà tôi nhập khẩu trong VB6 trên một máy ảo chạy Windows xp và VS2010 (.net framework 4.0).

Sau đó tôi có thể khởi tạo AzPanels, thay đổi kích thước chúng và di chuyển chúng ngay cả khi thiết kế, và tôi có thể thêm lệnh (nút) cho chúng mà không gặp vấn đề gì. Tuy nhiên, khi nói đến hình dạng hoặc nhãn, chúng dường như xuất hiện phía sau bảng điều khiển và tôi không thể đưa chúng lên phía trước.

+0

Vì vậy, tôi có phần lớn nó hoạt động, nhưng có vẻ như đó là phần dễ dàng. Tôi có thể làm cho nó để bảng điều khiển của tôi là một container, nhưng đặt hình dạng, dòng và nhãn "bên trong" đặt chúng phía sau kiểm soát của tôi. Tất cả đều di chuyển với sự kiểm soát, nhưng vô hình. Bất kì sự trợ giúp nào đều được đánh giá cao! – Felix

+0

Tôi rất muốn giúp bạn gỡ lỗi nhưng tôi không biết mã của bạn trông như thế nào ... – djv

+2

Chỉ cần kiểm tra kỹ, bạn đang sử dụng điều khiển .net trong VB6 qua COM. Tìm kiếm nhanh đã tiết lộ điều này: http://social.msdn.microsoft.com/Forums/en-US/vbinterop/thread/1beac437-b5d8-42c9-b226-45688c6d5962 tl; dr: Kiểm soát được hiển thị dưới dạng phổ biến kiểm soát, nhưng không thực hiện cùng một giao diện, vì vậy bạn không thể thêm điều khiển vào nó. – Fry

Trả lời

1

theo @MarkBertenshaw Comment

Bạn không thể sử dụng điều khiển cửa sổ (hình dạng, nhãn, et.c) với một thành phần .NET container. Tuy nhiên, bạn có thể sử dụng điều khiển cửa sổ VB, ví dụ: Khung (không có đường viền) hoặc Hộp hình ảnh bên trong thành phần .NET, mà bạn đặt những điều khiển không cửa sổ đó

Các vấn đề liên quan