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

前端之家收集整理的这篇文章主要介绍了[VB.NET]100分求解:如何屏蔽VB2005中TREEVIEW控件的AfterSelect事件?????前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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 __________________________________________________________________________ 还好我的数据库记录不会太多,用标志判断的方法做做也无妨,毕竟简直嘛.如果数据量大了,当然就自考虑用屏蔽事件触发的方式了. __________________________________________________________________________ 偶要结贴了,现在给分,谢谢各位. __________________________________________________________________________ 原文链接:https://www.f2er.com/vb/263719.html

猜你在找的VB相关文章