2009-02-06 149 views
16

选择全部或全部取消选择复选框的最佳模式是什么?有人能想出更好的办法把它以这种形式:
最有用的选择所有/取消选中所有复选框格式

enter image description here

+0

相关http://ux.stackexchange.com/questions/21415/ux-review-word-for-select-all – 2014-06-12 15:16:16

+0

相关http://ux.stackexchange.com/questions/1382/check-all-uncheck-所有复选框兼顾可用性 – 2014-06-12 15:17:16

回答

28

我说实话,我从来没有喜欢过使用复选框作为“全选”选项的想法,即使你看到它很多。这不是一个要挑选的物品,而是一个动作。如果您选择全部,然后开始取消选择列表中的单个项目,则全选复选框的“已选中”状态会变得非常混乱。我更喜欢使用一个简单但明显的链接/按钮,在点击“全选”和“全选”之间切换。当单个项目被取消选择时,没有一种状态可以让你感到困惑,并且按下按钮的结果从未被怀疑。操作的独特性使得切换来回切换是完全合理的(而不是使用两个始终可见的按钮;一个用于全选,一个用于全选),因为您距离所需行为最多两次点击。它从视觉上将这个“行动”从单个项目中分离出来,防止错误和区分行为。

-1

我会说,这是做出选择的最直观的方式/取消选择所有。但我也看到一些使用链接,但我更喜欢这一点。

+0

具有执行操作而不是指定离散选项的检查按钮不是非常可用的IMO。 – 2009-02-06 22:29:08

1

只需将“全选”复选框靠近左边框即可。也许可以改变文字,如“所有以前的游戏”等,以清楚地说明选择了“全部”。

3

如果您可以使用列表格式化对话框,我喜欢“列表标题中的复选框”方法(并且大多数用户直觉地知道如何使用它)。

SelectAllCheckBox

如果你不想使用列表,我觉得一个按钮或超链接(即从“全选”,以“不选”切换将工作比另一个复选框,这是很难更好在所有其他复选框中取消选中,同时取消选中“全选”复选框并不一定会为用户取消“不选中”功能。

0

下面是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