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

MOACK:韩国服务器/双E5-2450L/8GB内存/1T硬盘/10M不限流量,$59.00/月

Moack怎么样?Moack(蘑菇主机)是一家成立于2016年的商家,据说是国人和韩国合资开办的主机商家,目前主要销售独立服务器,机房位于韩国MOACK机房,网络接入了kt/lg/kinx三条线路,目前到中国大陆的速度非常好,国内Ping值平均在45MS左右,而且商家的套餐比较便宜,针对国人有很多活动。不过目前如果购买机器如需现场处理,由于COVID-19越来越严重,MOACK办公楼里的人也被感染...

BuyVM老牌商家新增迈阿密机房 不限流量 月付2美元

我们很多老用户对于BuyVM商家还是相当熟悉的,也有翻看BuyVM相关的文章可以追溯到2014年的时候有介绍过,不过那时候介绍这个商家并不是很多,主要是因为这个商家很是刁钻。比如我们注册账户的信息是否完整,以及我们使用是否规范,甚至有其他各种问题导致我们是不能购买他们家机器的。以前你嚣张是很多人没有办法购买到其他商家的机器,那时候其他商家的机器不多。而如今,我们可选的商家比较多,你再也嚣张不起来。...

HostKvm:夏季优惠,香港云地/韩国vps终身7折,线路好/机器稳/适合做站

hostkvm怎么样?hostkvm是一家国内老牌主机商家,商家主要销售KVM架构的VPS,目前有美国、日本、韩国、中国香港等地的服务,站长目前还持有他家香港CN2线路的套餐,已经用了一年多了,除了前段时间香港被整段攻击以外,一直非常稳定,是做站的不二选择,目前商家针对香港云地和韩国机房的套餐进行7折优惠,其他套餐为8折,商家支持paypal和支付宝付款。点击进入:hostkvm官方网站地址hos...

suspendlayout为你推荐
数据监测什么是媒体监测?orphanremoval我的电脑开机时自检,出现许多这样的字样:Deleting orphan file record segment XXXX (XXXX代表数字)。华为总裁女儿为啥姓孟总裁文女主姓孟,女主父母抱错孩子,后来将错就错,养父母对女主很好搜索引擎的概念搜索引擎营销的概念是什么?防火墙排名什么防火墙最好star413CONVERSE和ALLSTAR有什么区别网络电话永久免费打有没有永久免费打电话的网络电话啊?jstz举手望,草上马跑,打什么数字?什么是生态系统什么是生态环境?文本框透明word里文本框怎么透明?
个人注册域名 到期域名查询 广州主机租用 域名解析文件 老域名全部失效请记好新域名 韩国空间 wordpress技巧 好看的留言 淘宝双十一2018 天猫双十一抢红包 国外代理服务器软件 河南移动m值兑换 绍兴电信 新睿云 无限流量 google台湾 yundun 河南移动梦网 华为云建站 腾讯数据库 更多