2011-08-16 54 views
0

我有一个组合框,其中有一个字体系列列表。正如你所猜测的,我正在制作一个工具栏来编辑富文本框控件中的字体。问题是当我改变字体的大小我的组合框。防止组合框在字体变化时调整大小

滚动浏览不同的字体会导致组合框变得“跳跃”,并且一些字体有很大的高度,这导致了一些热闹的问题。

附件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)); 
    } 

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

回答

2

使用ToolStripComboBox控件是在这里,我想这个问题。 .NET 2.0 ToolItem类具有许多从未解决的残留特性。 WPF吸收了资源。工具条显然不能很好地处理调整大小。它也不会使表格的其余部分在设计变大时向下移动。

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

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; 
    } 
0

我尝试了所有这些方法,但很失败,很不幸。然而,直到今天,我才意识到微软Office如何实现它。无论选择什么字体,它们实际上都会在组合框中为选定项目使用相同的字体。所以尽可能多的我想使它更加自定义,我只是使用统一的字体来显示所选索引中显示的任何字体。

+0

正确,就像汉斯的回答所示,他们使用所有者绘图来绘制字体实际面部中的字体。它不会通过更改分配给控件的字体自动完成。 –