如何在不实际调整大小的情况下触发Control.Resize事件?

时间:2009-02-05 10:36:35

标签: c# winforms events resize controls

我不是控件的子类。尝试通过Control.Size = Control.Size触发事件失败,因为即使新大小实际上不同,它也不会触发。

4 个答案:

答案 0 :(得分:8)

如果您是Control的子类,则可以直接调用OnResize,或在API上公开它:

 public void OnResize() {
     this.OnResize(EventArgs.Empty);
 }

但是,您无法对任意控件执行此操作。您可以更改Size来回?或者,您可以使用反射,但这很麻烦:

 typeof (Control).GetMethod("OnResize",
     BindingFlags.Instance | BindingFlags.NonPublic)
     .Invoke(myControl, new object[] {EventArgs.Empty});

答案 1 :(得分:1)

我总是通过调用Control的Resize事件处理程序来执行此操作:

control_Resize(null, null);

答案 2 :(得分:0)

只需使用以下命令更改控件的大小:Control.Size = new Size(x,y);

更改控件的大小将为该控件发出resize事件,控件应调整大小。

或者,如果您只想重绘控件,请执行以下操作: Control.Invalidate();

答案 3 :(得分:0)

为什么要这样做,以及在什么情况下?例如,当您在控件本身(即在派生控件类中)时,可以调用OnResize。 (或者当你在外面的时候通过反思。)

除此之外,您可能需要更改控件的大小,因为这是Resize事件的用途:)