电脑刚刚小白重装系统安全吗了系统,以前能安上的nevisworks,现在安不上,求大神解答

在使用DockPanel时 需要注意的几个小问题
使用过DockPanel的人,都有可能会遇到这样一个错误:
Invalid Content: ActiveContent must
be one of the visible contents, or null if there is no visible
翻译过来的意思大致是:无效的内容:如果没有一个可见的内容,ActiveContent必须是可见的内容或空。
具体是什么原因,大家可以相互探讨下。下面我说说出现这个问题的几种情况
&代码中的this关键字代表的就是Dockpanel所在的窗体为Form1
1)、当Dockpanel的DocumentStyle不为DockingMdi时,以下代码会出现这个问题&&&&&&
Frm_A frmA =
//判断子窗体中是否已经存在在DockPanel中
foreach (DockContent frm in this.dockPanel1.Contents)
&&&&&&&&&&&&
if (frm is Frm_A)
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
frm.Activate();&&&&
//激活子窗体
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
frmA = new Frm_A();
&&&&&&&&&&&
frmA.MdiParent =
&&&&&&&&&&&
frmA.Show(this.dockPanel1);
解决方案:看你设置Dockpanel的DocumnetStyle是否为DockingMdi。大家也可以试试其他几种方式(DockingWindow,DockingSdi,SystemMdi)
2)、设置了Dockpanel的DocumentStyle不为DockingMdi时,如果你想要设置窗体Frm_B为左边浮动窗体,需要设置窗体Frm_B的DockAreas为且仅为DockLeft,如果想要实现其他功能可自行去设置其他属性信息,现在请看下面代码
&&&&&&&&&&&
Frm_B frmB =
&&&&&&&&&&&
//判断子窗体中是否已经存在在DockPanel中
&&&&&&&&&&&
foreach (DockContent frm in this.dockPanel1.Contents)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
if (frm is Frm_B)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
frm.Activate();&&&&
//激活子窗体
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
frmB = new Frm_B();
&&&&&&&&&&&
//frmB.MdiParent =
&&&&&&&&&&&
frmB.Show(this.dockPanel1,DockState.DockLeft);
&&&&&&&&&&&
注意,如果你在你的代码中加了红色注释的代码,那么程序运行时 也会报上面的那个错
&&&&&&&&&&&
解决方案:注释红色的代码。
&&&&&&&&&&&
原因:(个人理解)frmB.Show(this.dockPanel1,DockState.DockLeft);这句代码其实就设置了frmB只停靠在DockPanel左边,此时的frmB是不属于MDI子窗体的,所以一旦你加入红色的代码,程序就会报错。
拖动、停靠、固定子窗体(显示在Dockpanel中)
拖动:如果你想使你的子窗体可以任意拖动,那么你在设置子窗体的DockAreas属性时,保持默认值,不要修改。
停靠:首先你需设置DockAreas的位置,可以停靠在左、右、下等,也可以通过程序代码控制,参考上面代码。
固定:只需设置你窗体的DockAreas为Document就行了
子窗体和Contents的判断
很多时候你需要判断Dockpanel中存在多少个子窗体或Contents,请参考下面代码:
foreach(Form in this.MdiChildren)
//这样判断时,停靠的窗体是不会计算在内的
foreach (DockContent frm in this.dockPanel1.Contents)
//这样设置后,所有的继承与DockContent的窗体都会被计算在内的
寻找主窗体、动态显示子窗体
实现的功能:这里我们需要实现,右键点击A窗体,通过右键菜单来显示窗体B。
& //主窗体的对象
& Form1 form1;
private void showB_Click(object senders, EventArgs e)
GetFrmMain();& //通过此函数来获取form1
&&&&&&&&&&
foreach (Form frm in form1.MdiChildren)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
if (frm is Frm_B)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
frm.Activate();
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
Frm_B frmB = new Frm_B(this);
&&&&&&&&&&&
frmB.MdiParent = form1;
&&&&&&&&&&&
frmB.Show(form1.dockPanel1);
private void GetFrmMain()
&&&&&&&&&&&&&
if (this.Parent.Parent.Parent.Parent != null)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
form1 = (Form1)this.Parent.Parent.Parent.P
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
form1 = (Form1)this.Parent.Parent.P
&&&&&&&&&&&&&&&
现在是在A窗体中,this关键字已经代码的不是主窗体了,那么这里我们就需要获取主窗体对象
当A窗体停靠时,需要this.Parent.Parent.Parent.Parent(四个)
不停靠时,只需要三个this.Parent.Parent.Parent
调试代码发现:停靠时
this.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockPane}
this.Parent.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockWindow,
BorderStyle: System.Windows.Forms.BorderStyle.None}
this.Parent.Parent.Parent 为
{WeifenLuo.WinFormsUI.Docking.DockPanel, BorderStyle:
System.Windows.Forms.BorderStyle.None}
this.Parent.Parent.Parent 为 {TestEvenhandler.Form1, Text: Form1}
就是我们要找的主窗体Form1
不停靠时:
this.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockPane}
this.Parent.Parent 为
{WeifenLuo.WinFormsUI.Docking.DockPanel+AutoHideWindowControl,
BorderStyle: System.Windows.Forms.BorderStyle.None}
this.Parent.Parent.Parent 为 {TestEvenhandler.Form1, Text: Form1}
就是我们要找的主窗体Form1
四个小问题,也算不上技巧,是我在开发中遇到过的,里面的缘由可能解释不是很清楚,忘大家相互探讨,共同进步。
DockPanel使用方法
DockPanel有人曰浮动窗体,也就是c#编辑器的样式,如下图:
浮动窗体可以浮动、停靠(上下左右)、分页(如上图的档案录入页面)。
以下记录以下使用方法:
(1)首先找到WeifenLuo.WinFormsUI.Docking.dll,下载WeifenLuo.WinFormsUI.Docking.dll组建(点击下载)。
(2)把该组建添加到引用,创建窗体1为主窗体,窗体2、窗体3为子窗体。把dockpanle工具添加上。
(3)主窗体代码:把dockpanle拖放到主窗体,添加代码 dockPanel1.DocumentStyle =
DocumentStyle.DockingM
(4)子窗体:子窗体继承自: WeifenLuo.WinFormsUI.Docking.DockContent ,
不是继承自form;定义子窗体对象
form1 f1=new form1();
f1.ShowHint = DockState.D
f1.Show(dockPanel1);
显示效果即得到。
另外也记录下状态,下次打开时候任然保持,用以下方法加载记录状态:
(1)private DeserializeDockC
(2)private IDockContent GetContentFromPersistString(string
persistString)
if (persistString == typeof(f1).ToString())
&&&&&&&&&&&&&&&
return f1;
&&&&&&&&&&&
if (persistString == typeof(f2).ToString())
&&&&&&&&&&&&&&&
return f2;
&&&&&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&
string configFile =
bine(Path.GetDirectoryName(Application.ExecutablePath),
"DockPanel.config");
if (File.Exists(configFile))
&&&&&&&&&&&
dockPanel1.LoadFromXml(configFile, ddc);
&&&&&&&&&&&
ddc = new DeserializeDockContent(GetContentFromPersistString);
以上方法加载保存的状态,
string configFile =
bine(Path.GetDirectoryName(Application.ExecutablePath),
"DockPanel.config");
&&&&&&&&&&&
dockPanel1.SaveAsXml(configFile);
另外,要实现各个dockpanle子窗体之间的互动,例如,vs编辑器中,设计界面的时候,选择一个文本框,属性框中的属性随之改变,使用委托可以解决,可以参看本博客的委托应用1.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。本帖子已过去太久远了,不再提供回复功能。您所在的位置: &
排列MDI子窗体
排列MDI子窗体
王小科/吕双
清华大学出版社
《C#从入门到精通》第12章Windows窗体,这一章将详细地介绍Windows窗体的相关知识,讲解过程中为了便于读者理解结合了大量的举例。本小节为大家介绍的是排列MDI子窗体。
12.2.3& 排列MDI子窗体
如果一个MDI窗体中有多个子窗体同时打开,假如不对其排列顺序进行调整,那么界面会非常的混乱,而且不容易浏览。那么如何解决这个问题呢?可以通过使用带有MdiLayout枚举的LayoutMdi方法来排列多文档界面父窗体中的子窗体。
语法如下:
public void LayoutMdi (MdiLayout value)
value:是MdiLayout枚举值之一,用来定义MDI子窗体的布局。
MdiLayout枚举用于指定MDI父窗体中子窗体的布局。
语法如下:
public enum MdiLayout
MdiLayout的枚举成员及说明如表12.3所示。
表12.3& MdiLayout的枚举成员
下面通过一个实例演示如何使用带有MdiLayout枚举的LayoutMdi方法来排列多文档界面父窗体中的子窗体。
例12.8& 创建一个Windows应用程序,向项目中添加4个窗体,然后使用LayoutMdi方法以及MdiLayout枚举设置窗体的排列,开发步骤如下。(实例位置:光盘\TM\sl\12\2)
(1)新建一个Windows应用程序,命名为Test02,默认窗体为Form1.cs。
(2)将窗体Form1的IsMdiContainer属性设置为True,以用作MDI父窗体,然后再添加3个Windows窗体,用作MDI子窗体。
(3)在Form1窗体中,添加一个MenuStrip控件,用作该父窗体的菜单项。
(4)程序的主要代码如下。
通过MenuStrip控件建立4个菜单项,分别为"加载子窗体"、"水平平铺"、"垂直平铺"和"层叠排列"。运行程序时,单击"加载子窗体"菜单后,可以加载所有的子窗体,代码如下。
private void 加载子窗体ToolStripMenuItem_Click(object sender, EventArgs e){Form2 frm2 = new Form2();&&&&&&//实例化Form2frm2.MdiParent =&&&&&&&//设置MdiParent属性,将当前窗体作为父窗体frm2.Show();&&&&&&&&//使用Show方法打开窗体Form3 frm3 = new Form3();&&&&&&//实例化Form3frm3.MdiParent =&&&&&&&//设置MdiParent属性,将当前窗体作为父窗体frm3.Show();&&&&&&&&//使用Show方法打开窗体Form4 frm4 = new Form4();&&&&&&//实例化Form4frm4.MdiParent =&&&&&&&//设置MdiParent属性,将当前窗体作为父窗体frm4.Show();&&&&&&&&//使用Show方法打开窗体}
程序的运行结果如图12.18所示。
图12.18& 加载所有子窗体
加载所有的子窗体之后,单击"水平平铺"菜单,使窗体中所有的子窗体水平排列,代码如下。
private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e){LayoutMdi(MdiLayout.TileHorizontal);&&&&&//使用MdiLayout枚举实现窗体的水平平铺}
程序的运行结果如图12.19所示。
单击"垂直平铺"菜单,使窗体中所有的子窗体垂直排列,代码如下。
private void 垂直平铺ToolStripMenuItem_Click(object sender, EventArgs e){LayoutMdi(MdiLayout.TileVertical);&&&&&//使用MdiLayout枚举实现窗体的垂直平铺}
程序的运行结果如图12.20所示。
图12.19& 水平平铺子窗体
图12.20& 垂直平铺子窗体
单击"层叠排列"菜单,使窗体中所有的子窗体层叠排列,代码如下。
private void 层叠排列ToolStripMenuItem_Click(object sender, EventArgs e){LayoutMdi(MdiLayout.Cascade);&&&&&//使用MdiLayout枚举实现窗体的层叠排列}
程序的运行结果如图12.21所示。
图12.21& 层叠排列子窗体
【责任编辑: TEL:(010)】&&&&&&
关于&&&&&&的更多文章
本书由.NET专家的梦幻组合编写,包含开发人员使用C#所需的所有内
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
讲师: 7人学习过讲师: 31人学习过讲师: 19人学习过
本书由业界最先进的动画库Velocity.js的作者所著,书
本书是一本全面的C++教程,介绍C++编程知识及问题解决
本书主要阐述了云计算中PaaS 平台的实现与运维管理,
Java学习笔记在JavaWorld技术论坛(.tw/)和作者的网站(http://caterpillar.onlyfun.net/Gossip/)提
51CTO旗下网站

我要回帖

更多关于 重装系统不能安装软件 的文章

 

随机推荐