form上面有个menustrip控件,保存图像时是保存整个窗体的图像,但是把整个menustrip也保存下来了,于是在保存时把menustrip设置为不可见,可保存后还是出现了控件的灰色条条,还有个问题就是点击菜单“保存图片”后也出现一块灰色区域,保存后那块灰色区域也保存了,有什么办法解决啊?
解决方案 »
- 问一个 程序提示 "应用程序正常初始化失败的问题 0xc000000007b" 问题
- C#连接数据库问题
- 没分了,再问一问题,textbox1中输入多关键字用空格分开,怎么分别一个一个的读出来啊??
- 如何在winform下嵌入简单的网页
- [急]如何用c#实现拖放图片到photoshop中自动打开??
- C#中调用应用程序的方式
- c#调用sqldmo.dll,只作安装包的问题
- ASP.NET、C#Windows窗体与web窗体、ActiveX控件、客户端下载、数据输入的易用性■■■■■
- 在线等待:如何在C#中将string类型的数值转变为整数类型(或者相反)?
- 急救!!!
- 水晶报表采用PUSH模式出错 The report has no tables.
- 关于显示时间的功能问题
至于菜单区域的问题,可以在点击菜单之时启动一个定时器,稍微等待一会儿之后再启动保存方法。
FormBorderStyle FmBdr = new FormBorderStyle();
FmBdr = this.FormBorderStyle;
this.FormBorderStyle = Windows.Forms.FormBorderStyle.None;
using (Bitmap BP = new Bitmap(this.Width, this.Height - MenuStrip1.Height)) {
using (Bitmap tmpBP = new Bitmap(this.Width, this.Height)) {
this.DrawToBitmap(tmpBP, new Rectangle(0, 0, this.Width, this.Height));
using (Graphics G = Graphics.FromImage(BP)) {
G.DrawImage(tmpBP, new Rectangle(0, 0, BP.Width, BP.Height), new Rectangle(0, MenuStrip1.Height, BP.Width, BP.Height - Height), GraphicsUnit.Pixel);
}
BP.Save("c:\\123.bmp"); //保存图像
}
}
this.FormBorderStyle = FmBdr;
}
减去MenuStrip的高度,实际上标题栏没了,而MenuStrip可能还在。
****************************************************************
看帖一定要回,分也一定要接哦 ^_^
****************************************************************[/align]
然后保存panel里的图像,这样就不会把menu也给弄下来了。
.net 2.0里默认的编程MenuStrip。
不过MainMenu的属性里没有快捷键的设置,少了一些功能,
但是他在窗体上保存图像的时候不会跟图像一起保存下来。
你没有仔细看代码,我是从MenuStrip1下面开始截图的,也就是图的左上角是左MenuStrip1下面.这样截出来的图当然没有MenuStrip1了.
而MenuStrip的上方应该还有个标题栏的。
另外,为什么不干脆使用menuStrip1.Bottom或this.ClientRectangle?
不同的系统ClientRectangle是不同的,比如在XP下,它的X值不是0,而是经过了一条边框,然而在VISTA下,由于VISTA的玻璃特效,窗体本身的ClientRectangle的X值就是0,我是为了该代码能够兼容各种不同的操作系统,才想出这种方法.
如果是XP系统,工作区和非工作区的坐标还是不同的,然而为了适应各种系统的兼容,我采用了无设置无边框然后截图,然后再恢复边框,或许会闪一下,但这使得截的图能很精确.
当一个控件的顶部是0时,bottom跟height有何区别?
当一个控件的顶部是0时,form.height-bottom跟height有何区别?
相反,还省一个计算过程.
已经设置了窗体为无边框FormBorderStyle=None
此时MenuStrip就是最顶部的,它的Top就是0.
既然已经无边框了,就不需要再考虑边框不边框了.
{
Bitmap _FormImage = new Bitmap(this.Width, this.Height); this.DrawToBitmap(_FormImage, new Rectangle(0, 0, this.Width, this.Height)); Rectangle _Height = this.RectangleToScreen(menuStrip1.Bounds);
int _Index = _Height.Y - this.Location.Y + menuStrip1.Height; _FormImage.Clone(new Rectangle(0, _Index, this.Width, this.Height - _Index), PixelFormat.Format24bppRgb).Save(@"C:\1.bmp");
}这样看看.