Управление должно быть отключено и скрыто или просто скрыто?

  • Несуществующие тесты (показанный покрытием кода). Это не обязательно индикатор, что код плох, но это - большой предупредительный знак.

  • Профанация в комментариях.

9
задан RuudKok 13 July 2009 в 08:53
поделиться

8 ответов

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

Видимый относится к тому, отображается элемент управления (обычно, если это false, элемент управления не отображается вообще, но не всегда - см. комментарии к этому сообщению).

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

9
ответ дан 4 December 2019 в 06:19
поделиться

Необходимость установки Enabled = false при скрытии элемента управления зависит от рассматриваемого элемента управления и от того, какое взаимодействие он предлагает. Для многих элементов управления (например, кнопки или CheckBox ) настройки Visible = false будет достаточно, чтобы предотвратить любое взаимодействие между пользователем и элементом управления.

Но некоторые элементы управления (особенно те, которые предлагают свойство сочетания клавиш), по-прежнему будут предлагать взаимодействие с пользователем, когда они не видны. Например, ToolStripMenuItem (и «старый» MenuItem ) по-прежнему будет иметь событие Click , вызываемое при нажатии сочетания клавиш, независимо от Visible является истинным или ложным .

Настройка Enabled = false предотвратит запуск события Click с помощью сочетаний клавиш в таких случаях. С этой точки зрения я бы не советовал устанавливать Enabled = false при скрытии элемента управления в приложении WinForms.

9
ответ дан 4 December 2019 в 06:19
поделиться

For basic controls like labels or text boxes, I don't think it makes any actual difference which method you use.

But consider a more complex control, that contains a timer to check if there is new data to display; disabling the control also disables the timer.

If you make it invisible without disabling it, the timer still fires events, and any new data still gets processed. If you disable it too, new data does not get processed. It depends on the specific case, which of the two behaviours you want.

FWIW, I disagree with the person who told you that it was wrong to hide and disable. I think that it's unnecessary, in most cases.

3
ответ дан 4 December 2019 в 06:19
поделиться

Быстрый тест показывает, что установка для Visible значения false также отключает клавиши ускорителя для этого элемента управления.

В Win32 (т.е. это не относится к Windows Forms) ускорители остаются включенными , когда элемент управления скрыт, но не отключен. Я предполагаю, что это ссылка, о которой вы думали.

5
ответ дан 4 December 2019 в 06:19
поделиться

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

Я бы не сказал, что это «неправильно». Я бы назвал это «излишним».

2
ответ дан 4 December 2019 в 06:19
поделиться

If you are asking also about usability rather than just technical matters, I won't recommend you to hide things (unless you're changing completely the current "view" of your application), because usually it's less annoying find a control disabled (it gives you a feedback about the action you want to do is not ready yet) than spend a few seconds searching it, just to realize after a while that it must be disabled because the preconditions to use it are not satisfied.

If you were already aware about this, just ignore it :-p

3
ответ дан 4 December 2019 в 06:19
поделиться

Из MSDN :

Элементы, для которых нет видимости Видимые не участвуют во вводе события (или команды), не влияют проходы Measure или Arrange макета, не находятся в последовательности вкладок, и не будет отображаться в хитах тестирование.

Итак, я думаю, вы можете предположить, что установка .Enabled = false не нужна.

UPDATE

Я проверил документацию .Visibity в MSDN , но, к сожалению, ничего не говорится о том, отключен ли элемент управления.

8
ответ дан 4 December 2019 в 06:19
поделиться

Not sure about .NET, but actionscript/Flex has three distinct properties for controls that take boolean values.

enabled

visible

includeInLayout

Setting the visible property false keeps it around and can effect layout. It is still drawn by the display renderer. Setting includeInLayout property keeps it from being rendered all together. Often I find it useful to include all the properties depending what I want to happen with the control and my view. There may be a similar property in .NET. But I am not sure.

1
ответ дан 4 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: