Выровнять текст в Combobox

Я хочу выровнять свой текст в поле со списком, чтобы он отображался в центре combobox, скажите мне, как это сделать, также вы можете увидеть, что есть граница по умолчанию вокруг поля со списком, когда он находится в фокусе, как я могу удалить эту границу также Пожалуйста, решите мои две проблемы Спасибо

6 ответов


Это не поддерживается для ComboBox. Точные причины теряются в тумане времени, ComboBox существует с начала девяностых, но, безусловно, имеет какое-то отношение к неловкости получения текста в части текстового поля, чтобы выровняться с текстом в раскрывающемся списке. Пользовательский чертеж с DrawItem также не может его решить, что влияет только на внешний вид раскрывающихся элементов.

в качестве возможного обходного пути вы могли бы сделать что-то диковинное, например, заполнить элемент строки с пробелами, чтобы они посмотреть по центру. Вам понадобится TextRenderer.MeasureText (), чтобы выяснить, сколько пробелов добавить для каждого элемента.

"граница", о которой вы говорите, не является границей, это прямоугольник фокуса. Вы также не можете избавиться от этого, Windows отказывается позволить вам создать пользовательский интерфейс, который не будет показывать элемент управления с фокусом. Пользователи, которые предпочитают клавиатуру мыши, заботятся об этом. Нет обходного пути для этого.


эта статья поможет вам: http://blog.michaelgillson.org/2010/05/18/left-right-center-where-do-you-align/

фокус в том, чтобы установить DrawMode - свойство ComboBox to OwnerDrawFixed а также подписаться на его событие DrawItem.

ваше событие должно содержать следующий код:

// Allow Combo Box to center aligned
private void cbxDesign_DrawItem(object sender, DrawItemEventArgs e)
{
  // By using Sender, one method could handle multiple ComboBoxes
  ComboBox cbx = sender as ComboBox;
  if (cbx != null)
  {
    // Always draw the background
    e.DrawBackground();

    // Drawing one of the items?
    if (e.Index >= 0)
    {
      // Set the string alignment.  Choices are Center, Near and Far
      StringFormat sf = new StringFormat();
      sf.LineAlignment = StringAlignment.Center;
      sf.Alignment = StringAlignment.Center;

      // Set the Brush to ComboBox ForeColor to maintain any ComboBox color settings
      // Assumes Brush is solid
      Brush brush = new SolidBrush(cbx.ForeColor);

      // If drawing highlighted selection, change brush
      if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
        brush = SystemBrushes.HighlightText;

      // Draw the string
      e.Graphics.DrawString(cbx.Items[e.Index].ToString(), cbx.Font, brush, e.Bounds, sf);
    }
  }
}

ComboBox-Preview

чтобы выровнять элементы, которые вы можете просто заменить StringAlignment.Center С StringAlignment.Far.


задайте свойству 'RightToLeft' значение true. Он не меняет последовательность символов. Это только справедливо-оправдывает.


вы не можете сделать это в Windows form control специально поле со списком


Winforms довольно негибкий, когда дело доходит до настройки элементов управления. Если вы ищете более настраиваемый пользовательский интерфейс, я рекомендую вам изучить создание приложения WPF, которое позволяет определять пользовательские элементы управления. Это займет некоторую работу, поэтому это только то, что вы захотите предпринять, если вы действительно найдете это необходимым. Вот достойный сайт, чтобы вы началиhttp://www.wpftutorial.net/


вы можете сделать что-то подобное, добавив пробел перед членами дисплей в запросе

например :

combobox1.DataSource = Query(Select col1 , ('   '+col2) as Col2 from tableName) 
combobox1.DisplayMember = "Col2";
combobox1.ValueMember = "col1";