[VB.NET]100分求解:如何屏蔽VB2005中TREEVIEW控件的AfterSelect事件?????

VB.NET源码-156个实用实例哦…… 100分求解:如何屏蔽VB2005中TREEVIEW控件的AfterSelect事件?????
当选择了一个TREEVIEW控件的焦点时就会触发AfterSelect事件,那么如果我想点击TREEVIEW控件中其它焦点,但又不想触发AfterSelect事件的话应该用什么语句来实现呢?? 请高手指点!
__________________________________________________________________________
如何确定您是否想要触发呢。是第一次触发,后面都不触发么?还是怎样?
__________________________________________________________________________
屏蔽AfterSelect事件可不是个好的想法,你最好把你最终想实现的功能或效果说一下,然后说明你的思路
如果有其他方式能实现的话,就不要抓住这一条路不放了
__________________________________________________________________________
同意LS。
__________________________________________________________________________
我想知道有什么类似开关的语句可以控制AfterSelect事件是否响应触发,这样我方便控制treeview在后台初始化时不响应AfterSelect事件,等初始化控件节点内容后再允许它响应AfterSelect事件. 哪位高手可以指点啊? 偶给100分,在线等!
__________________________________________________________________________
你可以在TreeView的BeforeSelect事件里通过事件参数e.Cancel=true来取消选中这个节点,这样取消后TreeView就不会发生AfterSelect事件了,当然节点也会选不中的.
__________________________________________________________________________
如果你可以知道什么不要使用AfterSelect事件的话,你也可以通过事件注销来把这个AfterSelect事件注销掉.
__________________________________________________________________________
vb中不加这个事件即可啊
__________________________________________________________________________
你可以在TreeView的BeforeSelect事件里通过事件参数e.Cancel=true来取消选中这个节点,这样取消后TreeView就不会发生AfterSelect事件了,当然节点也会选不中的.

up
__________________________________________________________________________
你可以跟据条件在事件里对不要执行的事件进行注册或注销,比如:

Private Sub treeView1_BeforeSelect(ByVal sender As Object, ByVal e As TreeViewCancelEventArgs)
注销事件
RemoveHandler Me.treeView1.AfterSelect, New TreeViewEventHandler(AddressOf Me.treeView1_AfterSelect)
注册事件
AddHandler Me.treeView1.AfterSelect, New TreeViewEventHandler(AddressOf Me.treeView1_AfterSelect)
End Sub


__________________________________________________________________________
那么这段代码写在窗体的LOAD事件里可以使用吗?
__________________________________________________________________________
可以。
__________________________________________________________________________
意思是你可以动态的对事注册或注销,写到哪里是你的代码上的逻辑了.
__________________________________________________________________________
我试过了,把

RemoveHandler Me.TreeView1.AfterSelect, New TreeViewEventHandler(AddressOf Me.TreeView1_AfterSelect)

这句放在LOAD事件里没起作用啊!....但是放在单独的按键代码里就可以,为什么啊????
__________________________________________________________________________
着急啊!诸位高手可否加我QQ教我啊? QQ:29127819
__________________________________________________________________________
楼主你看清楚了RemoveHandler 这个单词,很明显,这个是用来移除现有的已注册的事件的,
你只有在合适的时候调用RemoveHandler 及AddHandler方法才能适合到你的程序.不是说用一次就可以了.
__________________________________________________________________________
我想你的意思是不是这样
假设A树下面是A1,A2,你点A就展开A1 A2,既然不Afterselect那对应的B,假如是datagrid应该不起什么变化
你试着把那个Afterselect写在datagrid里面,而不写在树里面这样树就没有这个afterselect属性了,不知道你要的效果是什么东西
如果你不想要这个afterselect理论上你别写不就行了~~~
__________________________________________________________________________
我是意图是这样的,窗口加载时就开始读数据库将内容添加到TREEVIEW中,我的程序牵扯到添加时需同时对树进行遍历并使指定的节点得到节点。这就使窗体的LOAD过程中就已经触发了TreeView.AfterSelect事件,但是,我已经在该事件中添加了代码,用于根据treeview中有焦点的节点名来访问另外一个数据库。我的问题偏偏就是,我不想让窗体在LOAD过程中就触发TreeView.AfterSelect事件,我只想在窗体装入后再使TreeView.AfterSelect事件接受触发。

所以,我需要在窗体LOAD前关闭treeview对事件AfterSelect的响应,而在窗体LOAD之后打开它。

各位前辈,帮偶想想办法!
__________________________________________________________________________
哎,楼主啊,你早这么说不就解决了吗?

你不要在窗体设计的时候给TreeView添加这个事件,而是在窗体Load事件中动态的给TreeView添加这个事件,如下:


Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
AddHandler Me.treeView1.AfterSelect, New TreeViewEventHandler(AddressOf Me.treeView1_AfterSelect)
End Sub
__________________________________________________________________________
其实思路是这样的,当你加载数据的时候为了不响应AfterSelect事件,你就不要添加这个事件,而是当你把TreeView加载数据完成后再手动的添加上这个事件就OK了!

不要把所有的设计事情都要在窗体的设计时完成,在合适的时候调用合适的代码才是程序的逻辑!
__________________________________________________________________________
1.声明一个整型变量i
2.load载入事件中赋值为0
3.点击TreeView时赋值为1
4.AfterSelect事件方法中判断:
if i = 1 then
事件方法()
end if
__________________________________________________________________________
问题终于解决了,根据楼上网友BitCoffee的启发,我用了更简单的办法:

1. 声明窗体内全局变量 pas as Boolean = False
2. 窗体load过程先写TREEVIEW处理程序 最后一行为: pas=true
3. AfterSelect事件代码就三行:if pas then call 我的过程() endif

实现本人需求,非常感谢网友BitCoffee 向你至敬!同时感谢网友hbxtlhx热情相助,虽然没有采用,但你的方案比较高深,在一些特别的程序算法下更加适用。
__________________________________________________________________________
唉...
道理不很简单吗.
__________________________________________________________________________
并且把事件注销了再操作从效率上也是高的啊,如果用标志来操作,每次都要去判断,比注销掉要慢多了.
__________________________________________________________________________
Public Sub New()

此调用是 Windows 窗体设计器所必需的。
InitializeComponent()

修改你要注消的事件↓ 修改你要注消的事件过程名↓
RemoveHandler LabeTexBox1.sMouseUp, AddressOf LabeTexBox1_sMouseUp 注消事件

在 InitializeComponent() 调用之后添加任何初始化。

End Sub

............

在你需要这事件的过程,添加

修改你要注消的事件↓ 修改你要注消的事件过程名↓
AddHandler LabeTexBox1.sMouseUp, AddressOf LabeTexBox1_sMouseUp


Private Sub LabeTexBox1_sMouseUp(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles LabeTexBox1.sMouseUp

此事件必需出现在代码中

End Sub
__________________________________________________________________________
还好我的数据库记录不会太多,用标志判断的方法做做也无妨,毕竟简直嘛.如果数据量大了,当然就自考虑用屏蔽事件触发的方式了.
__________________________________________________________________________
偶要结贴了,现在给分,谢谢各位.
__________________________________________________________________________
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值