2009-02-05 4 views
4

컨트롤을 서브 클래 싱하지 않습니다. Control.Size = Control.Size을 통해 이벤트를 트리거하려고하면 새 크기가 실제로 다르지 않아도 트리거되지 않으므로 실패합니다.실제로 크기를 조정하지 않고 Control.Resize 이벤트를 트리거하는 방법은 무엇입니까?

+0

컨트롤의 크기를 조정하지 않은 경우 왜 크기를 조정 하시겠습니까? – Calanus

+0

* 다시 그리기 *하려면 컨트롤을 누른 다음 Control.Invalidate()를 수행하십시오. – Calanus

+0

Resize가 발생하기를 기다리는 관찰자가 있습니다. 관찰자를 다시 칠하기를 기다리는 것으로 바꾸는 것은 내부 통제 장치의 크기를 조정하기 때문에 부적절합니다. – mafu

답변

8

직접 OnResize 전화, 또는 API에 노출 될 수 있습니다 :

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

그러나, 임의의 컨트롤이 작업을 수행 할 수 없습니다. Size을 앞뒤로 바꿀 수 있습니까? 또는 리플렉션을 사용할 수도 있지만 해킹은 가능합니다.

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

반사가 가능할 수도 있지만 과장이 될 수도 있고 실제로보기 흉하게 들릴 수도 있습니다. – mafu

+0

전적으로 동의합니다 ... –

+0

반사와 함께 매우 더러운 soultion ...하지만 실제로 작동합니다. – GiveEmTheBoot

0

다음을 사용하여 컨트롤 크기를 변경하십시오. Control.Size = new Size (x, y);

컨트롤의 크기를 변경하면 해당 컨트롤에 대한 resize 이벤트가 발생하고 컨트롤의 크기가 조정됩니다.

또는 컨트롤을 다시 그리려면 다음을 수행하십시오. Control.Invalidate(); 당신이 Control를 서브 클래스 화하는 경우

0

왜이 작업을 수행하고 싶은가? 예를 들어, 컨트롤 자체 (즉, 파생 컨트롤 클래스)에있을 때 OnResize를 호출 할 수 있습니다. 그 Resize 이벤트 난 항상이 작업을 수행 :)

1

을 위해 무엇 때문에 (아니면 밖에 반사.를 통해) 그 외에도

, 당신은 아마, 컨트롤의 크기를 변경해야합니다 컨트롤의 Resize 이벤트 처리기를 호출하는 경우 :

control_Resize(null, null); 
관련 문제