Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

123下一頁(yè)
返回列表 發(fā)新帖
查看: 11140|回復(fù): 23
打印 上一主題 下一主題

[模塊/函數(shù)] 【Access小品】先利其器 -- 通用TreeView加載程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-7-8 15:51:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  版友三個(gè)太陽(yáng)同志寫(xiě)了一段TreeView加載的程序,程序處理中用On Error Resume Next來(lái)排除已經(jīng)加載的相同數(shù)據(jù),我對(duì)此做法頗不以為然。不以為然的原因在于容錯(cuò)的處理通常是在除非必要時(shí)當(dāng)可用,對(duì)于簡(jiǎn)單而正常的邏輯,用容錯(cuò)處理方式總不是一個(gè)好習(xí)慣。不過(guò)三個(gè)太陽(yáng)同志希望簡(jiǎn)化代碼的初衷是值得贊賞的。

  TreeView控件是系統(tǒng)設(shè)計(jì)中最為常見(jiàn)的控件,因?yàn)槠鋸V泛的使用,使得在一個(gè)系統(tǒng)中常常需要處理很多的TreeView數(shù)據(jù)加載的問(wèn)題。TreeView數(shù)據(jù)加載的代碼本身并不復(fù)雜,但寫(xiě)起來(lái)比較繁瑣。究其原因,在于數(shù)據(jù)源與加載代碼耦合度過(guò)高,所以一樹(shù)一程序。由這個(gè)原因出發(fā)我們就會(huì)明白,簡(jiǎn)化TreeView加載的關(guān)鍵,在于數(shù)據(jù)源與子程序之間要降低耦合度。降低耦合度的方法,就是采用注入?yún)?shù)的方式來(lái)構(gòu)建我們需要的TreeView加載程序。

  要采取注入?yún)?shù)的方式,我們首先需要搞明白注入些什么樣的參數(shù)。你可能覺(jué)得這很簡(jiǎn)單嘛,當(dāng)然需要注入各級(jí)節(jié)點(diǎn)需要的數(shù)據(jù)源?墒菃(wèn)題的復(fù)雜性在于,每個(gè)TreeView的各級(jí)節(jié)點(diǎn)的數(shù)據(jù)源的規(guī)律并不是恒定的。它們可能來(lái)源于多個(gè)數(shù)據(jù)表,也可能僅僅來(lái)源于一個(gè)表,還可能來(lái)源于數(shù)組、集合等變量。由于這個(gè)復(fù)雜性的存在,就難以用一個(gè)放之四海而皆準(zhǔn)子程序來(lái)處理TreeView的通用加載。我們就需要抽象出一些常見(jiàn)和常用的數(shù)據(jù)源類型,僅對(duì)它們來(lái)編寫(xiě)通用的程序。至于你能夠或者你需要抽象出些什么類型,那是你開(kāi)發(fā)程序的實(shí)際需要所決定的。

  所謂工欲善其事工欲善其事必先利其器,而利其器的方法是有講究的。這個(gè)講究在于處理的思路和方法要得當(dāng),得當(dāng)?shù)臉?biāo)準(zhǔn)不主要在于一段代碼的簡(jiǎn)化(如版友三個(gè)太陽(yáng)同志所做的那樣),而更多的在于代碼的復(fù)用性高低。

示例:

視圖:


Office交流網(wǎng)開(kāi)發(fā)的Access專用樹(shù)控件免費(fèi)下載-支持64位
http://www.mzhfr.cn/book/accesstree/5.html




本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享分享 分享淘帖1 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2015-7-8 15:53:11 | 只看該作者
好作品!
回復(fù)

使用道具 舉報(bào)

3#
發(fā)表于 2015-7-8 15:56:33 | 只看該作者
強(qiáng)者風(fēng)范
回復(fù)

使用道具 舉報(bào)

4#
發(fā)表于 2015-7-8 16:34:30 | 只看該作者
開(kāi)始沒(méi)特別留意他的例子,覺(jué)得似乎缺少了展開(kāi)子節(jié)點(diǎn)的做法,便推薦他看看兩個(gè)帖子。
后來(lái)再仔細(xì)一看,他簡(jiǎn)化的代碼似乎存在邏輯錯(cuò)誤。即,子節(jié)點(diǎn)沒(méi)有從父節(jié)點(diǎn)里繼承過(guò)來(lái),而On Error Resume Next卻偏偏避開(kāi)了這個(gè)錯(cuò)誤,于是便修改代碼后回復(fù)了。
一般來(lái)說(shuō),這種情況,我比較推薦遞歸算法,寫(xiě)一個(gè)子函數(shù)隨時(shí)調(diào)用即可,沒(méi)必要一次性把所有節(jié)點(diǎn)加載完畢。特別是數(shù)據(jù)較多時(shí),這可能不是一個(gè)較好的策略。
5#
發(fā)表于 2015-7-8 16:56:02 | 只看該作者
呵呵,耦合無(wú)處不在啊
6#
發(fā)表于 2015-7-20 15:00:32 | 只看該作者
學(xué)習(xí)學(xué)習(xí),謝謝分享!
7#
發(fā)表于 2015-7-20 15:00:43 | 只看該作者
學(xué)習(xí)學(xué)習(xí),謝謝分享!

點(diǎn)擊這里給我發(fā)消息

8#
發(fā)表于 2015-7-23 06:59:44 | 只看該作者
學(xué)習(xí)啦  太強(qiáng)大了
9#
發(fā)表于 2015-7-29 01:35:26 | 只看該作者
todaynew兄
我做了一個(gè)使用你這個(gè)通用TreeView加載樹(shù)后并顯示對(duì)應(yīng)記錄的窗體,代碼比較冗長(zhǎng),你看看是否可以精簡(jiǎn)下,或者是否有更好的方法?

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x
10#
 樓主| 發(fā)表于 2015-7-29 14:31:12 | 只看該作者
hunrybecky 發(fā)表于 2015-7-29 01:35
todaynew兄
我做了一個(gè)使用你這個(gè)通用TreeView加載樹(shù)后并顯示對(duì)應(yīng)記錄的窗體,代碼比較冗長(zhǎng),你看看是否可 ...

兩句代碼即可:
Private Sub TreeView0_NodeClick(ByVal Node As Object)
    Me.Child1.Form.Filter = Node.Tag
    Me.Child1.Form.FilterOn = True
End Sub
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-16 18:11 , Processed in 0.103657 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表