2011-10-25 2 views
0

Windows Form에 DataGridviews가 있습니다. 작은 대화 상자를 사용하여 DataGridview에 레코드를 추가하고 있습니다. 사용자가 단추를 누르면 애니메이션이 적용되기를 원합니다. 로드됩니다. 나는잘못된 모양의 창에 서식 창이 나타나기 시작하는 동안

[DllImport("user32")] 
     static extern bool AnimateWindow(IntPtr hwnd, int time, int flags); 

소스 사용하고 있습니다 : http://www.c-sharpcorner.com/UploadFile/kirtan007/761/

대화 상자가에서 애니메이션됩니다하지만, 화면의 왼쪽 상단. 또 다른 형태 그래서 나는 내 양식을 추가

//Set the Location negative values are being returned when my dialog appears 
       this.Location = new Point(LocationMainX + WidthOfMain, locationMainy + 10); 

       //Animate form 
       AnimateWindow(this.Handle, 750, AW_SLIDE | AW_HOR_POSITIVE); 

내가 아이에게 자신의 위치를 ​​통과하고있는 부모 폼에서

AddForm form = new AddForm (this.DesktopLocation) 
form.ShowDialog(); //I have also noticed doing form.Show(); messes with the position of dialog 

내 주요 양식로드 : 내가 추가 대화 상자의 Load 이벤트에 belowcode를 사용하고 상대 위치를 반환한다고 추측합니다. 그러나 나는 시도했다 :

AddForm form = new AddForm (this.Parent.DesktopLocation) 
    form.ShowDialog(); 

이 부정은 부정적인 값을 돌려 준다. 그러나 또한 부정확하다 (0,24)를 돌려 준다. 대화 상자가 상위 형식의 약 150 픽셀 위에 애니메이션으로 표시됩니다. 내가 양식 상대를 설정

너무 this.Parent.Parent.Location 그때가 바로 나타납니다, 그래서 내가 생각하는 응용 프로그램의 루트 부모를 접근보다는 this.parent.parent을하는 공식적인 방법이있다. ....

+0

양식이 "잘못된 위치에 있음"에 대해 더 구체적으로 설명 할 수 있습니까? 너무 높거나 낮거나, 너무 멀리 왼쪽이나 오른쪽 또는 무작위입니다. 어디 있어야합니까? – ChrisF

+0

"화면의 왼쪽 상단"이라는 질문을 업데이트했습니다. – PUG

+0

제공 한 번호가 상위 창에 상대적입니까? 아마'LocationMainX'와'locationMainy'을 벗을 수 있을까요? – ChrisF

답변

0

편집마다 this.Parent 대신 this.ParentForm을 사용할 수 있습니다. 등 단지의 경우, 널 (null)을 확인

업데이트 :

하지 않음이 양식을 표시 할 위치를 정말로 확인합니다. 양식을 보여주기 위해 다음

using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect); 

[StructLayout(LayoutKind.Sequential)] 
public struct RECT 
{ 
    public int Left; 
    public int Top; 
    public int Right; 
    public int Bottom; 
} 

: 그리고 어쩌면 그냥 pinvoke 사용

RECT fromRECT; 
GetWindowRect(new HandleRef(this, button1.Handle), out fromRECT); 
form.Location = new Point(fromRECT.Left + (fromRECT.Right - fromRECT.Left), fromRECT.Top); 
form.Show(); 

양식을 버튼의 오른쪽에 표시됩니다.

+0

즉각적인 문제는 해결되지만 특정 폼에 새로운 폼을 배치하는 목적 부모 폼의 단추를 기준으로 새 폼을 배치하고 싶기 때문에 위치가 여전히 해결되지 않았습니다.이 버튼은 스플리터 패널 및 그룹 상자와 같은 여러 컨트롤에 중첩되어 있습니다. 그것이 존재하는 컨트롤이 아닌 기본 폼에 상대적인 해당 버튼의 위치를 ​​찾을 수 있다면 좋을 것입니다. – PUG

+0

@jaminator 업데이트되었습니다. MDI 응용 프로그램입니까? – LarsTech

관련 문제