65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中的多选树状视图控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (18投票s)

2003 年 5 月 1 日

CPOL

5分钟阅读

viewsIcon

350178

downloadIcon

3755

一个实现多种方式的多选的树状视图控件

Sample Image - mwcontrols03.gif

引言

最新版本包含一个多选 TreeView 控件,允许您选择几种不同的 TreeNode 选择方式。

为此设置了一个测试项目 (MWControlsTest) 来测试所有的 MWControls

MWControls 包含

  • MWTreeView:一个多选 TreeView 控件 (MultiSelect,多选)
  • MWScrollLabel:一个标签控件,当鼠标悬停在其上方时,如果文本不适合显示,它会来回滚动文本。
  • MWScrollLabel 控件还支持以不同方向显示文本:Normal(正常)、UpsideDown(倒置)、Left(向左)和 Right(向右)。
  • MWLabel:一个 Label 控件,它使用 StringFormat.GenericTypographic,这意味着文本旁边不需要大片空白区域。
  • MWLabel 控件还支持以不同方向显示文本:Normal(正常)、UpsideDown(倒置)、Left(向左)和 Right(向右)。

使用的编码技术

MWTreeView

  • TreeNode 的多选功能。
  • 重写了 CancelEventArgs,以便可以设置 AfterXXXBeforeXXX 事件处理程序,允许程序员取消设置属性。

MWScrollLabel

  • 使用一个定时器进行滚动。

MWLabelMWScrollLabel

  • GDI+ 用于绘制所有内容(文本和图像)
  • Enabled 属性设置为 false 时,文本会正确地呈现为禁用状态
  • 使用继承自 UITypeEditor 的图形化设计时编辑器来处理 TextDir 属性

全部

  • 继承,包括重写事件处理程序,以及编程绕过父控件中隐藏的某些方法等事实

缺点

  • MWLabelMWScrollLabel:未使用 UseMnemonic 属性。(我本人不打算修复此问题。如果有人有解决方案,请告知我。)
  • MWTreeView:当 HotTracking 开启时,颜色不正确。(我可能不会自己修复此问题。如果有人有解决方案,请告知我。)

版本历史和更多关于控件的信息

版本 1.0.3.0

MWTreeView:

  • MWTreeView 控件支持正确的多选功能。我说正确,意思是比我见过的任何其他免费的(C# 或其他)都好。
  • MultiSelectMWTreeView 控件的一个属性,可以设置为以下值之一
    • NoMulti:多选已关闭。但其他所有功能仍然可用,因此它仍然比普通 TreeView 控件工作得更好。
    • Multi:自由无限制多选 - 可以选择任何 TreeNode
    • MultiSameBranchAndLevel:只能选择同一分支和同一级别的多个 TreeNode
    • MultiSameBranch:只能选择同一分支的多个 TreeNode
    • MultiSameLevel:只能选择同一级别的多个 TreeNode
  • 现在有几个键可以对 MWTreeView 进行操作:Ctrl+A 选择所有 TreeNode(根据 MultiSelect 属性施加的限制),等等,等等。
  • 可以使用鼠标结合 Control、Shift 和 Alt 键来选择 TreeNode
  • 如果 MultiSelect 属性设置为 NoMulti 以外的值,则根本不需要选择任何 TreeNode,一旦选择了一个,就可以取消选择(按住 Control 键并单击鼠标)。
  • 原始 TreeView 控件的 FullRowSelect 属性似乎不起作用(如果我错了,请纠正我)。它现在已实现。
  • 有大量的代码(仅 MWTreeView 类就有 3400 多行),所以我猜这是一个(希望是个好)如何子类化一个控件并添加大量功能的示例。

版本 1.0.2.0

MWControlsTest

  • 添加了 MWControlsTest 项目,使得测试 MWControls 的所有功能变得非常容易。
  • 添加到 MWControls 的任何新控件都可以出现在一个新的 TabPage 上。

版本 1.0.1.0

MWScrollLabel

  • MWScrollLabel 是一个子类化的 Label 控件,如果整个文本不适合显示,可以将其设置为来回滚动文本。我使用它的方式是在鼠标悬停在控件上时开始滚动。
  • 有相当多的选项可以用来控制滚动。
  • 请注意,MWScollLabel 控件只在一行上显示其文本。这是故意的,并且与其滚动功能相结合,这正是实现此控件的根本原因。

版本 1.0.0.0

MWLabel

  • 文本使用的 StringFormat 可以设置为以下两个选项之一:GenericDefaultGenericTypographic
    • GenericDefault:这是普通 Label 控件使用的 StringFormat
    • GenericTypographic:此 StringFormat 在测量字符串方面要精确得多。
  • 使用 GenericTypographic 选项(默认)意味着,如果文本右对齐,即使对于没有空格的长单词,它也会正确地右对齐。
  • 文本方向可以设置
    • Normal:正常水平文本
    • UpsideDown:倒置显示的水平文本
    • Left:可读的垂直文本,需要将头向左倾斜
    • Right:可读的垂直文本,需要将头向右倾斜
  • 有一个选项可以显示图像(普通的 Image 属性或来自 ImageIndex 属性的图像),图像可以显示在文本上方,或像普通 Label 控件一样显示在文本下方。
  • 如果使用图像(普通的 Image 属性或来自 ImageIndex 属性的图像),则图像将显示在靠近相应边缘的位置 - 而不是距离边缘的某个奇怪的任意距离。

免责声明

Mikael Wiberg 2003

请随意使用此代码,只要您不将其归功于自己。如果它用于商业项目或应用程序,请提及我的名字。如果您对这段代码感到满意,欢迎随意捐赠任何金额。 ;) 请自行承担使用此代码的风险。如果在使用过程中您的机器爆炸了 - 别怪我。

历史

  • 2003 年 6 月 16 日:更新

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.