VB.Net vs2008でMDI子の1つのインスタンスを開く必要があります...このコードは、同じMDI子の複数の複製を開きます。私はこの答えを得ましたc#の重複したMDI子フォームを防止しますが、VB.Netvs2008のフォームは見つかりませんでした
Dim myChild As New Form1()
myChild.MdiParent = Me
myChild.Show()
VB.Net vs2008でMDI子の1つのインスタンスを開く必要があります...このコードは、同じMDI子の複数の複製を開きます。私はこの答えを得ましたc#の重複したMDI子フォームを防止しますが、VB.Netvs2008のフォームは見つかりませんでした
Dim myChild As New Form1()
myChild.MdiParent = Me
myChild.Show()
これは、FredrikMörkのコードのVB.Netバージョンです。
For Each f As Form In Application.OpenForms
If TypeOf f Is Form1 Then
f.Activate()
Return
End If
Next
Dim myChild As New Form1
myChild.MdiParent = Me
myChild.Show()
これを試して
private void button1_Click(object sender, EventArgs e)
{
FormCollection fc = Application.OpenForms;
bool FormFound = false;
foreach (Form frm in fc)
{
if (frm.Name == "Form2")
{
frm.Focus();
FormFound = true;
}
}
if (FormFound == false)
{
Form2 f = new Form2();
f.Show();
}
}
Generics(C#およびVB.netオプションの下)を使用してメソッドを実装できます。これは、さまざまなMDIフォームを開く必要がある場合に役立ちます。
Public Sub Open_MDI(Of T As {New, Form})(bMultipleInstances As Boolean)
If bMultipleInstances = False Then
For Each f As Form In Me.MdiChildren
If TypeOf f Is T Then
If (f.WindowState = FormWindowState.Minimized) Then
f.WindowState = FormWindowState.Maximized;
End If
f.Activate()
Exit Sub
End If
Next
End If
Dim myChild As New T()
myChild.MdiParent = Me
myChild.Show()
End Sub
次のように使用してください(それらを防ぐためにFalse
示してください)bMultipleInstances
Open_MDI(Of Form2)(False)
private void OpenMDI<T>(bool multipleInstances)
where T : Form, new()
{
if (multipleInstances == false)
{
// Look if the form is open
foreach (Form f in this.MdiChildren)
{
if (f.GetType() == typeof(T))
{
// Found an open instance. If minimized, maximize and activate
if (f.WindowState == FormWindowState.Minimized)
{
f.WindowState = FormWindowState.Maximized;
}
f.Activate();
return;
}
}
}
T newForm = new T();
newForm.MdiParent = this;
newForm.Show();
}
次のように使用してください(それらを防ぐために示しfalse
てください)multipleInstances
OpenMDI<Form2>(false);