2013-05-03 8 views
1

나는 winforms를 사용하고 있습니다.두 번째 양식 열기, 오른쪽 첫 번째 양식

거의 완성 된 응용 프로그램을 만들었습니다. 다음을 고려하십시오. 두 가지 형식이 있습니다. 첫 번째 형식은 응용 프로그램 시작시 시작되고 두 번째 형식은 첫 번째 형식 옆에 열어야합니다.

예 :

Form collision

가 어떻게 두 번째 양식의 첫 번째 양식의 위치를 ​​액세스 할 수 있습니까? 두 번째 형식의 생성자에 "this"를 보내야합니까? 다음 코드

편집

나를 도와 : 하나의 생성자를 설계 할 때

private void changelogToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (_changelog.IsDisposed) 
    { 
      _changelog = new Changelog(); 
    } 
      _changelog.Location = new Point((Left + Width), Top); 
      _changelog.Show(); 
} 

답변

3

기본 규칙을 염두에두고 : 생성자에 불필요한 정보를 제공하지 마십시오.

여기서 필요한 것은 다른 창이 아니라 오히려 그 위치입니다. 새 창을 놓을 위치가 더 필요합니다. 따라서 int x, int y

  1. 하나의 매개 변수를 Point location
  2. 두 개의 매개 변수 :

    대신이 생성자 중 하나를해야, 당신은 두 번째 양식이 첫 번째 양식에 대해 알려하지 않아야한다는 것을 의미 너의 선호에. 물론 두 생성자를 모두 가질 수 있으므로 (Point location) 또는 int x, int y (을)를 제공할지 여부를 결정할 수 있습니다.

    이 모든 내용은 귀하가 읽은 것을 잊어 버렸습니다.

    SecondForm form = new SecondForm() 
    { 
        Location = new Point(this.Right, this.Top) 
    }; 
    

    말하는 단지 다른 방법 :

    SecondForm form = new SecondForm(); 
    form.Location = new Point(this.Right, this.Top); 
    
+0

로 설정되어 있어야 – Max

+0

도움을 @Mobstaa 다행 , 받아 줘서 고마워 :) –

2

왜 위치하지 않는 두 번째 양식을 만들 때 모든 생성자를 사용하는 것보다 더 나은 은, 난 그냥 수동으로 속성을 설정합니다 새 양식을 열 때?

물론
Form2 f = Form2(); 
f.Location = new Point(this.Left + this.Width, this.Top); 
f.Show(); // Or ShowDialog() 

이 내가 그렇게 할 수있을 때 당신의 대답은 문제를 해결하기 때문에 두 번째 양식 속성 StartPosition이, 당신의 대답을 받아 들일 것인가 FormStartPosition.Manual

관련 문제