' Control.CreateGraphics()'是一个方法,在C#中给定的上下文中无效

时间:2016-12-06 09:42:11

标签: c#

所以我得到了一个允许我根据另一个标签的值调整标签大小的方法。基本上有一个带有结果的标签,旁边是" KB"标签。示例:30000 KB

所以我已经为方法创建了这个:

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()。因此,每次lblResultKB更改时lblKB都会更改它。

但是函数GetLabelsSize实际上效果不好,因为它在CreateGraphics上显示一个错误:

  

' Control.CreateGraphics()'是一种方法,在给定的上下文中无效

你们有解决这个问题的方法吗?能够做这项工作

1 个答案:

答案 0 :(得分: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);
    }
}