19

全选或取消全选复选框的最佳模式是什么。有人可以想出一个更好的方法来以这种形式拥有它:

在此处输入图像描述

4

5 回答 5

40

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

于 2009-02-06T22:05:28.467 回答
4

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

全选复选框

如果您不想使用列表,我认为按钮或超链接(从“全选”切换到“全选”会比在所有其他复选框中难以辨认的另一个复选框更好。另外,取消选中“全选”复选框并不一定意味着用户具有“全选”功能。

于 2009-02-06T22:18:05.243 回答
1

只需将全选复选框靠近左边框即可。也许更改文本,例如“所有以前的游戏”等,以明确选择“所有”的内容。

于 2009-02-06T22:05:00.683 回答
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
于 2016-02-25T00:55:25.390 回答
-1

我会说这是进行全选/取消全选的最直观的方法。但我也看到有些人使用链接,但我更喜欢那样。

于 2009-02-06T22:02:40.267 回答