我有这个代码可以调整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位于我的窗体的右侧。任何您可能有的想法或建议将不胜感激。感谢。
答案 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)
经过多次搜索,似乎这实际上是微软尚未解决的问题(非常惊讶)。我决定重新安排我的布局以更好地适应这个功能 - 当我有时间时缺乏,但是现在,我只是要忍受它。谢谢大家,感谢您的参与。