2009-02-06 15 views
16

¿Cuál es el mejor patrón para seleccionar todas o anular la selección de todas las casillas de verificación? Puede alguien llegar a una mejor manera de tenerlo en esta forma:
Más utilizable seleccione todo/anule la selección de todas las casillas de verificación

enter image description here

+0

relacionado http://ux.stackexchange.com/questions/21415/ux-review-word-for-select-all –

+0

relacionado http://ux.stackexchange.com/questions/1382/check-all-uncheck- all-checkboxes-with-respecta-to-usability –

Respuesta

28

Seré honesto, nunca me ha gustado la idea de utilizar una casilla de verificación para la opción "seleccionar todo", aunque la veas mucho. No es un solo elemento para ser recogido, es una acción. Y si selecciona todo y luego comienza a deseleccionar elementos individuales en la lista, el estado "marcado" de la casilla de verificación Seleccionar todo se vuelve intrínsecamente confuso. Prefiero usar un enlace/botón simple pero obvio que alterna entre "seleccionar todo" y "deseleccionar todo" al hacer clic en él. No hay ningún estado para confundirlo cuando se han deseleccionado elementos individuales, y el resultado de presionar el botón nunca está en duda. La naturaleza exclusiva de la operación hace que sea perfectamente razonable alternar (en lugar de usar dos botones siempre visibles, uno para seleccionar todo, uno para deseleccionar todo), ya que está como máximo a dos clics de su comportamiento deseado. Y separa visualmente esta "acción" de los elementos individuales, lo que evita los errores y distingue el comportamiento.

+0

Fui con este enfoque, ¡gracias! – joe

+0

Acabo de toparme con este problema, gran solución. –

+0

Esta respuesta proporciona algún código para implementar esta idea en WinForms: http://stackoverflow.com/a/35616240/848199 –

-1

yo diría que es la forma más intuitiva para que el Seleccionar/Deseleccionar todo. Pero también he visto que algunos usan un enlace, pero yo preferiría eso.

+0

tener un botón de verificación que realiza una acción en lugar de designar una opción discreta no es muy útil IMO. –

1

Simplemente lleve la casilla de verificación Seleccionar todo más cerca del borde izquierdo. Tal vez cambie el texto algo así como "Todos los juegos anteriores", etc. para dejar en claro qué "todos" se está seleccionando.

3

Si puede formatear su cuadro de diálogo con listas, me gusta el método de "casilla de verificación en el encabezado de la lista" (y la mayoría de los usuarios saben cómo usarlo).

SelectAllCheckBox

Si no desea utilizar una lista, creo que un botón o un hipervínculo (que alterna entre "Seleccionar todo" a "Select None" funcionarían mejor que otra casilla que es difícil de haga clic en todas las casillas de verificación. Además, desmarcar la casilla de verificación "marcar todo" no implica necesariamente una funcionalidad de "marcar ninguno" para un usuario.

0

Esta es la lógica para que un Control de usuario en WinForms implemente la respuesta de @nezroy. Esto le permite especificar una acción inicial [una de SelectAll o Deseleccionar todo] también.

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 
Cuestiones relacionadas