2015-09-03 53 views
0

在C#中,我有一個窗體(使用winforms),其中有一個Gridview數據。當我將鼠標懸停在GridView中的一個單元格上時,我使用MouseEnter和MouseLeave事件彈出另一個窗體,其中包含一個圖像。我使用的DrawImage放置此用下面的代碼:我可以在彈出窗體,圖像和文本中繪製兩件事嗎?

private void frm_MouseOverPicture_Paint(object sender, PaintEventArgs e) 
    { 
     Point MyPoint = new Point(250, 10); 
     Point MySecondPoint = new Point(10,10); 

     Font myFont = sender as Font; 
     Brush myBrush = sender as Brush; 
     Rectangle myRect = new Rectangle(250, 10, 500, 500); 

     Graphics g = e.Graphics; 
     Graphics g2 = e.Graphics; 
     Bitmap MyBitmap = new Bitmap(@"C:\Javie\IMAP0001.jpeg"); 


     //g.DrawImage(MyBitmap, MyPoint.X, MyPoint.Y); 
     g.DrawImageUnscaledAndClipped(MyBitmap, myRect); 
     //g.DrawString("Hi", myFont, myBrush, MySecondPoint); 
     e.Graphics.DrawString("hi", myFont, myBrush, mySecondPoint);   

    } 

我的問題是,當我嘗試,然後使用一個單獨的DrawString方法添加字符串,在彈出的窗體中它得到一個大紅色的X作爲如果我不能用相同的形式繪製兩件東西(這只是一個控件,對吧?)。

+0

這不會解決你的主要問題,但如果你不處理位圖,你最終會有內存泄漏。將它封裝在'using'語句中,或者(更好),將該位圖加載到加載的本地字段中,然後在每次繪製表單時不必從文件加載它。 –

+0

__不要調用'DataGridView'' GridView'!這是錯誤的,令人困惑和必然會得到錯誤的答案,浪費每個人的時間。總是用他們的__right__名稱來稱呼事情!是的,它需要更多__four__字母才能打字,但在這裏尋求幫助時__not__時間太懶了! - – TaW

回答

2

myFont和myBrush對象看起來不正確。嘗試:

 Font myFont = (sender as Form).Font; 
     Brush myBrush = new SolidBrush((sender as Form).ForeColor); 
     ... 
     e.Graphics.DrawString("hi", myFont, myBrush, MySecondPoint); 

假設發件人是一種形式,或者直接創建它們:

 using (Font myFont = new Font("Arial", 16)) 
     { 
      using (Brush myBrush = new SolidBrush(Color.Blue)) 
      { 
       using (Bitmap MyBitmap = new Bitmap(@"C:\Javie\IMAP0001.jpeg")) 
       { 
        ... 
        g.DrawString("hi", myFont, myBrush, MySecondPoint); 
       } 
      } 
     } 
+0

如果你確實採用第二種方法,當你完成它們的時候,一定要通過'using'語句來處理'Font'和'Brush'。如果你不這樣做,你會遇到內存泄漏。 –

相關問題