Por eso es importante que en tu pregunta incluyas el lenguaje con el que trabajas, aquí tienes la función de vb.net
Código:
Public Sub b_Click(ByVal sender as Object, e as EventArgs)
Dim frm as Form1 = AbrirVentana(GetType(Form1)) ' No compila con "Option Strict", usar el de abajo
' Dim frm as Form1 = CType(AbrirVentana(GetType(Form1)), Form1)
End Sub
Private shared formInstances As New SortedList() ' Para guardar las referencias de las instancias de los formularios
Public Shared Function AbrirVentana(ByVal type as Type, Optional dialog As Boolean = False) As Form
Dim Formulario as Form = formInstances(type.ToString()) ' No compila con "Option Strict", usar el de abajo
' Dim Formulario as Form = CType(formInstances(type.ToString()), Form)
If formulario Is Nothing OrElse formulario.IsDisposed Then
formulario = Activator.CreateInstance(type) ' No compila con "Option Strict", usar el de abajo
' formulario = Ctype(Activator.CreateInstance(type), Form)
formInstances(type.ToString()) = formulario
End If
formulario.Activate()
formulario.WindowState = FormWindowState.Normal
If dialog Then
formulario.ShowDialog()
Else
formulario.Show()
End If
Return formulario
End Function
Saludos
PS. El error te manda porque el "=" lo está interpretando como comparación y no como asignación.