2017-08-04 2 views
1

Winフォームアプリケーションを前のフォームと同じ場所に開くようにしようとしています。私が今までに見つけた唯一の半分の解決策は、StartPositionをCenterScreenに設定することです。しかし、新しいフォームは、以前のフォームが中止された場所で実際に開くようにしたいと考えています。以前のwinフォームと同じ場所に新しいwinフォームを開く方法C#

これは私がこれをやろうとしたコードです。

Form1 F1 = new Form1(); 
this.Hide(); 
F1.ShowDialog(); 

F1.Left = this.Left; 
F1.Top = this.Top; 
F1.Size = this.Size; 

this.Close(); 
+0

設定を試しましたか?それが登場しました? – vipersassassin

+0

'Screen'オブジェクトを作成し、画面上のフォームの部分を取得して辞書に保存します。 –

答えて

2

あなたはLocationをつかむことができあなたが隠しているフォームの位置を設定し、新しいフォームの位置を設定します。あなたはこの場所がWinFormsのエンジンによって考慮されていることをしたい場合しかし、あなたは性質上、左と後のサイズを設定し、あなたのコードでは、ちなみににFormStartPosition.Manual

// Current form 
Form f1 = new Form(); 
f1.Show(); 
Application.DoEvents(); 
Thread.Sleep(5000); 

f1.Hide(); 
Form f2 = new Form(); 
f2.StartPosition = FormStartPosition.Manual; 
f2.Location = f1.Location; 
f2.Size = f1.Size; 
f2.ShowDialog(); 

StartPositionプロパティを設定する必要がありますShowDialogはモーダルであり、ShowDialogで開いたフォームを閉じるまで返されないため、閉じたフォームにこれらのプロパティを適用します

+0

クイックコメントありがとう@スティーブ。これは本当に私が問題を解決するのを助けました。 –

+0

ええ、位置ステートメントを修正した後、ShowDialogをスライドさせてください。 ShowDialogステートメントが呼び出された後は、それが何であるかは関係ありません。 –

0

ああ!私は前にこれにぶつかりました。以下のコードを試してみて、それがあなたのために働くなら、私に知らせて:

yourNewForm.Location = new Point(this.Left, this.Top);

するか、呼び出し元のフォームがまだ存在している場合、これはさらに簡単です:

yourNewForm.Location = this.Location;

+0

これは場所の場所を指定する別の方法です。しかし、私が追いついていた部分はすぐにF1.ShowDialogを持っていました。 –

+0

私のコメントで述べた事柄(ただし、笑)それで今働いているのですか? –

+0

ええ、私はそれが今正しく働いています。別のコーディング方法を示してくれてありがとう。 –

関連する問題