惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The GitHub Blog
The GitHub Blog
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Vercel News
Vercel News
腾讯CDC
博客园 - 聂微东
The Cloudflare Blog
F
Fortinet All Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
Last Week in AI
Last Week in AI
B
Blog

博客园 - bullfinch

Notes of "The Unbridged Pentium 4" - Pentium 4 System Overview Notes of "The Unbridged Pentium 4" - Pentium 4 Road Map Notes of "The Unbridged Pentium 4" - Overview of the Processor Role Notes of "Pentium Processor System Architecture" - Pentium Signal Interface (part) Notes of "Pentium Processor System Architecture" - Mutiple Processors and the MESI Model Notes of "Pentium Processor System Architecture" - The Functional Units & Pentium Cache Overview AMD Opteron Architecture related Fedora Core 3 挂载FAT32分区以及中文显示和输入 摄像头设置事件 linux下安装HP NC6000无线网卡(HP W500) C#学习笔记(八) C#学习笔记(七) C#学习笔记(六) C#学习笔记(五) 图像中密集点群的定位 C#学习笔记(四) 中兴ZXDSL831立式蓝猫自动拨号+NAT+DHCP设置 关于变参(zz) C#学习笔记(三)
TreeView.AfterCheck和TreeNode.Checked赋值的问题
bullfinch · 2005-03-22 · via 博客园 - bullfinch

下午在按照Programming C#的例程写一个TreeView的Event,其中一个是在Check一个Node之后,把它的所有的子结点以及子结点的子结点都Check上,Uncheck时也一样。按照书上的实现方法,我添加了一个TreeView.AfterCheck event handler,并在里面设置了TreeNode.Checked = check。但是运行的时候出错,debug过程中发现,总是在TreeNode.Checked = check之后,又回到TreeView.AfterCheck的event handler。原来是在设置TreeNode.Checked的值之后,又引发了AfterCheck event,如此往复,进入死循环。

google求解,在msdn上发现解答:
http://msdn.microsoft.com/library/default.asp?url=/library/en-s/cpref/html/frlrfsystemwindowsformstreeviewclassafterchecktopic.asp

摘录一段:
Note   Setting the

TreeNode.Checked property from within the BeforeCheck or AfterCheck event causes the event to be raised multiple times and can result in unexpected behavior. For example, you might set the Checked property in the event handler when you are recursively updating the child nodes, so the user does not have to expand and check each one individually. To prevent the event from being raised multiple times, add logic to your event handler that only executes your recursive code if the Action property of the TreeViewEventArgs is not set to TreeViewAction.Unknown.

原来关键就是靠TreeViewEventArgs.Action是否是TreeViewAction.Unknown来判断是否是用户Check了Node。

msdn上还有一段例程代码:

Example

The following example updates all the child tree nodes of a TreeNode when the user changes its checked state. This code assumes you have a Form with a TreeView that has TreeNode objects in its TreeNodeCollection. The TreeNodeCollection should have tree nodes with child nodes.