управление вкладками, вертикально выровненные вкладки с вертикально выровненным текстом - PullRequest
2 голосов
/ 30 июня 2010

Я хочу использовать элемент управления вкладками, чтобы вкладки отображались слева, а не вверху.Я установил выравнивание по левому краю и там отображаются вкладки.Тем не менее, как я могу получить текст для отображения на вкладке, по вертикали?Я посмотрел на msdn, и он дает пример выровненного по левому краю элемента управления вкладками, но метка вкладки по-прежнему отображается по горизонтали!

Другое дело, кто-нибудь знает, как использовать элемент управления вкладками с выровненными по левому краю вкладками смакет по умолчанию, чтобы он выглядел лучше?

Пожалуйста, не создавайте сторонние приложения, если они не бесплатны, и да, я уже посмотрел проект кода.

Спасибо, Р.

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

Это давняя ошибка в визуализаторе визуальных стилей для встроенного элемента управления вкладками Windows. Он поддерживает только вкладки сверху, программист Microsoft, который работал над ним, был сбит шиной, прежде чем она могла закончить работу, я думаю.

Единственное, что вы можете с этим сделать, - выборочно отключить визуальные стили для элемента управления. Добавьте новый класс в ваш проект и вставьте код, показанный ниже. Компиляция. Перетащите новый элемент управления из верхней части панели инструментов на форму, заменив оригинал.

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class FixedTabControl : TabControl {
    [DllImportAttribute("uxtheme.dll")]
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist);

    protected override void OnHandleCreated(EventArgs e) {
        SetWindowTheme(this.Handle, "", "");
        base.OnHandleCreated(e);
    }
}
2 голосов
/ 11 января 2011

Если вы создаете свое собственное событие DrawItem, вы можете вручную писать заголовки вкладок.Вы можете использовать этот процесс:

1) Установите следующие свойства TabControl:

 Property  |  Value
 ----------|----------------
 Alignment |  Right (or left, depending on what you want)
 SizeMode  |  Fixed
 DrawMode  |  OwnerDrawFixed

2) Установите для свойства ItemSize.Width значение 25, а для свойства ItemSize.Height - 100.Настройте эти значения по своему усмотрению, но помните, что в основном ширина - это высота, и наоборот.

3) Добавьте обработчик события для события DrawItem и добавьте следующий код:

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
  Graphics g = e.Graphics;
  Brush _TextBrush;

  // Get the item from the collection.
  TabPage _TabPage = tabControl1.TabPages[e.Index];

  // Get the real bounds for the tab rectangle.
  Rectangle _TabBounds = tabControl1.GetTabRect(e.Index);

  if(e.State == DrawItemState.Selected)
  {
    // Draw a different background color, and don't paint a focus rectangle.
    _TextBrush = new SolidBrush(Color.Red);
    g.FillRectangle(Brushes.Gray, e.Bounds);
  }
  else
  {
    _TextBrush = new System.Drawing.SolidBrush(e.ForeColor);
    e.DrawBackground();
  }

  // Use our own font. Because we CAN.
  Font _TabFont = new Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Pixel);

  // Draw string. Center the text.
  StringFormat _StringFlags = new StringFormat();
  _StringFlags.Alignment = StringAlignment.Center;
  _StringFlags.LineAlignment = StringAlignment.Center;
  g.DrawString(_TabPage.Text, _TabFont, _TextBrush, 
               _TabBounds, new StringFormat(_StringFlags));
}

4) Прибыль!

(первоисточник: http://en.csharp -online.net / TabControl )

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