Hiện nay tôi đang cố gắng để làm những gì tôi nghĩ sẽ là một nhiệm vụ đơn giản:Vẽ một hình ảnh vào một điều khiển Bảng điều chỉnh cho các đồ tạo tác khi thay đổi kích thước
Vẽ một hình ảnh vào khu vực đầy đủ của một Panel
control trong Windows Forms. (Xin vui lòng bỏ qua cho thời điểm này mà tôi có thể sử dụng BackgroundImage
property)
Những hình ảnh để vẽ trông như sau:
Tức là một hộp màu vàng với khung màu xanh lam 1 pixel xung quanh.
Để vẽ, Tôi đang sử dụng sự kiện Paint
của Panel
kiểm soát:
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(Resources.MyImage, panel1.ClientRectangle);
}
này có vẻ tốt đẹp khi ban đầu hiển thị có dạng:
Khi thay đổi kích thước hình thức (và bảng điều khiển được gắn) cũng có thể cắt các cạnh khi được làm nhỏ hơn ...
... hoặc nó thu hút các đồ tạo tác, khi được thực hiện lớn hơn:
Tôi khá chắc chắn rằng có một cái gì đó đang xảy ra khá đơn giản và thẳng về phía trước nhưng tôi thực sự không thể hiểu được lý do.
Vì tôi bỏ qua ClipRectangle
và luôn vẽ mọi thứ, tôi nghĩ hình ảnh sẽ được thu nhỏ mọi lúc.
Câu hỏi của tôi là:
- lý do cho hiện vật là gì? (I yêu thích để hiểu điều này!)
- Tôi phải làm gì để loại bỏ các đồ tạo tác? (Bên cạnh gọi
Invalidate
trên mỗi thay đổi kích thước)
Update, GIẢI PHÁP:
Nhờ Ryan's answer, tôi đã có thể tìm thấy một giải pháp chấp nhận được. Về cơ bản tôi bắt nguồn từ một lớp học từ Panel
, đã ghi đè số OnPaintBackground
và đã làm không phải là gọi phương thức cơ sở. Cuối cùng, tôi đã thêm đoạn mã sau vào hàm tạo của bảng dẫn xuất của tôi:
base.DoubleBuffered = true;
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
có thể trùng lặp của http://stackoverflow.com/questions/1970196/c-sharp-panel-backgroundimage-transparent-controls-flickering – ionden