vb.net 只要打开一个子窗口
我想在vb.net(from)中只要打开一个子窗口,同样的子窗口不让打开,怎么办呢?--------------------编程问答-------------------- bool OpenOnce(Form frm)
{
foreach (Form mdifrm in this.MdiChildren)
{
if (frm.Name == mdifrm.Name)
{
mdifrm.Activate();
return false;
}
}
return true;
} --------------------编程问答-------------------- 简单方法:
'调用
If OpenOnce(Form2) = False Then
FormToShow.MdiParent = Me
FormToShow.Show()
End If
'检查MDI是否已运行,是返回true
Private Function OpenOnce(ByVal myform As Form) As Boolean
Dim frm As Form
For Each frm In Me.MdiChildren
If InStr(frm.Text, myform.Text) > 0 Then
frm.Activate()
Return True
End If
Next
Return False
End Function --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- If OpenOnce(Form2) = False Then
FormToShow.MdiParent = Me
FormToShow.Show()
End If
先定义一个窗体用上面的这个加载就可以了.根本不用判断. --------------------编程问答--------------------
不错,可以试试 --------------------编程问答-------------------- 恩...吧我的c#代码转换成vb.....
--------------------编程问答-------------------- VB 2005及后续版本 提供了极其简单的方法 来解决楼主的问题:
试一试,在代码的任何地方书写:
My.Forms.Form1.Show()
--------------------编程问答-------------------- 根据字符打开特定窗口,避免重复加载:
''' <summary>
''' 打开Mdi窗体子窗体
''' </summary>
''' <param name="FormName"></param>
''' <param name="NewWindow"></param>
''' <param name="MaxWindow"></param>
''' <remarks></remarks>
Public Function OpenWindow(ByVal FormName As String, Optional ByVal NewWindow As Boolean = False, Optional ByVal MaxWindow As Boolean = True) As Form
'检查是否已经存在了
Dim II As Integer, tempChild As Form
If NewWindow = False Then
For II = 0 To MDIParent.MdiChildren.Length - 1
tempChild = CType(MDIParent.MdiChildren(II), Form)
If tempChild.Name = FormName Then
tempChild.Focus() : Return tempChild
End If
Next
End If
' 也可以用反射动态加载其他的assembly
Dim asm As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly()
Dim frm As New Form
frm = CType(asm.CreateInstance("LDAsset." + FormName), Form)
frm.MdiParent = MDIParent
frm.StartPosition = FormStartPosition.Manual
If MaxWindow = True Then '先设置状态并不好用的~~
frm.WindowState = FormWindowState.Maximized
End If
frm.Show()
Return frm
End Function
││博客空间:http://blog.csdn.net/lovingkiss
││资源下载:http://download.csdn.net/user/lovingkiss
││Email:loving-kiss@163.com [MSN也是这个]
││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤ --------------------编程问答-------------------- 楼上说的
My.Forms.FilterWin.Show()
My.Forms.FilterWin.Focus()
这在VS2005中是可行的,但是可控性必然差了点。
--------------------编程问答-------------------- 留個腳印,最近正好在學習MDI的東西。 --------------------编程问答-------------------- 五钻!!哈哈 --------------------编程问答-------------------- 有那么麻烦?用ShowDialog不就只打开一个窗口吗,父窗体都不让操作,还怎么打开子窗体了 --------------------编程问答-------------------- 如果是winfor
那就用ShowDialog这个方法把
这个只允许打开的窗体进行操作
关闭之后
继续执行ShowDialog之后的代码 --------------------编程问答-------------------- Dim myFrm
myFrm = New form1
myFrm.MdiParent = Me
myFrm.Show()
如果是上面这样显示的话,每次打开都要初始化,所以会重复打开。
可以直接在按钮或菜单里面用下面的代码:
form1.MdiParent = Me
form1.Show() --------------------编程问答-------------------- 很简单
dim frm as form
for each frm in me.mdichildren
if type frm is abcd then
frm.activate()
exit sub
next
dim frm as new abcd
frm.mdiparent=me
frm.show() 'abcd 是你的窗口的名
--------------------编程问答-------------------- 嗯,先占一个位,前一段时间也在找类似的解决方案.
后来干脆所有的界面都单独显示了.
以后再需要用的时候来这儿查吧,
先留个记号 --------------------编程问答-------------------- 还有一种方法用定义一个静态属性(以FORM2为例):
在FORM2中定义如下:
private shared ms_frmMe as form2
private shared readonly property DefInstance as form2
if ms_frmMe is nothing orelse ms_frmMe.isdisposed then'注意一定两条件次序不能换,而且一定要用orelse连接(不能用OR)
ms_frmMe=new form2
end if
return ms_frmMe
end property
调用它的时候:
form2.definstance.show
form2.bringtofront
就可以了. --------------------编程问答-------------------- 谢谢大家。 --------------------编程问答-------------------- ‘在菜单项里加
If GetInstanceState("子窗体名") Then
Exit Sub
Else
’执行菜单命令
End If
'判断子窗体是否运行
Private Function GetInstanceState(ByVal name As String) As Boolean
'获得子窗体的数量
Dim i As Integer = Me.MdiChildren.Length
For i = 0 To Me.MdiChildren.Length - 1
If Me.MdiChildren(i).Name = name Then
'存在名为name的了窗体,子窗体获得焦点返回true
Me.MdiChildren(i).Focus()
Return True
End If
Next
'不存在名为name的子窗体,返回false
Return False
End Function --------------------编程问答-------------------- 重写子窗口的init函数
用互斥
mobjMutex = New Mutex(False, Me.MutexName)
If Not mobjMutex.WaitOne(0, False) Then
Throw New System.ApplicationException("已经启动")
End If
MutexName可以用 前缀+apId的方式。 --------------------编程问答-------------------- 模块级别申明
shared f1 as form1
在子程序中输入如下代码
F1=FORM1
F1.SHOW --------------------编程问答--------------------
补充:.NET技术 , VB.NET