質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

7183閲覧

[C#]別アプリから起動したウィンドウをアプリの中央に表示させたい

makiikeda1216

総合スコア128

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2015/04/20 01:47

編集2015/04/20 07:50

現在、オーナーウィンドから呼ばれるバイナリー(処理をしている間プログレスバーのFormを表示)を作成しているのですが。バイナリーのFormをオーナウィンドウの中央に表示させたい場合、やはり、引数でオーナーウィンドウのTop,Left,Height,Widthを与えなければいけないのでしょうか?引数を与えずにオーナーウィンドウの中央に置くことはできないのでしょうか?

[訂正]
調べてわかったのですが、親子関係のない別アプリから起動したウィンドウを中央に表示したい場合でした。

[詳細]
アプリA からアプリB(ここを作成中)を起動
⇒アプリBのウィンドウをアプリAの中央に表示したい(親子関係なし)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

バイナリーのFormはオーナーウィンドからどのように呼び出していますか?
CenterParentの指定以外ですと、子ウインドウのLoadイベントで以下のように記述する方法があります。

lang

1 this.Location = new Point( 2 this.Owner.Location.X + (this.Owner.Width - this.Width) / 2, 3 this.Owner.Location.Y + (this.Owner.Height - this.Height) / 2);

投稿2015/04/20 03:05

sho_cs

総合スコア3541

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makiikeda1216

2015/04/20 07:30

少し調べたのですが別アプリから中央に表示したいウィンドウを起動するので親子関係が存在しないみたいなのですOTL なのでやはりthis.Locationに設定してもエラーがでましたOTL
sho_cs

2015/04/20 07:51

別アプリということであれば、Top,Left,Height,Widthは設定しなければなりませんが、Win32 APIのMoveWindow関数をつかうことでオーナー側から設定可能です。
makiikeda1216

2015/04/20 09:14

さきほどuser32.dllのFindwindowというAPIを利用することでTop,Left,Height,Widthを取得することができることがわかりました!locationの設定も組みあせることで希望の実装ができたのでsho_csさんにベストアンサーを送りたいと思います。ありがとうございました。
guest

0

フォームのプロパティStartPositionをCenterParentにする、というのではだめですか?

投稿2015/04/20 02:48

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makiikeda1216

2015/04/20 02:55

返信ありがとうございます。 すでに試してみましたが、CenterParentではだめでしたOTL
KoichiSugiyama

2015/04/20 03:03

モーダルフォーム(ShowDialog()で表示)だったら、デザイン画面でのプロパティ 設定でいけるはずですが、そのフォームはモードレスフォームでしょうか(Show()で表示)? モードレスだったら、やはり位置指定で表示位置を決めてやらないとだめです。
makiikeda1216

2015/04/20 07:32

調べたのですが、別アプリから中央に表示したいウィンドウを起動するので親子関係がなくて中央にもってこれないようです。別の方法を探してみますOTL
KoichiSugiyama

2015/04/20 08:59

だとすると、 System.Diagnostics.Process.GetProcesses()で取得したプロセスをひとつひとつMainWindowTitleプロパティを調べて該当するフォームのウィンドウを見つけて、その表示位置を取得して真ん中に表示、というようなやり方になると思います。
makiikeda1216

2015/04/20 09:16

有用な情報ありがとうございます!それと同じような仕組みのAPIであるFindwindowが見つかりました。それを使って実装することにしました。質問に付き合っていただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問