Как бы вы отключили элементы управления .net Winforms без изменения их внешнего вида? - PullRequest
6 голосов
/ 27 января 2009

Допустим, у меня есть элемент управления, и я хочу предотвратить его редактирование.

Установка свойства Enabled для элемента управления на False будет работать, но внешний вид элемента управления изменится соответственно, обычно на трудно читаемый черный на сером шрифте. Когда читаемость все еще важна, это реальная проблема.

Для TextBox есть несколько очевидных исправлений:

Textbox1.BackColor = Color.White;

или

Textbox1.ReadOnly= true; // instead of setting Enabled to false

но, к сожалению, это не сработает для всех элементов управления (например, переключателей)

Другое решение состоит в том, чтобы оставить свойство Enabled нетронутым и подписаться на событие focus, как это (но это не очень элегантное решение)

    this.Textbox1.Enter += new System.EventHandler(this.Textbox1_Enter);

    private void Textbox1_Enter(object sender, EventArgs e)
    {
      Textbox1.FindForm().ActiveControl = null;
    }

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

Ответы [ 4 ]

3 голосов
/ 27 января 2009

Существует аргумент, что вмешательство в стандартное поведение Windows сбивает пользователя с толку, но кроме этого, я уже видел это, хотя чаще в C ++. Вы можете создать подкласс управления и обрабатывать сообщения рисования самостоятельно. Когда элемент управления включен, просто делегируйте чертеж базовому классу. Когда элемент управления отключен, вы можете либо позволить самому базовому классу нарисовать себя, а затем сделать произвольный рисунок поверх, либо вы можете просто нарисовать все это самостоятельно. Я настоятельно рекомендую первый из этих вариантов.

0 голосов
/ 07 августа 2010

Обычно да, не хотят изменять поведение Windows по умолчанию.

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

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

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

0 голосов
/ 27 января 2009

Если элемент управления отключен / только для чтения, то он действительно должен выглядеть отключенным / только для чтения. В противном случае вы полностью запутаете пользователя.

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

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

0 голосов
/ 27 января 2009

Некоторые элементы управления могут быть установлены на ReadOnly, что оставляет их включенными, но их нельзя изменить. Это может быть то, что вы ищете.

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

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