默认情况下,C#Combobox中的项目是左对齐的。 除了覆盖DrawItem方法和设置组合框绘制模式之外,还有其他选项可用于更改此理由 - > DrawMode.OwnerDrawFixed?
干杯
答案 0 :(得分:4)
如果您不介意另一侧的放置小部件,您可以将控件样式设置为RightToLeft = RightToLeft.Yes
。
或
设置DrawMode = OwnerDrawFixed;
并挂钩DrawItem
事件,
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index == -1)
return;
ComboBox combo = ((ComboBox) sender);
using (SolidBrush brush = new SolidBrush(e.ForeColor))
{
e.DrawBackground();
e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, brush, e.Bounds, new StringFormat(StringFormatFlags.DirectionRightToLeft));
e.DrawFocusRectangle();
}
}
答案 1 :(得分:2)
在WPF中,这就像指定ItemContainerStyle一样简单。在Windows窗体中,它有点棘手。如果没有自定义绘图,您可以在ComboBox上设置RightToLeft属性,但遗憾的是这也会影响下拉按钮。
由于Windows窗体使用本机ComboBox,并且Windows没有像ES_RIGHT这样的ComboBox样式影响文本对齐,我认为您唯一的选择是诉诸所有者绘制。从ComboBox派生类并添加TextAlignment属性可能是个好主意。然后,如果TextAlignment居中或右对齐,则只应用绘图。
答案 2 :(得分:1)
你必须“DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed”并且 你自己的绘画方法就像这样。
protected virtual void OnDrawItem(object sender, DrawItemEventArgs e)
{
var comboBox = sender as ComboBox;
if (comboBox == null)
{
return;
}
e.DrawBackground();
if (e.Index >= 0)
{
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
Brush brush = new SolidBrush(comboBox.ForeColor);
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
brush = SystemBrushes.HighlightText;
}
e.Graphics.DrawString(comboBox.Items[e.Index].ToString(), comboBox.Font, brush, e.Bounds, sf);
}
}