suspendlayoutC#中ResumeLayout(false)错误(急)

suspendlayout  时间:2021-06-05  阅读:()

窗体中怎么让toolstrip漂浮(停靠已经做出来了)(C#)

DotNet2.0开发框架中提供的ToolStrip和ToolStripPanel控件可以方便开发具有可停靠工具栏功能的Windows应用程序, ToolStrip对象可以在各个ToolStripPanel间完成拖拽停靠,但是如果想实现类似VS IDE 或Office中可以浮动的工具栏必须借助于DevExpress等一些第三方的控件或编写一定的代码。

这里介绍一种比较简单的方法,只需继承ToolStrip类即可实现上述的效果。

  放置到ToolStripPanel上的,当工具栏浮动的时候,事实上是改变了其所在的容器对象,从其所在的ToolStripPanel移动到一个漂浮的容器上,因此要实现工具栏的浮动必须解决以下两个问题:     必须有一个浮动的容器来承载ToolStrip对象。

    须知道ToolStrip对象何时改变其所在的容器,即在浮动的容器和主窗口上ToolStripPanel之间停靠。

  对于第一个问题,我们的解决方案是动态的创建一个Form类作为浮动的容器,命名为ToolStripFloatWindow,该Form对象具有以下的属性:     FormBorderStyle = FixedToolWindow 边框样式     ShowInTaskbar = false 不在任务栏显示     ShowIcon = false 不显示窗口图标     TopMost = true 在所有窗口之上   为了解决第二个问题,我们查阅MSDN获知,当用鼠标拖拽ToolStrip对象释放鼠标时会触发其EndDrag事件。

我们在这个事件的处理方法中判断当ToolStrip对象的位置被移动到所在的ToolStripPanel之外的时候,创建ToolStripFloatWindow对象,并将ToolStrip对象移动到ToolStripFloatWindow上;要使ToolStrip对象恢复到原来的窗体上只要判断ToolStripFloatWindow对象的位置是否移动到了ToolStripPanel上, 当条件满足时将ToolStrip对象移动回ToolStripPanel中并销毁ToolStripFloatWindow对象。

  此外,还要解决当ToolStrip对象放置到ToolStripFloatWindow对象上时, ToolStripFloatWindow对象必须与ToolStrip对象的尺寸一致。

还有ToolStripFloatWindow对象被点击了关闭按钮时不能将自己关闭。

我们可以做两个类来实现上述的思路。

ToolStripFloatWindow类继承自Form类。

MyToolStrip 继承自ToolStrip类。

增加了相应的属性和方法。

MyToolStrip类的源代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace FloatingToolStrip ...{ public partial class MyToolStrip : ToolStrip ...{ public MyToolStrip() ...{ InitializeComponent(); this.EndDrag += new EventHandler(MyToolStrip_EndDrag); this.SizeChanged += new EventHandler(MyToolStrip_SizeChanged); } protected override void OnPaint(PaintEventArgs pe) ...{ // TODO: 在此处添加自定义绘制代码 // 调用基类 OnPaint base.OnPaint(pe); }   漂浮状态#region 漂浮状态 private ToolStripFloatWindow floatWindow; public ToolStripFloatWindow FloatWindow ...{ get ...{ return this.floatWindow; } set ...{ floatWindow = value; if (FloatWindow != null) ...{ floatWindow.LocationChanged += new EventHandler(floatWindow_LocationChanged); floatWindow.FormClosing += new FormClosingEventHandler(floatWindow_FormClosing); } } } public bool isFloating ...{ get ...{ return (floatWindow != null); } } private ToolStripPanel tsPanel; public ToolStripPanel ToolStripPanel ...{ get ...{ return this.tsPanel; } set ...{ tsPanel = value; } } #endregion   漂浮实现#region 漂浮实现 private void floatWindow_LocationChanged(object sender, EventArgs e) ...{ //当floatwindws的位置移动到 toolstrippanel中时,将this放置到 toolstripPanel上 if (this.floatWindow == null) ...{ return; } Point currentPt = new Point(floatWindow.Location.X, floatWindow.Location.Y); Point minpt = this.tsPanel.PointToScreen(tsPanel.Location); Point maxpt; if(this.tsPanel.Height <= 20)...{ maxpt = new Point(minpt.X + this.tsPanel.Width, minpt.Y + 20); }else...{ maxpt = new Point(minpt.X + this.tsPanel.Width, minpt.Y + this.tsPanel.Height); } if ((currentPt.X > minpt.X) && (currentPt.X < maxpt.X) && (currentPt.Y > minpt.Y) && (currentPt.Y < maxpt.Y)) ...{ this.floatWindow.Controls.Remove(this); this.tsPanel.SuspendLayout(); this.tsPanel.Controls.Add(this); this.Location = this.tsPanel.PointToClient(currentPt); this.tsPanel.ResumeLayout(); this.floatWindow.Dispose(); this.floatWindow = null; } } private void MyToolStrip_EndDrag(object sender, EventArgs e) ...{ //判断移出时 if (this.tsPanel == null) ...{ MessageBox.Show("请先设置ToolStripPanel属性"); return; } Point endPoint = Cursor.Position; int openX, openY; openX = endPoint.X; openY = endPoint.Y; Point clientPt = this.tsPanel.Parent.PointToClient(endPoint); if (clientPt.Y > tsPanel.Height) ...{ ToolStripFloatWindow fw = new ToolStripFloatWindow(); this.tsPanel.Controls.Remove(this); fw.Controls.Add(this); this.Left = 0; this.Top = 0; this.FloatWindow = fw; Point newLoc = new Point(openX, openY); fw.Show(); fw.Location = newLoc; fw.SetBounds(newLoc.X, newLoc.Y, this.ClientSize.Width, this.ClientSize.Height); } } private void floatWindow_FormClosing(object sender, FormClosingEventArgs e) ...{ e.Cancel = true; } private void MyToolStrip_SizeChanged(object sender, EventArgs e) ...{ if (this.isFloating) ...{ this.floatWindow.Width = this.ClientSize.Width; } } #endregion } } 结论。

该方法实现较简单, 当不愿意使用功能较强大的第三方控件库时可以采用这种方法,缺点是负责浮动的容器是一个窗口,不大美观。

C#中在panel控件上动态创建100个小的panel控件!所以在加载时闪的厉害!!特求教高手帮

this.SuspendLayout(); // 加载panel this.ResumeLayout(); this.PerformLayout(); wandsg@ 发代码看看

怎样让form窗体标题左对齐

一般情况下,窗口标题栏的文字都是左对齐的,也就是显示在最左边,如果不是,实现方法如下:内置的属性设置代码,可参考下面这个代码片段: 01 private void InitializeComponent() 02 { 03 this.SuspendLayout(); 04 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 05 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 06 this.BackgroundImage = global::WindowsTitleleft.Properties.Resources. 背景 2; 07 this.ClientSize = new System.Drawing.Size(248, 144); 08 this.Name = "Form1"; 09 this.RightToLeft = System.Windows.Forms.leftToright.Yes; 10 this.Text = "标题栏文字左对齐"; 11 this.ResumeLayout(false); 12 }

C#中ResumeLayout(false)错误(急)

System.ArgumentException 在向方法提供的其中一个参数无效时引发的异常。

检查出错的方法ResumeLayout(false)中引入参数(false)的类型数量及顺序与该方法的定义有何不同,更正它。

热网互联33元/月,香港/日本/洛杉矶/韩国CN2高速线路云主机

热网互联怎么样?热网互联(hotiis)是随客云计算(Suike.Cloud)成立于2009年,增值电信业务经营许可证:B1-20203716)旗下平台。热网互联云主机是CN2高速回国线路,香港/日本/洛杉矶/韩国CN2高速线路云主机,最低33元/月;热网互联国内BGP高防服务器,香港服务器,日本服务器全线活动中,大量七五折来袭!点击进入:热网互联官方网站地址热网互联香港/日本/洛杉矶/韩国cn2...

飞讯云E5-2678V3 64GB,湖北十堰100G高防物理机330元/月

飞讯云官网“飞讯云”是湖北飞讯网络有限公司旗下的云计算服务品牌,专注为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。飞讯云是国内为数不多具有ISP/IDC双资质的专业云计算服务商,同时持有系统软件著作权证书、CNNIC地址分配联盟成员证书,通过了ISO27001信息安全管理体系国际认证、ISO9001质量保证体系国际认证。 《中华...

HostWebis:美国/法国便宜服务器,100Mbps不限流量,高配置大硬盘,$44/月起

hostwebis怎么样?hostwebis昨天在webhosting发布了几款美国高配置大硬盘机器,但报价需要联系客服。看了下该商家的其它产品,发现几款美国服务器、法国服务器还比较实惠,100Mbps不限流量,高配置大硬盘,$44/月起,有兴趣的可以关注一下。HostWebis是一家国外主机品牌,官网宣称1998年就成立了,根据目标市场的不同,以不同品牌名称提供网络托管服务。2003年,通过与W...

suspendlayout为你推荐
声纹识别声纹识别是啥意思oa办公系统下载办公软件下载哪里可以下载啊?主要是公司准备搞这个东西,我先看看什么情况扫图扫图要怎么修图搜索引擎的概念什么是搜索引擎?搜索引擎是如何工作的?搜索引擎的概念什么叫搜索引擎?搜索引擎的类型有哪些?awvawv转换器哪里下?鄂n鄂A鄂B鄂C鄂D鄂E鄂F鄂G鄂H鄂J鄂K鄂L鄂M鄂N鄂P鄂Q鄂R鄂S鄂T鄂U分别代表湖北省的哪些城市数据统计分析表EXCEL怎么制作百分比数据分析表图云盘网谁知道免费的网盘?activitygroupActivityGroup子activity之间的切换效果怎么实现
vps交流 新世界机房 外贸主机 新世界电讯 服务器cpu性能排行 ubuntu更新源 免费全能空间 骨干网络 可外链相册 tna官网 hktv 华为云盘 美国凤凰城 什么是web服务器 net空间 论坛主机 石家庄服务器托管 qq金券 cdn加速 百度新闻源申请 更多