防止组合框在字体更改时调整大小

时间:2011-08-16 21:25:56

标签: c# winforms combobox

我有一个组合框,里面有一个字体系列列表。你可以猜到我正在制作一个用于在富文本框控件中编辑字体的工具条。问题是当我更改字体时,它正在调整我的组合框的大小。

滚动浏览不同的字体会导致组合框变得“跳跃”,而某些字体的高度很高,这会导致一些搞笑的问题。

图表A:

Combobox1

图表B:

Combobox2

是的......我将展示到目前为止的代码......就像组合框刚刚绑定到字体系列集合一样。

    void box_SelectedIndexChanged(object sender, EventArgs e)
    {
        String text = ((Font)box.SelectedItem).Name;
        Font font = (Font)box.SelectedItem;


        BeginInvoke(new Action(() => box.Text = text));
        BeginInvoke(new Action(() => box.Font = font));
    }

任何人都有任何想法,如果我找不到解决方案,我可以阻止更改字体,只显示默认字体的名称。

3 个答案:

答案 0 :(得分:2)

我认为使用ToolStripComboBox是个问题。 .NET 2.0 ToolItem类具有许多永远无法解决的残留,erm特性。 WPF吸走了资源。工具条显然没有很好地处理调整大小。当它变得更大时,它也不会使形式的其余部分向下移动。

规范字体组合框使用所有者绘制以常规样式显示下拉列表中的字体。不改变盒子本身的字体。你真的不希望工具条调整大小,这不是一个很好的用户界面。

答案 1 :(得分:0)

我能想到的唯一方法是创建一个自定义组合框控件并从所述控件派生。这将使您可以访问变量ownerdraw,这使我们更灵活,而不必使用ItemHeight属性。陷入其中一个事件,这个事件决定了控制的价值已经改变。

然后您可以使用以下函数来计算新的布局大小:

 using (Font font = new Font(this.Font.FontFamily, (float)this.PreviewFontSize))
  {
    Size textSize;

    textSize = TextRenderer.MeasureText("yY", font);
    _itemHeight = textSize.Height + 2;
  }

答案 2 :(得分:0)

我很遗憾地尝试了所有这些方法,但收效甚微。但是直到今天我才看到微软办公室如何实现它。无论选择何种字体,它们实际上在所选项目的组合框中使用相同的字体。因此,尽管我想让它更加自定义,但我将使用统一字体来显示所选索引中显示的任何字体。