Настройка ширины выпадающего списка ComboBox в C # - PullRequest
3 голосов
/ 21 мая 2010

У меня есть этот код, который регулирует ширину выпадающего списка 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 ]

3 голосов
/ 21 мая 2010

Хорошо, так. Якорь не сработал так, как я ожидал, так что вот совершенно новый ответ, который работает, но я чувствую, что это своего рода хак, (но, возможно, это вполне разумный способ справиться):

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

Этот код возвращает его вдоль оси x на 10 пикселей, а затем расширяет ComboBox1 на 10 пикселей.

Это работает очень гладко для меня. Это работает для вас?

2 голосов
/ 21 мая 2010

Я написал статью в CodeProject о том, как взломать поле со списком, чтобы дать ему полосу прокрутки для горизонтальной прокрутки. Смотрите здесь для статьи .

0 голосов
/ 22 мая 2010

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

0 голосов
/ 21 мая 2010

Возможно, вы захотите посмотреть на размещение элемента управления в контейнере. Например, создайте FlowLayoutPanel с его свойством FlowDirection для RightToLeft. Поместите ComboBox в новую панель. Одним из преимуществ этого метода является то, что вы можете изменить размеры любым способом, и элемент управления / контейнер будет вести себя так, как ожидается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...