2011-10-25 6 views
0

私はWindowsフォーム上にdatagridviewsを持っています。小さなダイアログを使用してdatagridviewにレコードを追加しています。読み込まれます。 http://www.c-sharpcorner.com/UploadFile/kirtan007/761/ウィンドウをアニメーション化している間にフォームが間違った場所に表示される

ダイアログがでアニメーションが、画面の左上にされています。私は

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

ソースを使用しています。別のフォーム私は午前中にフォームを追加

//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を使用できます。念のため、ヌルの確認など

更新:あなたはこのフォームを表示したい場所

本当にわかりません。たぶん、ほんの一部pinvoke使用:

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; 
} 

をして、フォームを表示する:

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

関連する問題