全选或取消全选复选框的最佳模式是什么。有人可以想出一个更好的方法来以这种形式拥有它:
5 回答
老实说,我从不喜欢在“全选”选项中使用复选框的想法,即使您经常看到它。这不是要选择的单个项目,而是一个动作。如果您选择全部然后开始取消选择列表中的单个项目,则全选复选框的“选中”状态本质上会变得混乱。我更喜欢使用一个简单但明显的链接/按钮,当它被点击时,它会在“全选”和“取消全选”之间切换。当单个项目被取消选择时,没有任何状态可以让您感到困惑,并且按下按钮的结果是毫无疑问的。该操作的独特性使得来回切换非常合理(而不是使用两个始终可见的按钮;一个用于全选,一个用于取消全选),因为您最多只需单击两下即可实现所需的行为。它在视觉上将这个“动作”与单个项目区分开来,防止误点击和区分行为。
如果您可以使用列表格式化对话框,我喜欢“列表标题中的复选框”方法(并且大多数用户直觉地知道如何使用它)。
如果您不想使用列表,我认为按钮或超链接(从“全选”切换到“全选”会比在所有其他复选框中难以辨认的另一个复选框更好。另外,取消选中“全选”复选框并不一定意味着用户具有“全选”功能。
只需将全选复选框靠近左边框即可。也许更改文本,例如“所有以前的游戏”等,以明确选择“所有”的内容。
这是 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
我会说这是进行全选/取消全选的最直观的方法。但我也看到有些人使用链接,但我更喜欢那样。