在C#中调整ComboBox DropDown宽度

时间:2010-05-20 20:49:45

标签: c# combobox drop-down-menu

我有这个代码可以调整comboBox下拉列表的宽度:

  private void comboBox_DropDown(object sender, 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;
  }

它工作得很好,除了它将下拉的宽度扩展到右边,而我更喜欢它向左扩展,因为comboBox位于我的窗体的右侧。任何您可能有的想法或建议将不胜感激。感谢。

4 个答案:

答案 0 :(得分:3)

好的,所以.Anchor并没有像我预期的那样工作,所以这里有一个全新的答案可行,但我觉得有点像黑客,(但也许这是一种非常合理的方式来管理它):

int x = 10;           
comboBox1.Location = new Point(comboBox1.Location.X - x, comboBox1.Location.Y);
comboBox1.Width += x; 

此代码沿x轴向后拉10个像素,然后将ComboBox1展开10个像素。

这对我来说非常顺利。这对你有用吗?

答案 1 :(得分:2)

我在CodeProject上写了一篇关于如何破解组合框的文章,给它一个水平滚动的滚动条。请参阅此处查看article

答案 2 :(得分:0)

您可能希望将控件放在容器中。例如,创建一个FlowLayoutPanel,其FlowDirection属性为RightToLeft。将ComboBox放在新面板中。此方法的一个好处是您可以通过任何方式更改尺寸,控件/容器将按预期运行。

答案 3 :(得分:0)

经过多次搜索,似乎这实际上是微软尚未解决的问题(非常惊讶)。我决定重新安排我的布局以更好地适应这个功能 - 当我有时间时缺乏,但是现在,我只是要忍受它。谢谢大家,感谢您的参与。