Проблема с выравниванием TabControl в VB.NET

У меня странное поведение с выровненным по левому краю TabControl в VB.NET. Снимок экрана:

альтернативный текст

Я хотел, чтобы вкладки были такими же, как если бы они были повернуты на 90 градусов влево.

Это как-то связано с тем, что я (не дай бог) не использую стандартную тему XP? Любое решение, чтобы заставить его работать? (Даже если это сложно, но мне не нужен элемент управления с контрастирующим стилем, я хочу, чтобы программа выглядела согласованно)

Спасибо!

Счастливый конец:

alt text


person Camilo Martin    schedule 18.12.2009    source источник


Ответы (2)


Хорошо, решил проблему. Если у кого-то такая же проблема, используйте этот элемент управления. Это бесплатно по лицензии MIT. Скриншот автора:

альтернативный текст

Обратите внимание, что автор сделал два элемента управления. Мой совет: второй имеет некорректную поддержку cleartype (он вращается после субпиксельного рендеринга), но его проще использовать и лучше контролировать отступы. Действуй! знак равно

РЕДАКТИРОВАТЬ. Если вы используете C ++ и вам для этого нужен, есть подход. Изображение результата: http://www.codeguru.com/dbfiles/get_image.php?id=6385&lbl=CXPTABCTRL_GIF&ds=20040309
Автор очень подробно описал, как он это сделал, и это хорошо, например: http://www.codeguru.com/dbfiles/get_image.php?id=6385&lbl=CXPTABCTRL_RIGHT_GIF&ds=20040309
Это - ссылка на статью.

Еще один очень хороший подход - это многоцелевой компонент VisualStyles SkyBound. Кажется, что двоичные файлы бесплатны, но исходный код нет, очень честная сделка. Я проверю это позже, но если вам нужно исправить ошибку визуальных стилей, это похоже на выбор.
 alt text
(источник: skybound.ca)

от авторов:

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

Отметьте this. и подробнее от автора.

Проблема решена!! = D

person Camilo Martin    schedule 18.12.2009

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

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);
  }
}
person Hans Passant    schedule 20.12.2009
comment
Спасибо, но без стилей это выглядит ужасно. Я ненавижу использовать приложения, которые выглядят так, как будто они были созданы 10 лет назад. И это настолько большая ошибка, что по простой причине делает невозможным любое нестандартное выравнивание вкладок; Единственное, что делает возможным выравнивание вкладок по левому, нижнему или правому краю, - это эстетика. - person Camilo Martin; 21.12.2009
comment
Что ж, я не согласен. Не уверен, что случилось с программистом Microsoft, написавшим этот код, пахнет так, как будто его / ее сбил автобус. Каждый должен найти способ обойти аварию с автобусом, это нехорошо. Используйте тот, который вы нашли, на свое усмотрение, я могу только порекомендовать решение, которое когда-нибудь сломается. - person Hans Passant; 21.12.2009
comment
+2 к этому! На каждую ошибку, которую они создают, бесчисленное количество разработчиков должны найти тысячи грязных обходных решений. Я предполагаю, что это связано с тем, чтобы оставить место для продажи большего количества продуктов и сделать обновления для исправления ошибок. - person Camilo Martin; 21.12.2009