0

我有我的控制 MyLabel,当我更改字体大小时,必须在构造函数中执行此代码。如何使这段代码工作?

protected override void OnFontChanged(EventArgs e)
{
    if (AutoSize_)
    {
        this.AutoSize = true;
        remember_size = this.Size;
        this.AutoSize = false;
        this.Size = new Size(remember_size.Width, remember_size.Height);
        remember_size = this.Size;
    }
        ...
        this.Invalidate();
 }

但不要工作。例如此代码工作:

 protected override void OnFontChanged(EventArgs e)
{
    if (AutoSize_)
    {
        this.AutoSize = true;
    }
           ...
          this.Invalidate();
 }
4

2 回答 2

0

如果您的目标是调整标签大小以使文本可见,无论字体大小如何,AutoSize属性都会为您执行此操作。但是,如果您出于某种原因希望使用自己的代码处理此问题,您可以尝试设置AutoSize 属性为 false(而不是更改它..)

于 2013-10-02T08:27:02.757 回答
0

可以从任何 Form、UserControl 或 Control 调用以下代码方法。它将以指定字体返回指定文本的大小。

public static Size MeasureText(Graphics graphicsDevice, String text, Font font)
{
    System.Drawing.SizeF textSize = graphicsDevice.MeasureString(text, font);
    int width = (int)Math.Ceiling(textSize.Width);
    int heigth = (int)Math.Ceiling(textSize.Height);

    Size size = new Size(width, heigth);
    return size;
}

现在您需要检查标签是否超出父容器,这会导致一些标签文本被截断。类似以下的内容将完成此操作:

        private void ResizeParentAccordingToLabelSize(Label resizedLabel)
    {
        int necessaryWidth = resizedLabel.Location.X + resizedLabel.Width;
        int necessaryHeight = resizedLabel.Location.Y + resizedLabel.Height;

        if (necessaryWidth > this.Width)
        {
            this.Width = necessaryWidth;
        }

        if (necessaryHeight > this.Height)
        {
            this.Height = necessaryHeight;
        }
    }
于 2013-10-02T13:55:47.720 回答