DataGridView
にはかなり大きい文字列が含まれているComboBox
が入っています。ドロップダウンリストを自分自身に展開したり、文字列を少なくともワードラップして、ユーザーがComboBox
列幅のサイズを変更しなくても文字列全体を見ることができるようにする方法はありますか?ComboBoxドロップダウンリストを作成するには、最大サイズのアイテムに合わせてサイズを変更しますか?
8
A
答えて
6
ここで、私はこの問題を解決するためにやったことだ素晴らしい作品...
public class ImprovedComboBox : ComboBox
{
public ImprovedComboBox()
{
}
public object DataSource
{
get { return base.DataSource; }
set { base.DataSource = value; DetermineDropDownWidth(); }
}
public string DisplayMember
{
get { return base.DisplayMember; }
set { base.DisplayMember = value; DetermineDropDownWidth(); }
}
public string ValueMember
{
get { return base.ValueMember; }
set { base.ValueMember = value; DetermineDropDownWidth(); }
}
private void DetermineDropDownWidth()
{
int widestStringInPixels = 0;
foreach (Object o in Items)
{
string toCheck;
PropertyInfo pinfo;
Type objectType = o.GetType();
if (this.DisplayMember.CompareTo("") == 0)
{
toCheck = o.ToString();
}
else
{
pinfo = objectType.GetProperty(this.DisplayMember);
toCheck = pinfo.GetValue(o, null).ToString();
}
if (TextRenderer.MeasureText(toCheck, this.Font).Width > widestStringInPixels)
widestStringInPixels = TextRenderer.MeasureText(toCheck, this.Font).Width;
}
this.DropDownWidth = widestStringInPixels + 15;
}
}
-1
私が知っているわけではありませんが、一部のブラウザでは、ドロップダウンメニューの幅を必要に応じてボックスの幅を超えて拡大することができます。私はFirefoxを知っていて、あなたのユーザーベースを少しでもコントロールできるなら、Chromeはこれを行うことができます。
もしあなたが本当にフラッシュベースのコンボボックスのデータをHTMLにポストすることが必死であれば?
+0
winformsの回答を探していました。私は質問にwinformsを追加する必要があります。混乱させて申し訳ありません。 –
+0
ほとんどのブラウザは自動的にこれを自動的に行います。 – Nyerguds
3
これは非常にエレガントなソリューションです:
private void AdjustWidthComboBox_DropDown(object sender, System.EventArgs e)
{
ComboBox senderComboBox = (ComboBox)sender;
int width = senderComboBox.DropDownWidth;
Graphics g = senderComboBox.CreateGraphics();
Font font = senderComboBox.Font;
int vertScrollBarWidth =
(senderComboBox.Items.Count>senderComboBox.MaxDropDownItems)
?SystemInformation.VerticalScrollBarWidth:0;
int newWidth;
foreach (string s in ((ComboBox)sender).Items)
{
newWidth = (int) g.MeasureString(s, font).Width
+ vertScrollBarWidth;
if (width < newWidth)
{
width = newWidth;
}
}
senderComboBox.DropDownWidth = width;
}
は、コンボボックスは、最長の文字列の幅にリスト幅をドロップダウン調整
関連する問題
- 1. ウィンドウのサイズに合わせてコントロールのサイズを変更する
- 2. Iframeのサイズをコンテンツのサイズに合わせて変更する
- 3. サイズに合わせてココアウィンドウのサイズを変更する
- 4. 描画サイズに合わせて表示サイズを変更する
- 5. サイズに合わせてサイズを変更する画像
- 6. AS3ムービークリップに合わせてビットマップオブジェクトのサイズを変更します。
- 7. コンテナのサイズに合わせるためにSVGをサイズ変更
- 8. ウィンドウサイズに合わせて画像を変更/サイズ変更する
- 9. CSS/JS画像のサイズに合わせてFigureをサイズ変更
- 10. サイズに合わせてCSS画像をサイズ変更
- 11. 最大サイズにウィンドウサイズを変更する
- 12. tmuxはフォーカスを合わせてサイズを変更します
- 13. ページを更新せずにウィンドウのサイズに合わせてイメージのサイズを変更します
- 14. 複数の画面サイズに合わせて画像のサイズを変更する
- 15. 画像のサイズに合わせてExcelのサイズを変更する
- 16. vb.netでdatagridviewのサイズに合わせて行サイズを変更する方法
- 17. Textareaはフォーカスを合わせてサイズを変更したままにします
- 18. イメージに合わせてUICollectionViewCellのサイズを変更する
- 19. テキストに合わせてテキストボックス/テキストエリアのサイズを変更する
- 20. 内容に合わせてテキストボックスウィジェットのサイズを変更する
- 21. CGViewに合わせてUIViewのサイズを変更する
- 22. ヘルプウィンドウのサイズをテキストに合わせて変更する
- 23. 値に合わせてラベルのサイズを変更する
- 24. イメージをUIImageViewに合わせてサイズを変更する
- 25. 画像を画面に合わせてサイズを変更する
- 26. JTableを行数に合わせてサイズを変更する
- 27. イメージをバウンディングボックスに合わせてサイズを変更する
- 28. SplitPaneをAnchorPane親に合わせてサイズを変更する
- 29. サイズ変更後の画像サイズに合わせる
- 30. コンテンツのサイズに合わせてサイズを変更してください
ありがとうございます。 DropDownイベントのDropDownWidthプロパティを変更することを選択しました。 –
プロパティの隠蔽の代わりに、 'DataSourceChanged'、' ValueMemberChanged'、 'DisplayMemberChanged'イベントを購読する方が良いかもしれません。 –
これはクラスのオーバーライドなので、最も簡単な方法は 'OnDropDown'のオーバーライドを追加して' base.OnDropDown(e) 'を実行する前に呼び出しを追加することです。そして、最後の 'if>'チェックのために、その計算を2回呼び出すのではなく、その幅を変数に格納するだけです。 – Nyerguds