動的に生成していくつかのアイテムを入力するComboBoxがあります。このコントロールの幅を最長のアイテムの幅に設定したいと思います。一部のテキストの表示幅をカウントするにはどうすればよいですか?
編集:私はWindowsフォームを使用していますが、asp.netでも実行したいと思います
依存します。ASP.NETまたはWindowsフォームまたはWPFを使用していますか?固定幅またはプロポーショナルフォントを使用していますか?
Windowsフォームを使用している場合は、テキストの幅を確認するために MeasureString()を呼び出す必要があります。
ASP.NETを使用している場合は、MeasureString()のようなことを行うことができますが、ブラウザーでレンダリングされているフォントが正確にわからないため、スクリプトにそれを入れることはできません。
Graphics.MeasureStringメソッド を参照してください。http://msdn.microsoft.com/en-us/library/9bt8ty58.aspx
幅を明示的に設定しない場合、ブラウザはそれを最も長い項目の長さにレンダリングします (もちろん、質問が Web フォームに関するものである場合)。
次のコードを使用して、ドロップダウン イベントをコンボボックスに追加します。
private void comboBox_DropDown(object sender, EventArgs e)
{
Graphics g = (sender as ComboBox).CreateGraphics();
float longest = 0;
for (int i = 0; i < (sender as ComboBox).Items.Count; i++)
{
SizeF textLength = g.MeasureString((sender as ComboBox).Items[i].ToString(), (sender as ComboBox).Font);
if (textLength.Width > longest)
longest = textLength.Width;
}
if (longest > 0)
(sender as ComboBox).DropDownWidth = (int)longest;
}