1

ログイン フォームと、デバッグを開始するときに表示されるメイン フォームの 2 つのフォームを作成しました。メイン フォームをロードすると、ログイン フォームもロードされます。私の質問は、ログインフォームがロードされたときにメインフォームを無効にしたいということです。接続に成功した場合は、メイン フォームを有効にする必要があります。それ以外の場合は、無効にする必要があります。

私はこのコードを試しました:

MainFrm .cs :

private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
c.Enabled = false;
Connectez ConnectezFrm = new Connectez { TopMost = true, Owner = this };
ConnectezFrm.Show();
}

Connectez.cs :

private MainFrm objMainfrm { get; set; }
public Connectez(MainFrm objfrm)
{
objMainfrm = objfrm;
InitializeComponent();
}
....
....
private void simpleButton1_Click(object sender, EventArgs e)
{
foreach (Control c in objMainfrm.Controls)
c.Enabled = true;
this.Close();
}
4

2 に答える 2

3

ShowDialog(this)の代わりに使用しShow()ます。

于 2012-07-25T18:21:00.297 に答える
2

フォームを無効にするために、フォームの個々のコントロールを無効にする必要はありません。あなたが使うことができます

objMainForm.Enabled = false;

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enabled

ただし、この場合に本当に実行したいのは、モーダルダイアログを表示することだけです。使用する

ConnectezFrm.ShowDialog();

モーダルダイアログは、アクティブなときに親との対話を防ぎます。

また、メインフォームへの参照を子フォームに渡すことでこれを達成しようとしたようです。

public Connectez(MainFrm objfrm)

モーダルダイアログ効果を得るのにそれは必要ありません。

接続に失敗した場合に何らかのアクションを実行する必要がある場合は、 ConnectezからDialogResultを返すことができます。DialogResultを次のように確認します。

DialogResult dr = ConnectezFrm.ShowDialog();
if (dr != DialogResult.OK) {
    // Do something e.g. disable certain parts of the form
    // Be sure to leave a button or something enabled to load ConnectezFrm again :-)
}
于 2012-07-25T18:22:25.650 に答える