2011-08-16 53 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

は、私が思うに、ここで問題です。 .NET 2.0のToolItemクラスには、決して対処されていない多くの痕跡が残っています。 WPFはリソースを奪った。ツールストリップは明らかにサイズ変更をうまく処理していません。また、フォームの残りの部分が大きくなると、それは設計通りにはなりません。

標準フォントのコンボボックスでは、owner drawを使用して、フォントをドロップダウンリストに通常のスタイルで表示します。ボックス自体のフォントを変更することなく。あなたは本当にツールストリップのサイズを変更したくない、それは素晴らしいUIではありません。

0

私がそれを行うと考えることができる唯一の方法は、カスタムコンボボックスコントロールを作成し、上記コントロールから派生させることです。これにより、変数ownerdrawにアクセスできるようになります。この変数は、ItemHeightプロパティを使いこなすことなく、少し柔軟になります。コントロールの値が変更されたことを指示するイベントの1つにフック。

新しいレイアウトサイズを計算するには、次のようにあなたは、関数を持つことができます:ToolStripComboBoxを使用して

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

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

私は少しでも悲しいことにこれらのアプローチを試みました。しかし、今日まで私はそれを実現しませんでした。実際には、どのフォントが選択されていても、選択した項目のコンボボックスで同じフォントを使用します。だからもっと慣れさせたいのであれば、選択したインデックスに表示されるフォントに統一されたフォントを使うつもりです。

+0

ハンスの答えと同様、彼らはオーナーの描画を使ってフォントの実際の顔にフォントを描きます。コントロールに割り当てられているフォントを変更すると、自動的には行われません。 –

関連する問題