2009-10-22 29 views
6

Vì vậy, tôi không quen với việc phát triển biểu mẫu cửa sổ.Cách xóa đồ họa trên điều khiển trong suốt ở dạng cửa sổ

Tôi đang cố gắng tạo thành phần "này, tôi đang bận làm việc" chỉ xoay hình xung quanh. Tôi muốn điều khiển này được thoáng qua và vẽ trên đầu trang của bất kỳ điều khiển khác. Lớp kế thừa trực tiếp từ Control.

Vì vậy, tôi có điều này trong constructor:

SetStyle(ControlStyles.Opaque, true); 

và điều này:

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams parms = base.CreateParams; 
     parms.ExStyle |= 0x20; 
     return parms; 
    } 
} 

nào được tôi một điều khiển mà sẽ vẽ trên đầu trang của các điều khiển khác.

Bây giờ vấn đề của tôi là vấn đề này. Tôi vẽ lại điều khiển một vài lần trong một giây để tạo ra một hình ảnh động trơn tru. Tuy nhiên, tôi không thể tìm ra cách để xóa những gì được vẽ trong khung trước đó. Sử dụng e.Graphics.Clear(Color.Transparent) trong OnPaint chuyển toàn bộ điều khiển màu đen.

Có cách nào để chỉ xóa nội dung được vẽ của điều khiển không?

Tôi nhận thấy rằng Thay đổi kích thước của điều khiển sẽ xóa nền.

Những điều đó không làm việc

  1. Overriding OnPaintBackground để làm gì cả. Hoặc chỉ cần gọi base.OnPaintBackground. Cùng một kết quả.

Trả lời

4

Được rồi, tôi tìm thấy giải pháp ở đây: http://www.bobpowell.net/transcontrols.htm

điều khiển Phụ Huynh thực sự phải không còn giá trị để giữ lại nền trong suốt.

+1

Bạn không phải làm mất hiệu lực toàn quyền kiểm soát của cha mẹ, mà chỉ là vùng tương ứng với điều khiển người dùng: this.Parent.Invalidate (this.ClientRectangle, true); –

+0

@Eric: Cảm ơn mẹo. Tôi nghĩ rằng tôi có thể đã làm điều đó! – snicker

+1

Thao tác này sẽ không hoạt động đúng cách trừ khi điều khiển người dùng ở vị trí (0,0). Bạn phải làm mất hiệu lực vùng cha được bao phủ bởi usercontrol và sử dụng các tọa độ cha. Ngoài ra, nếu usercontrol có một khu vực không phải khách hàng trong suốt, khu vực này cũng sẽ không bị vô hiệu hóa. Tôi muốn đi cho 'this.Parent.Invalidate (hình chữ nhật mới (this.Location, this.Size), true);' – takrl

2

Bạn có thể phải ghi đè OnPaintBackground rằng bài viết này trình bày: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

Bạn cũng có thể cần phải làm mất hiệu lực kiểm soát khi nó cần phải được dọn sạch để buộc OnPaintBackground được gọi.

+0

Điều đó không khắc phục được sự cố. Và tôi đã vô hiệu hóa sự kiểm soát trước đó. Cảm ơn mặc dù. – snicker

+0

Nhưng tôi đã tìm thấy liên kết cho giải pháp thực trong các nhận xét của trang đó, vì vậy +1 và cảm ơn bạn. – snicker

+0

Không phải mọi điều khiển đều có thể ghi đè lên onpaintbackground, như chú giải công cụ – Mike

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