Web下TreeView同一节点连续点击,只执行一次SelectedNodeChanged的解决

ASP.NET WebForm TreeView 连续点击处理
本文介绍了如何解决ASP.NET WebForm中TreeView控件在同一节点连续点击时,仅触发一次SelectedNodeChanged事件的问题。解决方案是在事件处理程序中将选中节点的Selected属性设置为false,以确保每次点击都能执行事件。

 

一、本章主要介绍.NET一个小技巧,在web下的TreeeView,当对一个节点进行SelectedNodeChanged后,如果再次连续单击这个节点,则SelectedNodeChanged不会再触发,为了使SelectedNodeChanged每次都执行,要进行如下操作:

     SelectedNodeChanged事件里,对选中的节点马上将其Selected属性置为false

 

二、具体例子如下:

    我的Web应用的名字为MingXu.WebSite,我在根目录下见了一个目录Controls,用来放WebUserControl,我的例子就是一个WebUserControl

 

WebUserControl代码如下:

1、前台页面内容:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ucTreeList.ascx.cs" Inherits="MingXu.WebSite.Controls.ucTreeList" %>

<asp:TreeView ID="tvTest" runat="server"

    onselectednodechanged="tvTest_SelectedNodeChanged">

</asp:TreeView>

<p>

    显示选中节点的Text:<asp:TextBox ID="txtSelectedNodeText" runat="server"></asp:TextBox>

    节点单击计数器:<asp:TextBox ID="txtCount" runat="server"></asp:TextBox>

</p>

 

2、后台文件:

//******************************************************

//文件名:ucTreeList.ascx

//功能:WebTreeView同一节点连续点击,只执行一次SelectedNodeChanged的解决

//作者:徐明

//日期:2009-11-4

//*******************************************************

 

using

在Windows Forms的TreeView控件中,防止同一节点多次点击导致重复执行逻辑,可以采用以下策略: 1. **事件委托缓存**: - 在节点单击事件的处理函数内部,创建一个静态字段来保存当前正在处理的节点引用。每次事件发生时,检查这个字段是否指向同一节点,如果是,则忽略本次事件。 ```csharp private TreeNode _currentProcessingNode; private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (_currentProcessingNode == e.Node) return; _currentProcessingNode = e.Node; // 正常处理点击逻辑... _currentProcessingNode = null; } ``` 2. **事件处理逻辑更新**: - 将事件处理逻辑封装到一个独立的方法中,并在开始处理前检查是否有上一次处理记录。如果没有,才开始处理。 ```csharp private void ProcessTreeNode(TreeNode node) { if (!_processedNodes.Contains(node)) { _processedNodes.Add(node); // 正常处理点击逻辑... } } private List<TreeNode> _processedNodes = new List<TreeNode>(); private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { ProcessTreeNode(e.Node); } ``` 3. **禁用重复点击**: - 使用锁定机制,当某个节点被选中时,暂时禁用其自身以及所有子节点点击事件。 ```csharp private bool _processing = false; private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (_processing) return; _processing = true; try { // 处理点击逻辑... } finally { _processing = false; } } ``` 4. **取消按钮或确认提示**: - 提供一个确认或者取消按钮,让用户确认是否真的想再次执行操作。 以上方法可以根据实际需求选择合适的方式。记住,关键在于在处理点击事件时,始终跟踪上次执行的操作以便于判断是否应该继续执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值