Подтвердить что ты не робот

Как сделать элемент управления похожим на ComboBox с включенными визуальными стилями?

У меня есть элемент управления, который моделируется ComboBox. Я хочу отобразить элемент управления таким образом, чтобы элемент управления border выглядел как стандартный Windows ComboBox. В частности, я следил за документацией MSDN, и вся обработка элемента управления правильная, за исключением рендеринга, когда элемент управления отключен.

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

Я использую класс VisualStyleRenderer. MSDN предлагает использовать элемент VisualStyleElement.TextBox для TextBox части элемента управления ComboBox, но стандартный отключенный TextBox и стандартный отключенный ComboBox рисуем немного по-другому (у одного есть светло-серая граница, а другая - светло-голубая рамка).

Как получить правильное отображение элемента управления в отключенном состоянии?

4b9b3361

Ответ 1

Я не уверен на 100%, если это то, что вы ищете, но вы должны проверить VisualStyleRenderer в пространстве имен System.Windows.Forms.VisualStyles.

Так как VisualStyleRenderer не будет работать, если у пользователя нет визуальных стилей (он/она может запускать "классический режим" или оперативную систему до Windows XP), вы всегда должны иметь резервную копию класса ControlPaint.

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

а затем сделайте это при рисовании:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

Надеюсь, что это поможет!

Ответ 2

Используются ли какие-либо из ControlPaint методы? Это то, что я обычно использую для настраиваемых элементов управления.