我知道如何使用Graphics类型的对象(至少我能够渲染图像)但我总是通过传递从OnPaint方法检索的图形对象来做到这一点。
我想在应用程序打开时显示图像(即在Form_Load方法中),但不知道如何获取我可以使用的Graphics对象的实例? 感谢
答案 0 :(得分:13)
使用OnPaint()提供给您的e.Graphics对象是正确的方法。它将在OnLoad()方法之后运行。该表单在OnLoad中不可见。
支持从Control.CreateGraphics()获取Graphics对象。但是,一旦表单重新绘制自己,用它绘制的任何内容都将被删除。当用户在您的另一个窗口(Aero前)移动窗口或者最小化并恢复窗口或以其他方式调整窗口大小时,会发生这种情况。只有在高速动画时才使用CreateGraphics。
答案 1 :(得分:2)
如果您尝试从表单的表面创建图形对象,可以使用this.CreateGraphics
如果您尝试创建新图片,可以随时初始化Image
,然后拨打Graphics.CreateGraphics.FromImage(YourImage)
,例如
Bitmap b = new Bitmap(100,100);
var g = Graphics.CreateGraphics.FromImage(b);
此时,对Graphics对象执行的任何绘制都将绘制到图像上。
答案 2 :(得分:0)
form.CreateGraphics();
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.creategraphics.aspx
答案 3 :(得分:0)
您打算如何使用Load事件中的Graphics对象?
如果你想在屏幕上画一些东西,你必须在Paint事件中,否则它将在下一个画面上被清除。
你可以做什么:加载另一个(简单)表单,只有一张图片,并在加载主表单时隐藏它。
由于您的Load事件可能会在UI线程上运行。调用DoEvents以显示其他表单。
答案 4 :(得分:0)
以上答案都不适合我。我发现Rajnikant Rajwadi解决方案有效(请参阅https://social.msdn.microsoft.com/Forums/vstudio/en-US/ce90eb80-3faf-4266-b6e3-0082191793f7/creation-of-graphics-object-in-wpf-user-control?forum=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));