2017-04-19 20 views
0

센터 [윈폼]에서.
내가 자식 폼이 Resize 이벤트, 내가 크기 조정 내가이 양식 (부모 & 아이) <Br> 자식 폼의 속성 <code>ControlBox:False</code> 있으며, & <code>FormBorderStyle:SizeableToolWindow</code><code>DoubleBuffer:True</code> (나머지는 모두 기본값입니다)가

this.Location = System.Drawing.Point(x/2 - this.Width/2, y/2 - this.Height/2); 
//tried this.CenterToParent();` 

코드

다음 한 자식 폼에서

(그리고 왼쪽에서) 중심에서 크기를 조정할 여기서 x = 부모 폼의 너비와 y = 부모 폼의 높이입니다.

부모 폼에서 자식 폼을 표시 한 후 크기가 너무 많이 깜박이는 동안 자식 폼은 원래 위치로 돌아갑니다.
센터에서 부드럽게 크기를 조정하는 방법은 무엇입니까?
Form의 크기 조정 원점을 가운데로 변경하는 방법이 있습니까?
이 질문은 이미 here을 게시,하지만 여기에 더 나은 링크의 솔루션

+1

그 솔루션은 이미 당신이 그것을 이해하지 않는 경우에 당신은하지 않습니다, 필요한 모든 제공이 동일한 솔루션이 여기에 게시됨을 이해하십시오. – Gusman

+0

해결책을 찾았습니다. 이것이 문제의 핵심입니다 : WinProc을 오버라이드 한 다음 그 SDK 메시지를 '먹습니다'. –

+0

@Dysmondad, 답장을 보내 주셔서 감사합니다. 나는 C#과 winform에 익숙하지 않다. 그래서 WinProc, SDK 메시지를 처리하는 방법을 모른다. e.t.c –

답변

1
using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnResize(EventArgs e) 
     { 
      this.Location = new System.Drawing.Point(this.Location.X/2 - this.Width/2, this.Location.Y/2 - this.Height/2); 
      //tried this.CenterToParent();` 
      base.OnResize(e); 
     } 

     const int WM_SYSCOMMAND = 0x112; 
     const int SC_MAXIMIZE = 0xF030; 
     const int SC_MAXIMIZE2 = 0xF032; 

     protected override void WndProc(ref Message m) 
     { 
      if ((m.Msg == WM_SYSCOMMAND && m.WParam == new IntPtr(SC_MAXIMIZE)) || m.WParam == new IntPtr(SC_MAXIMIZE2)) 
      { 
       this.Size = this.MaximumSize; 
       m.Result = new IntPtr(0); 
       //base.WndProc(ref m); 
       //Eat the message so won't process further 
      } 
      else 
      { 
       m.Result = new IntPtr(0); 
       base.WndProc(ref m); 
      } 
     } 
    } 
} 

을 이해하지 않았다 이 https://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc(v=vs.110).aspx

+0

답변 및 참조 링크 주셔서 감사합니다. 나는 당신의 코드를 시도했다. 크기를 조정할 때 어떤 이유로 든 이전 위치에서 여전히 플래시를 형성합니다! –

+0

@Prakash M, 이것은 오버라이드를 추가하는 방법을 보여주기위한 것입니다. 이 코드가 코드에서 작동합니까? –

+0

작동 (크기가 중앙에서 발생 함)하지만 깜박임을 피하는 방법은 무엇입니까? 네가 끝까지 노력할 수 있니? –