Каков наилучший шаблон для выбора всех или снятия всех флажков. Может ли кто-нибудь придумать лучший способ получить его в этой форме:
Каков наилучший шаблон для выбора всех или снятия всех флажков. Может ли кто-нибудь придумать лучший способ получить его в этой форме:
Я буду честен, мне никогда не нравилась идея использовать флажок для опции "выбрать все", даже если вы ее видите много. Это не один элемент, который нужно выбрать, это действие. И если вы выберете все, а затем начнете отменять выделение отдельных элементов в списке, статус "checked" флажка "Выбрать все" становится по своей сути запутанным. Я предпочитаю использовать простую, но очевидную ссылку/кнопку, которая переключает между "select all" и "unselect all" по мере ее нажатия. Невозможно сбить вас с толку, когда отдельные элементы были отменены, а результат нажатия кнопки никогда не вызывает сомнений. Исключительный характер операции делает ее вполне разумной для переключения назад и вперед (вместо того, чтобы использовать две всегда видимые кнопки: одну для выбора всех, одну для отмены выбора), так как вы находитесь на расстоянии не более двух кликов от желаемого поведения. И это визуально отделяет это "действие" от отдельных предметов, предотвращая разборки и различающее поведение.
Если вы можете отформатировать диалог со списками, мне нравится метод "checkbox in the list list" (и большинство пользователей интуитивно знают, как его использовать).
Если вы не хотите использовать список, я думаю, что кнопка или гиперссылка (которая переключается с "Выбрать все" на "Выбрать None", будет работать лучше, чем еще один флажок, который трудно разглядеть среди всех других флажки. Кроме того, снятие флажка "проверить все" не обязательно приведет к "проверке нет" для пользователя.
Просто установите флажок "Выбрать все" ближе к левой границе. Возможно, измените текст на что-то вроде "Все предыдущие игры" и т.д., Чтобы дать понять, что выбрано "все".
Здесь логика для User Control в WinForms для реализации @nezroy ответ. Это позволяет вам указать InitialAction [один из SelectAll или DeselectAll].
Imports System.ComponentModel
''' <summary>
''' A control which allows the user to toggle back-and-forth
''' between selecting all of something, or de-selecting all of something.
''' </summary>
Public Class uscSelectDeselectAll
#Region "Events"
Public Event CurrentAction_Changed()
#End Region
#Region "Enums"
Public Enum SelectAction
SelectAll
DeselectAll
End Enum
#End Region
#Region "Module-level variables"
Private _initialAction As SelectAction
Private _currentAction As SelectAction
#End Region
#Region "Properties"
Public Property CurrentAction As SelectAction
Get
Return _currentAction
End Get
Private Set(value As SelectAction)
_currentAction = value
SetActionLinkText()
End Set
End Property
<Browsable(True)>
<EditorBrowsable(EditorBrowsableState.Always)>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
Public Property InitialAction As SelectAction
Get
Return _initialAction
End Get
Set(value As SelectAction)
_initialAction = value
SetActionLinkText()
End Set
End Property
#End Region
#Region "Procedures"
Private Sub SetActionLinkText()
If _currentAction = SelectAction.SelectAll Then
llActionText.Text = "Select All"
ElseIf _currentAction = SelectAction.DeselectAll Then
llActionText.Text = "Deselect All"
Else
Throw New InvalidEnumArgumentException("Invalid SelectActionProvided.")
End If
End Sub
Private Sub ToggleAction()
If CurrentAction = SelectAction.SelectAll Then
CurrentAction = SelectAction.DeselectAll
ElseIf CurrentAction = SelectAction.DeselectAll Then
CurrentAction = SelectAction.SelectAll
Else
Throw New Exception("CurrentAction has the invalid value: " & CurrentAction.ToString())
End If
End Sub
#End Region
#Region "Event Handlers"
Private Sub llActionText_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles llActionText.LinkClicked
RaiseEvent CurrentAction_Changed()
ToggleAction()
End Sub
Private Sub uscSelectDeselectAll_Load(sender As Object, e As EventArgs) Handles Me.Load
CurrentAction = InitialAction
End Sub
#End Region
End Class
Я бы сказал, что это самый интуитивный способ сделать выбор/отменить выбор всех. Но я также видел, что некоторые используют ссылку, но я бы предпочел это.