前回の内容では、Application.Run せずに、ShowDialog() していました。
Application.Run() を起動してから諸々の処理を行わせるようにしないと、いろいろ問題が生じるそうです。
(メッセージポンプしゅぽしゅぽとか。メッセージループぐるぐるとか、そういうものの関係だそうです)
詳しくは、昨日の記事やコメントを参照して下さい。
http://blogs.wankuma.com/rti/archive/2006/12/25/53572.aspx
中さんのサンプルにもありましたが、Application.Run(New 認証フォーム()) として、認証フォーム内で認証させた結果で、メインフォームを開けば良いのです。
しかし、僕としては、やはり Application.Run(New メインフォーム()) と書きたいのです。
で、以下のようにしました。
今度はどうですか~?
public static class Program
{
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using (MainForm mainForm = new MainForm()) {
Application.Run(mainForm);
} // Dispose()
}
}
public sealed partial class MainForm : Form
{
private void MainForm_Shown(object sender, EventArgs e) {
bool b = false;
using (ユーザー認証 f = new ユーザー認証()) {
if (f.ShowDialog() == DialogResult.Cancel) {
this.Close();
}
} // Dispose()
}
}
public partial class ユーザー認証 : Form
{
public ユーザー認証() {
this.InitializeComponent();
this.DialogResult = DialogResult.Cancel;
}
private void okButton_Click(object sender, EventArgs e) {
if (! this.無事認証された()) {
MessageBox.Show("認証失敗です!!");
return;
}
this.DialogResult = DialogResult.OK;
this.Close();
}
private void cancelButton_Click(object sender, EventArgs e) {
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private bool 無事認証された() {
// ここに認証コードを書く
}
}
この方法では、メイン画面が表示された状態で認証フォームが表示されます。
これが嫌な人は、別の方法を考えて、ここにフィードバックして下さいw