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)的类型数量及顺序与该方法的定义有何不同,更正它。

香港、美国、日本、韩国、新加坡、越南、泰国、加拿大、英国、德国、法国等VPS,全球独立服务器99元起步 湘南科技

全球独立服务器、站群多IP服务器、VPS(哪个国家都有),香港、美国、日本、韩国、新加坡、越南、泰国、加拿大、英国、德国、法国等等99元起步,湘南科技郴州市湘南科技有限公司官方网址:www.xiangnankeji.cn产品内容:全球独立服务器、站群多IP服务器、VPS(哪个国家都有),香港、美国、日本、韩国、新加坡、越南、泰国、加拿大、英国、德国、法国等等99元起步,湘南科技VPS价格表:独立服...

天上云月付572元,起香港三网CN2直连,独立服务器88折优惠,香港沙田机房

天上云怎么样?天上云隶属于成都天上云网络科技有限公司,是一家提供云服务器及物理服务器的国人商家,目前商家针对香港物理机在做优惠促销,香港沙田机房采用三网直连,其中电信走CN2,带宽为50Mbps,不限制流量,商家提供IPMI,可以自行管理,随意安装系统,目前E3-1225/16G的套餐低至572元每月,有做大规模业务的朋友可以看看。点击进入:天上云官方网站天上云香港物理机服务器套餐:香港沙田数据中...

湖北50G防御物理服务器( 199元/月 ),国内便宜的高防服务器

4324云是成立于2012年的老牌商家,主要经营国内服务器资源,是目前国内实力很强的商家,从价格上就可以看出来商家实力,这次商家给大家带来了全网最便宜的物理服务器。只能说用叹为观止形容。官网地址 点击进入由于是活动套餐 本款产品需要联系QQ客服 购买 QQ 800083597 QQ 2772347271CPU内存硬盘带宽IP防御价格e5 2630 12核16GBSSD 500GB​30M​1个IP...

suspendlayout为你推荐
宝应中学江苏省宝应中学的知名校友webproxy什么是PAC网址at89s52单片机有谁知道单片机如AT89c52,AT89s52具体是指什么含义啊?数据监测运动手表的数据监测都准确吗?搜索引擎的概念什么是搜索引擎?搜索引擎是如何工作的?数据统计分析表怎样建立数据透视表和数据分析表?腾讯技术腾讯是什么东西?棋牌论坛三个知名的游戏相关论坛,要求有网址的!什么是生态系统生态系统的结构是什么labelforandroid:labelfor是什么意思
购买域名和空间 香港ufo 老鹰主机 私服服务器 42u机柜尺寸 密码泄露 qq数据库 免费全能空间 合肥鹏博士 qq数据库下载 国外ip加速器 万网主机管理 万网空间管理 德隆中文网 php服务器 百度云空间 防cc攻击 黑科云 开心online reboot 更多