2011-10-20 18 views
0

私はメインフォーム(fMain)と2つの子フォーム(fLoginとfAdmin)を持つwinformsアプリケーションを持っています。 fLoginがメインフォーム上のボタンにボタンのクリックイベントハンドラである。このコードを使用して表示されます。fLoginのコンストラクタで別の子ウィンドウから新しい子ウィンドウを表示しますが、それを親ウィンドウの中央に表示します

// show login form; pass the main form in as an argument 
fLogin formLogin = new fLogin(this); 
formLogin.StartPosition = FormStartPosition.CenterParent; 
formLogin.ShowDialog(this); 

を、私はプライベートメンバのレベルの変数にメインフォームを割り当てます。

// fLogin 
fMain _mainForm; 

// fLogin constructor 
public fLogin(fMain mainForm) 
{ 
    InitializeComponent(); 
    _mainForm = mainForm; 
} 

想像のとおり、fLoginは、ユーザー名とパスワード用のテキストボックスと2つのボタンを持つ小さなフォームです。ユーザーが資格情報を入力して[OK]ボタンをクリックすると、fLoginはサーバーとの情報を検証し、情報が良好であればfLoginは消え、fAdminが表示されます。現在、私はこのようなfAdmin表示しています:

// hide formLogin right away 
this.Hide() 

// show admin form 
fAdmin formAdmin = new fAdmin(); 
formAdmin.StartPosition = FormStartPosition.CenterParent; 
formAdmin.Show(_mainForm); // pass main form as owner of admin form 

// close formLogin 
this.Close(); 

私はformAdmin.Parent = _mainFormを設定して、魔法のように自分自身を中央にダイアログを取得することはできません。だから私は_mainFormをformAdmin.Show()にformAdminの所有者として渡していますが、それはformAdminを中心にすることに関しては役に立たないようです。 formAdminをメインフォームの中央に表示させる簡単な方法はありますか?

答えて

1

fLoginの中からfAdminを表示するのではなく、fLoginを閉じてfMainからfAdminを開くのではなく、ちょっとしたやり方を再構成する必要があると思います。これが機能しない場合は、fAdminの左上隅のポイントを計算して手動で中央に配置し、このポイントをfAdminの位置として設定します。私はこれまで同様の問題に遭遇したときにこれをしなければならなかった。 fAdminの左上隅をfMainの中央になるように計算するには、次のようにします。

Point p = new Point(0, 0); 
p.Y = (fMain.Height/2) - (fAdmin.Height/2); 
p.X = (fMain.Width/2) - (fAdmin.Width/2); 
fAdmin.Location = p; 
+0

どちらも良いアイデアです。どうもありがとうございました。 – user685869

関連する問題