如何在WinForms中手动获取Graphics对象的实例?
我知道如何使用Graphics类型的对象(至少我能够渲染图像)但我总是通过传递从OnPaint方法检索的图形对象来做到这一点。
我想在应用程序打开时显示一个图像(即在Form_Load方法中),但不知道如何获取我可以使用的Graphics对象的实例? 谢谢
使用OnPaint()提供给您的e.Graphics对象是正确的方法。 它将在OnLoad()方法之后运行。 OnLoad中尚未显示该表单。
从Control.CreateGraphics()获取Graphics对象是受支持的。 但是,一旦表格重新粉饰,你用它绘制的任何内容都将被删除。 当用户移动您的另一个窗口(Aero之前)或最小化并恢复或以其他方式调整窗口大小时,会发生这种情况。 仅在以高速率制作动画时才使用CreateGraphics。
如果您尝试从表单的表面创建图形对象,则可以使用this.CreateGraphics
如果您尝试创建新图像,则可以始终初始化Image
,然后调用Graphics.CreateGraphics.FromImage(YourImage)
例如
Bitmap b = new Bitmap(100,100); var g = Graphics.CreateGraphics.FromImage(b);
此时,对Graphics对象执行的任何绘制都将绘制到图像上。
form.CreateGraphics();
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.creategraphics.aspx
您打算如何使用Load事件中的Graphics对象?
如果要在屏幕上绘制某些内容,则必须处于“Paint”事件中,否则将在下一次绘制时清除它。
你可以做什么:加载另一个(简单)表单,只有一张图片,并在加载主表单时隐藏它。
由于您的Load事件可能会在UI线程上运行。 调用DoEvents以显示其他表单。
以上所有答案都不适用于我。 我发现Rajnikant Rajwadi解决方案有效(请参阅https://social.msdn.microsoft.com/Forums/vstudio/en-US/ce90eb80-3faf-4266-b6e3-0082191793f7/creation-of-graphics-object-in-wpf-用户控制?论坛= wpf )
这是对Graphics.MeasureString()
一个非常简洁的调用。 (请更负责任地编码)
SizeF sf = System.Drawing.Graphics.FromHwnd(new System.Windows.Interop.WindowInteropHelper(this).Handle).MeasureString("w", new Font(TheControl.FontFamily.ToString(), (float)TheControl.FontSize));