如何在MDI中相同的子窗体只保留一个实例
生活随笔
收集整理的這篇文章主要介紹了
如何在MDI中相同的子窗体只保留一个实例
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
閱讀: 107 評(píng)論: 1 作者: blackcore 發(fā)表于 2009-11-16 14:24 原文鏈接
很明顯,在一個(gè)MDI窗體中,一般來(lái)說(shuō)每個(gè)菜單都會(huì)對(duì)應(yīng)一個(gè)Form,當(dāng)用戶多次單擊某個(gè)菜單時(shí),而我們并不需要同時(shí)彈出多個(gè)與之對(duì)應(yīng)的Form。
所以我們?cè)诓藛问录霞由献哟绑w是否存在的驗(yàn)證就可以解決這個(gè)問(wèn)題了。
代碼如下:
方法一:
?
Code///?
///?檢查MDI子窗體是否存在
///?
///?
///?
private?bool?IsChildFormExist(string?childFrmName)
{
????foreach?(Form?childFrm?in?this.MdiChildren)
????{
????????if?(childFrm.Name?==?childFrmName)?//用子窗體的Name進(jìn)行判斷,如果存在則將他激活
????????{
????????????if?(childFrm.WindowState?==?FormWindowState.Minimized)
????????????{
????????????????childFrm.WindowState?=?FormWindowState.Normal;
????????????}
????????????childFrm.Activate();
????????????return?true;
????????}
????}
????return?false;
}
//調(diào)用示例如下
///?
///?用戶管理
///?
///?
///?
private?void?ToolStripMenuItem_UserManage_Click(object?sender,?EventArgs?e)
{
????if?(string.IsNullOrEmpty(currentLoginName))
????{
????????return;
????}
????//通過(guò)窗體名稱(chēng)查詢?cè)摯绑w是否已經(jīng)存在,如存在則顯示,否則就新創(chuàng)建一個(gè)
????if?(!this.IsChildFormExist("UserForm"))
????{
????????UserForm?frmUser?=?new?UserForm();
????????frmUser.MdiParent?=?this;
????????frmUser.WindowState?=?FormWindowState.Maximized;
????????frmUser.Show();
????}
}
?
方法二:
?
Code///?
///?打開(kāi)窗體
///?
///?
///? ????private?void?ShowWindow(string?mdiChildTypeString)
{
????Form?currentMdiChild?=?null;
????if?(!IsMDIChildFormExist(mdiChildTypeString))
????{
????????Assembly?assembly?=?Assembly.GetExecutingAssembly();
????????Type?typForm?=?assembly.GetType(mdiChildTypeString);
????????//關(guān)于InvokeMember用法,不明白的可以查看:http://msdn.microsoft.com/zh-cn/library/de3dhzwy(VS.80).aspx
????????Object?mdiChild?=?typForm.InvokeMember(
????????????null,
????????????BindingFlags.DeclaredOnly?|?BindingFlags.Public?|?BindingFlags.NonPublic?|?BindingFlags.Instance?|?BindingFlags.CreateInstance,
????????????null,
????????????null,
????????????null);
????????if?(mdiChild?!=?null)
????????{
????????????currentMdiChild?=?mdiChild?as?Form;
????????????currentMdiChild.MdiParent?=?this;
????????????currentMdiChild.WindowState?=?FormWindowState.Maximized;
????????????currentMdiChild.Show();
????????????currentMdiChild.Focus();
????????}
????}
}
///?
///?檢查MDI子窗體是否存在
///?
///?
///? ????????
private?bool?IsMDIChildFormExist(string?mdiChildTypeString)
{
????Form?currentMDIChild?=?null;
????foreach?(Form?mdiChildFrm?in?this.MdiChildren)
????{
????????if?(mdiChildFrm.GetType().ToString()?==?mdiChildTypeString)
????????{
????????????currentMDIChild?=?mdiChildFrm;
????????????break;
????????}
????}
????if?(currentMDIChild?!=?null)
????{
????????if?(currentMDIChild.WindowState?==?FormWindowState.Minimized)
????????{
????????????currentMDIChild.WindowState?=?FormWindowState.Normal;
????????}
????????currentMDIChild.TopMost?=?true;
????????currentMDIChild.Activate();
????????currentMDIChild.Focus();
????????return?true;
????}
????else
????{
????????return?false;
????}
}
//調(diào)用方法如下
///?
///?用戶管理
///?
///?
///?
private?void?ToolStripMenuItem_UserManage_Click(object?sender,?EventArgs?e)
{
????if?(string.IsNullOrEmpty(currentLoginName))
????{
????????return;
????}????
????ShowWindow(typeof(UserForm).ToString());
}
?
發(fā)表評(píng)論
新聞?lì)l道:德國(guó)工程師稱(chēng)破解GSM加密算法 影響80%手機(jī)安全
推薦鏈接:Windows 7專(zhuān)題發(fā)布
網(wǎng)站導(dǎo)航:博客園首頁(yè)??個(gè)人主頁(yè)??新聞??社區(qū)??博問(wèn)??閃存??知識(shí)庫(kù)
轉(zhuǎn)載于:https://my.oschina.net/agile/blog/2125
總結(jié)
以上是生活随笔為你收集整理的如何在MDI中相同的子窗体只保留一个实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SSIS数据流
- 下一篇: 自定义控件的时候为控件增加事件