我知道如何使用Graphics類型的對象(至少我能夠渲染圖像),但我總是通過傳遞從OnPaint方法檢索的圖形對象來實現這一點。如何在WinForms中手動獲取Graphics對象的實例?
我想在應用程序打開時(即在Form_Load方法中)顯示圖像,但不知道如何獲取我可以使用的Graphics對象實例? 謝謝
我知道如何使用Graphics類型的對象(至少我能夠渲染圖像),但我總是通過傳遞從OnPaint方法檢索的圖形對象來實現這一點。如何在WinForms中手動獲取Graphics對象的實例?
我想在應用程序打開時(即在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);
此時,執行到您的圖形對象的任何圖形將繪製到您的圖像上。
你打算如何使用你在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-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));