2016-12-06 28 views
0

所以我得到了一種方法,允許我根據另一個值調整標籤的大小。基本上有一個結果標籤,旁邊是「KB」標籤。例如:30000 KB'Control.CreateGraphics()'是一種方法,它在C#中的給定上下文中無效

所以我創造了這個的方法:

public void UpdateSizeKB() 
{ 
    lblKB.Show(); 
    lblResultKB.Width = GetLabelsSize(lblResultKB.Text); 
    lblKB.Left = lblResultKB.Left + lblResultKB.Width + 5; 
} 

public int GetLabelsSize(string text) 
{ 
    return lblResultKB.CreateGraphics.MeasureString(text, lblResultKB.Font).Width() + lblResultKB.Margin.Left + lblResultKB.Margin.Right; 
} 

,我會打電話給窗體上的UpdateSizeKB()。所以每次更改lblResultKBlblKB都會改變它的位置。

但功能GetLabelsSize實際上是不工作非常好,因爲它顯示在CreateGraphics錯誤叫:

「Control.CreateGraphics()」是一種方法,它是不是在給定的情況下有效

你們有這個問題的解決方案嗎?能夠使這項工作

+1

嘛,你不是要求它像一個方法,你想像字段或財產一樣訪問它。很可能你想要類似於'使用(var g = lblResultKB.CreateGraphics()){return g.MeasureString(...); }' –

回答

5

你缺少一對括號CreateGraphics後:

public int GetLabelsSize(string text) 
{ 
    return (int)(lblResultKB.CreateGraphics().MeasureString(text, lblResultKB.Font).Width + lblResultKB.Margin.Left + lblResultKB.Margin.Right); 
} 

即你確實得呼叫CreateGraphics()方法獲取Graphics對象,而不是試圖訪問該方法的一個屬性。 :)

然而,這是使用一個using塊與Graphics對象,因爲它們包住非託管資源,所以好的做法:

public int GetLabelsSize(string text) 
{ 
    using (var g = lblResultKB.CreateGraphics()) { 
     return (int)(g.MeasureString(text, lblResultKB.Font).Width + lblResultKB.Margin.Left + lblResultKB.Margin.Right); 
    } 
} 
+0

但是'.Width()'也會顯示一個錯誤:非可調用成員'SizeF.Width'不能像方法一樣使用。 – LeugimSnitram

+0

因爲它不是一種方法......它是一種財產。 – ThePerplexedOne

+0

@LeugimSnitram修正了這個例子。 – AKX

相關問題