2010-06-21 26 views
11

Có thể thực hiện một hành động cụ thể sau sự kiện thay đổi kích thước (của điều khiển người dùng), ví dụ khi nút chuột được nhả ra? Tôi cần phải tự thay đổi kích thước một kiểm soát bên trong và làm nó trên mỗi bắn duy nhất của sự kiện này sẽ là khá, hmm, không hiệu quả ...WinForms - hành động sau khi thay đổi kích thước sự kiện

+0

Có nhiều cách tốt hơn để thực hiện bố cục kiểm soát. – leppie

+0

Tôi biết và tôi sẽ không làm điều này theo cách đó, nhưng đó là một trường hợp đặc biệt nhỏ;) – brovar

+0

Bất cứ điều gì sai với sự kiện 'Control.Resize'? – leppie

Trả lời

9

Chỉ cần sử dụng sự kiện ResizeEnd:

private void Form1_ResizeEnd(object sender, EventArgs e) 
{ 
    // Your code here 
} 

Từ MSDN:

sự kiện ResizeEnd được nâng lên khi người dùng kết thúc thay đổi kích thước một hình thức, thường bằng cách kéo một trong những biên giới hoặc sự kìm kẹp cỡ nằm trên góc dưới bên phải của biểu mẫu, và sau đó phát hành nó. Để biết thêm thông tin về về việc thay đổi kích thước hoạt động .

+0

Rất hấp dẫn và tôi có thể đã sử dụng nó, nhưng nó đang xảy ra trong điều khiển người dùng (tôi quên chỉ định rằng, xin lỗi) và tôi không có quyền truy cập vào các sự kiện của biểu mẫu. – brovar

+0

@brovar: Đó là tiền! Mọi điều khiển đều có thuộc tính 'ParentForm'. Vì vậy, trong thực tế, bạn có tất cả những gì có thể truy cập! – leppie

+0

@Tại sao bạn không thể thêm phương thức 'ResizeMeNow()' vào điều khiển người dùng và gọi nó trên sự kiện 'ResizeEnd' của Form? – GenericTypeTea

0

Có thể bạn có thể sử dụng sự kiện SizeChanged. Nhưng tôi không biết thường xuyên hoặc khi nào nó được gọi trong khi thay đổi kích thước.

+0

Cũng giống như Thay đổi kích thước, thời gian sau khi thời gian. – brovar

1

Bạn có thể giả mạo một ResizeEnd địa phương như thế này:

public class Dummy:UserControl 
{ 

    private readonly Timer _tDelayedResize; 

    public Dummy() 
    { 
     this.Resize += this_Resize; 
     _tDelayedResize = new Timer(); 
     _tDelayedResize.Interval = 5; 
     _tDelayedResize.Tick += this_ResizeEnd; 
    } 

    void this_Resize(object sender, EventArgs e) 
    { 
     _tDelayedResize.Stop(); 
     _tDelayedResize.Start(); 
    } 

    void this_ResizeEnd(object sender, EventArgs e) 
    { 
     _tDelayedResize.Stop(); 

     //Do your ResizeEnd logic here 
     //... 
    } 

} 

Khoảng cách có thể được sửa đổi. Độ trễ càng cao sau sự kiện thay đổi kích thước cuối cùng sẽ là.

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