Paradigm Shift Design

ISHITOYA Kentaro's blog.

コンボボックスの幅を自動的にアイテムの内容にあわせる

余裕が出てきたので、Snippetも載せていきます。


掲題の「コンボボックスの幅を自動的にアイテムの内容にあわせる」方法が、コンボボックスのプロパティとかメソッドとか探したけれど、見つからないのです。需要がないのでしょうか。


なので、

 comboBox1.Items.Add("mogemogemogemogemogemo");
 comboBox1.Items.Add("fugafugafugafuga");
 Graphics g = comboBox1.CreateGraphics();
 int max = 0;
 foreach (String text in comboBox1.Items)
 {
    max = (int)Math.Max(max, g.MeasureString(text, comboBox1.Font).Width);
 }
 comboBox1.Width = max + 20;

なぞとします。+20は、下矢印のコンボボックスの幅が分からなかったためです。
ComboBoxの下矢印 − Insider.NET − @ITで、Tdnr_Symさんという方が言及されていますが、

たぶん、標準コンボボックスのボタン部分の「▼」は
「Marlett」というフォントの文字コード0x36か0x75を使って描画されているんだと思います。

だそうなので、上のMeasureStringで下矢印のフォントを設定して幅を計算した方が正確かもしれません。が面倒なので+20です。


しかし・・・プロパティがほしい。