日期:2014-05-19  浏览次数:20869 次

如何保证一个Form窗体的唯一啊
比如实例一个窗体,并打开它,代码如下   :
Form1   myF=new   Form1();
myF.Show();

它被放在一个按键的事件中。当点击这个按键后就打开这个窗体。

如何保证当窗体被打开后,再点击按键后不再打开新的这个窗体,并且已经打开的窗体会成为焦点窗体。

------解决方案--------------------
把myF放到一个全局变量里,每次Show之前先检查这个变量是否为空,是则new一个新窗体,否则直接Show!
------解决方案--------------------
Form1 myF=new Form1();
放到外面
在里面,你判断是否实例化。并写手写关闭事件

------解决方案--------------------
public class JC_BM_Info : Form
{
private static JC_BM_Info _instance = null;
private JC_BM_Info()
{
InitializeComponent();
BeforeShow();
}
public static JC_BM_Info Instance
{
get
{
if (_instance == null)
{
_instance = new JC_BM_Info();
}
return _instance;
}
}
^^^^^^^^^^^^^^^^^^^^^^^^^
}

调用的时候:

JC_BM_Info frm = JC_BM_Info.Instance;
frm.Show();
frm.Activate();

------解决方案--------------------
try

Form2 f2 = null;
private void button1_Click(object sender, EventArgs e)
{
if (f2 == null || f2.IsDisposed)
{
f2 = new Form2();
f2.Show();
}
else
{
f2.Activate();
}
}
------解决方案--------------------
vb中我是这么做的:

Public Class Form2

Public Shared IsShow As Boolean = False
Public Shared mForm As Form

Public Sub New()

' 此调用是 Windows 窗体设计器所必需的。
InitializeComponent()

' 在 InitializeComponent() 调用之后添加任何初始化。

If IsShow Then
mForm.Focus()
Throw New Exception( "IsShow = True ")
Else
IsShow = True
mForm = Me
End If
End Sub

Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
IsShow = False
mForm.Dispose()
End Sub
End Class


调用的时候:
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim frm As New Form2
frm.Show()
Catch ex As Exception
'MsgBox(ex.Message)
End Try
End Sub
End Class
------解决方案--------------------
private void button1_Click(object sender, EventArgs e)
{
if (frmTwo==null||frmTwo.IsDisposed)
{
frmTwo = new Form();
frmTwo.Text = "新窗体 ";
frmTwo.Show();
}
else
{
frmTwo.Activate();
}
}
这种方法可行