以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  打开目录树窗口节点停留位置问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92699)

--  作者:落叶孤影
--  发布时间:2016/11/10 16:03:00
--  打开目录树窗口节点停留位置问题

单击某按钮,打开一个带目录树的窗口,选择该目录树的某个节点后关闭窗口。再次打开该窗口的时候,目录树窗口的节点又恢复了原样,如何打开窗口的时候让目录树节点停留在上次打开选中的那个节点上呢?
下面是有问题的目录树窗口:


图片点击可在新窗口打开查看此主题相关图片如下:有问题的目录树选择.gif
图片点击可在新窗口打开查看
如何能像下面这种目录树呢?


图片点击可在新窗口打开查看此主题相关图片如下:没问题的目录树.gif
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2016/11/10 16:12:00
--  
窗口打开事件,从单元格取得之前的值,循环所有节点,比较得到指定节点,然后选中
--  作者:落叶孤影
--  发布时间:2016/11/10 16:37:00
--  
老师能否写段示例的代码?
--  作者:有点蓝
--  发布时间:2016/11/10 17:05:00
--  
参考:http://www.foxtable.com/webhelp/scr/2961.htm


        For Each nd As WinForm.TreeNode In trv.AllNodes
            If nd.Text.IndexOf(drp.Text) >= 0 Then
                trv.StopRedraw()
                trv.SelectedNode = nd
                nd.EnsureVisible()
                trv.ResumeRedraw()
                Exit For
            End If
        
Next


--  作者:落叶孤影
--  发布时间:2016/11/10 19:29:00
--  
请问代码是写到窗口的AfterLoad事件中吗?老师,不好意思,我自己还是不会写代码!
这是窗口的AfterLoad事件代码:请老师帮忙给看看该怎么写?谢谢!
Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim rts() As String = {"全部","收入","成本","费用","税金","资产购置","其他"}
Dim nd As WinForm.TreeNode
Dim dt As DataTable = DataTables("科目明细表")
tr.StopRedraw()
tr.Nodes.Clear
For Each rt As String In rts
    tr.Nodes.Add(rt)
Next
For Each dr As DataRow In dt.Select("","科目代码")
    If dr.IsNull("科目代码") = False AndAlso dr("科目代码").Length = 4 Then
        Dim i As Integer = CInt(dr("科目代码").Substring(0,1))
        nd = tr.Nodes(i).Nodes.Add(dr("科目代码"),dr("科目代码") & " " & dr("科目名称"))
        Functions.Execute("AddChildren",nd,dt)
    End If
Next
tr.ResumeRedraw()

--  作者:有点蓝
--  发布时间:2016/11/10 20:22:00
--  

DropDownOpened事件


Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim v1 As String = e.Form.DropDownBox.Text

For Each nd As WinForm.TreeNode In tr.AllNodes
    If nd.Text.IndexOf(v1) >= 0 Then
        trv.StopRedraw()
        trv.SelectedNode = nd
        nd.EnsureVisible()
        trv.ResumeRedraw()
        Exit For
    End If
Next

--  作者:有点色
--  发布时间:2016/11/11 9:46:00
--  
 本身,就应该是停留。你生成目录树的代码,写到 afterLoad 事件,不要写到 DropDownOpened
--  作者:落叶孤影
--  发布时间:2016/11/11 16:26:00
--  
老师,我这个窗口是模式窗口!没法用e.Form.DropDownBox控件。还请老师再看看该怎么改?
打开窗口是在表的:
CellButtonClick 事件打开的,代码如下:
If e.Col.Name = "支出明细" Then
    e.Cancel = True
    Forms("支出项目明细窗口").Open()
End If
窗口的AfterLoad 事件是5楼的代码!

--  作者:有点蓝
--  发布时间:2016/11/11 17:01:00
--  
5楼代码后面加上

Dim v1 As String = tables("xx表").current("xxx列")

For Each nd As WinForm.TreeNode In tr.AllNodes
    If nd.Text.IndexOf(v1) >= 0 Then
        trv.StopRedraw()
        trv.SelectedNode = nd
        nd.EnsureVisible()
        trv.ResumeRedraw()
        Exit For
    End If
Next

--  作者:有点色
--  发布时间:2016/11/11 17:57:00
--  
以下是引用落叶孤影在2016/11/11 16:26:00的发言:
老师,我这个窗口是模式窗口!没法用e.Form.DropDownBox控件。还请老师再看看该怎么改?

窗口的AfterLoad 事件是5楼的代码!

 

你可以直接隐藏窗口,而不是关闭窗口,这样效率也高

 

Forms("窗口1").visible = false