C#位图活动窗体>;对象引用未设置为对象的实例
几天以来,我一直在努力解决我的活动表单截图函数中的错误C#位图活动窗体>;对象引用未设置为对象的实例,c#,bitmap,C#,Bitmap,几天以来,我一直在努力解决我的活动表单截图函数中的错误 对象引用未设置为对象的实例 我的问题:在运行我的exe几个小时后,出现了错误(重新启动,它工作时没有错误) 该函数的作用:打开表单,初始化新图表,填写表单,截图表单并保存截图 代码> var frm = Form3.ActiveForm; await Task.Delay(2000); using (var bmp = new Bitmap(fr
对象引用未设置为对象的实例
我的问题:在运行我的exe几个小时后,出现了错误(重新启动,它工作时没有错误)
该函数的作用:打开表单,初始化新图表,填写表单,截图表单并保存截图
代码>
var frm = Form3.ActiveForm;
await Task.Delay(2000);
using (var bmp = new Bitmap(frm.Width, frm.Height))
{
frm.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save("TestX.png");
}
其他代码,但无法解决错误
WindowState = FormWindowState.Maximized;
FormBorderStyle = FormBorderStyle.None;
Bounds = Screen.PrimaryScreen.Bounds;
BringToFront();
错误在这里>(frm.Width,frm.Height)因为表单不在我所有其他应用程序的前面,并且没有宽度/高度,我想。。。如果我重新启动exe,错误就被解决了,我的表单再次出现在所有其他应用程序面前,几个小时后我又出现了问题
是否有一些技巧可以解决它/或者表单不能放在所有人前面?这是因为,在某个时候,应用程序不再具有活动表单,并且
Form3.ActiveForm
属性返回null
,而不是表单对象。看
我建议您不要使用.ActiveForm
,而是做一些其他事情来确定当前表单(我怀疑它必须是活动的)-如果此代码是表单codebehind的一部分,那么即使此
也可以工作
using (var bmp = new Bitmap(this.Width, this.Height))
如果代码不在表单codebehind中,则可以将表单实例传递给创建屏幕截图的任何帮助器类
ScreenshotHelper sh = new ScreenshotHelper(this); // assuming you create the helper as part of your form codebehind
很好的回答,我可以接受:)谢谢你,看起来它现在起作用了:)