MDIコンテナ内で特定のフォームが既に開かれている場合、そのフォームを開くのを防ぐ方法はありますか?標準的な方法がない私の知る限り重複したMDI子フォームを防止する
答えて
:
foreach (Form form in Application.OpenForms)
{
if (form.GetType() == typeof(MyFormType))
{
form.Activate();
return;
}
}
Form newForm = new MyFormType();
newForm.MdiParent = this;
newForm.Show();
を参照してください。自分で実装する必要があります。スレッドの安全性が懸念される場合は、
class TheForm: Form
{
private static TheForm Instance;
private TheForm() // Constructor is private
{
}
public static Show(Form mdiParent)
{
if (Instance == null)
{
// Create new form, assign it to Instance
}
else
Instance.Activate(); // Not sure about this line, find the appropriate equivalent yourself.
}
protected override OnFormClose(EventArgs e)
{
Instance = null;
base.OnFormClose(e);
}
}
適切なlock
秒を追加します。私はそれをこのようにしてください。
スレッドの安全性は、問題になることはありませんvb.netでの私のためにこのコード作業。 – Groo
これはシングルトンパターンの実装であると付け加えることができます。私はFredrikMörkのソリューションを好む、それはSOC –
このポストは非常に古いですが、私は思っ
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form form in Application.OpenForms)
{
if (form.GetType() == typeof(Form2))
{
form.Activate();
return;
}
}
Form2 newForm = new Form2();
newForm.MdiParent = this;
newForm.Show();
}
作業このコードこれは助けを加えるでしょう。
フォームが最小化されている場合も処理する必要があります。ここでは完全な例である:
foreach (Form form in this.MdiChildren)
{
if (form.GetType() == typeof(frmMain))
{
if (form.WindowState == FormWindowState.Minimized)
{
form.WindowState = FormWindowState.Normal;
}
form.Activate();
return;
}
}
Form frm = new frmMain();
frm.MdiParent = this;
frm.Show();
あなただけの単一のスレッドからGUIのコントロールにアクセスするので
For Each f As Form In Application.OpenForms If TypeOf f Is form_name Then f.Activate() f.WindowState = FormWindowState.Normal f.StartPosition = FormStartPosition.WindowsDefaultLocation f.WindowState = FormWindowState.Maximized
Return
End If
Next
form_name .MdiParent = Me
form_name .Show()
- 1. フォーム(ニュースレター)で重複した電子メールの送信を防止する方法
- 2. 重複したフォームの投稿を防止する
- 3. AngularFire重複防止
- 4. 防止二重フォーム送信
- 5. MVVM/MDIアプリケーションで重複しているRelayCommandsを防ぐ
- 6. 二重送信フォームを防止する
- 7. 防止重複したエントリVBA
- 8. MDI子フォームC#
- 9. 重複した電子メールアドレスがデータベースへの入力を防止する
- 10. カスタムオブジェクトの重複レコードを防止する
- 11. ビューの重複を防止する
- 12. ループ内の重複を防止する
- 13. divの重複を防止する
- 14. WindowsフォームのMDI子フォーム
- 15. Firebaseのセキュリティルール - 重複した友達リクエストを防止する
- 16. WooCommerceで重複したクレジットカードを防止する
- 17. appsheet重複したエントリを防止する
- 18. Azureモバイルサービス重複したエントリを防止する
- 19. 重複するGoogleマップマーカーの防止
- 20. Mosquittoは重複したログインを防止します
- 21. AngularJSリソースが重複したリクエストを防止します
- 22. リンカーは重複したリンケージを防止しますか?
- 23. Winforms MVP show mdi子フォーム
- 24. 防止自動インクリメントをスキップで重複したキーを更新
- 25. メインMDI親フォームでMenuListを使用してMDI子フォームを開く方法
- 26. JQueryを使用した重複データの防止
- 27. codeigniterでphpとmysqlを使用した重複エントリの防止
- 28. MDIフォームにドッキングする子ウィンドウ
- 29. PHPは重複する投稿を防止します
- 30. updatepanelを使用して重複挿入を防止する
の代わりにform.Activate()use form.WindowState = FormWindowState.Normal;前者とは異なり、後者はそのウィンドウが最小化されていても機能します。 – docesam