2014-09-24 41 views
0

我想創建一個顯示聊天程序的用戶暱稱的listView。爲此,我創建了一個從listViewItem繼承的新類。將文本擬合到列表中查看

我想要做的是取決於暱稱的長度我的字體大小。 我讀過很多關於縮放的文章,但是所有的都依賴於圖形對象,我不知道如何得到其中的一個?我嘗試了一個標籤,它會從paint事件,但listView沒有這樣的事件?那麼我如何縮放這種字體呢?

問:

我如何得到正確的字體大小,該暱稱將放入一個指定的矩形?

編輯:忘了說我完全新來的任何與grafic東西我只使用設計器和設置一些屬性。

+0

你有問題嘗試了一些東西,使用圖形和不同的字體測量字符串,獲取單元格寬度等? – 2014-09-24 11:23:18

+0

對不起,我對圖形沒有任何線索,所以我也沒有 – 2014-09-24 11:30:52

+0

你可以通過'Graphics G = anycontrolsEGYourListview.CreateGraphics()'來獲得用於測量字體的圖形對象。你以後需要使用''或'Dispose'。什麼'View'模式,你設置你'ListView'到? – TaW 2014-09-24 11:57:22

回答

1

您應該ListViewOwnerDraw屬性設置爲true,加平局項事件處理程序是這樣的:

listView1.DrawItem += listView1_DrawItem; 

這裏是一個簡單的實現你想要的,所以你可以用和調整它玩什麼:

void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) 
{ 
    float emSize = e.Item.Font.Size; 
    Font font = new Font(e.Item.Font.FontFamily, emSize); 
    while(e.Graphics.MeasureString(e.Item.Text, e.Item.Font).Width>e.Item.Bounds.Width) 
    { 
      emSize--; 
      font = new Font(e.Item.Font.FontFamily, emSize); 
      e.Item.Font = font; 
    } 
    e.DrawText(); 
} 

您看到您需要更改字體大小並測量要顯示的字符串,以便它完全適合單元格。假定如果你當前的字體大小不合適,你想把它縮小。

+0

非常感謝你! :D – 2014-09-24 13:32:33

+0

現在唯一的問題是它將列標題空白,我想在文本旁邊顯示的圖像也不見了 – 2014-09-24 13:39:15

0

標誌着我@Nikola答案正確的,因爲它解釋了很多,但在我的情況我需要的東西的方式更簡單,由於@TaW我也有在這裏解決了我的代碼片段中的圖形

public static Font getNewFont(Font origFont, string text, float maxWidth, Graphics g) 
    { 

     float emSize = origFont.Size; 
     Font font = origFont; 

     while (g.MeasureString(text, font).Width > maxWidth) 
     { 
      emSize--; 
      font = new Font(origFont.FontFamily, emSize); 
     } 

     return font; 
    }