0

メインフォーム(fMain)と2つの子フォーム(fLoginとfAdmin)を備えたwinformsアプリがあります。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のコンストラクターで、メインフォームをプライベートメンバーレベルの変数に割り当てます。

// fLogin
fMain _mainForm;

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

ご想像のとおり、fLoginは、ユーザー名とパスワードのテキストボックスといくつかのボタンを備えた小さなフォームです。ユーザーが資格情報を入力して[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を設定して、ダイアログを魔法のように中央に配置することはできません。したがって、formAdminの所有者として_mainFormをformAdmin.Show()に渡しますが、formAdminを中央に配置することに関しては役に立たないようです。formAdminをメインフォームの中央に表示させる簡単な方法はありますか?

4

1 に答える 1

1

fLogin内からfAdminを表示するのではなく、これを行う方法を少し再構築する必要があると思います。fLoginを閉じてから、fMainからfAdminを開きます。これが機能しない場合は、fAdminの左上隅のポイントを計算し、このポイントをfAdminの場所として設定することにより、手動で中央に配置できます。私は過去に同様の問題に遭遇したときにこれをしなければなりませんでした。fMainの中央に配置されるように、fAdminの左上隅を計算するには、次を使用します。

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;
于 2011-10-20T20:14:31.890 に答える