VSTO Outlook 插件:MeasureString 计算出错误的宽度

VSTO Outlook Plugin: MeasureString calculates wrong width

我想显示带有国际化标签的按钮。在英文中,标签完全适合按钮的宽度。在德语中它不适合。动态计算我使用的宽度 [...]

using (Graphics cg = this.CreateGraphics())
            {
                SizeF size = cg.MeasureString(OutlookAddIn4.Resources.Resources.ShowLoginText, this.showLogFile.Font);
                this.showLogFile.Width = (int)size.Width+3;
            }

[...]

对于 OutlookAddIn4.Resources.Resources.ShowLoginText="Logfile anzeigen" 中的字符串。在计算 125 像素。我什至添加了 3 个像素。按钮的填充设置为 0。 为什么它计算错误的宽度? this.showLogFile.Font 设置为正确的字体(Microsoft Sans Serif,12 pt)(在调试器中检查过)。

无需使用底层 Graphics 对象。

如果将按钮的 AutoSize 属性 设置为 true,将 AutoSizeMode 设置为 GrowAndShrink,将 AutoEllipsis 设置为 false,它将自动调整大小以适合文本。

但是如果你真的需要使用Graphics对象:

   using(Graphics cg =  this.CreateGraphics())
   {
       SizeF size = cg.MeasureString("Your text goes here",this.button1.Font);

       this.button1.Padding = 3;
       this.button1.Width = (int)size.Width;

       this.button1.Text = "Your text goes here";
   }