如題,集思廣益,300分奉上.
我自己先開個頭,就是那個坑爹的“物件瀏覽器”(F2出現的那個)的“左右兩個串列框”經常會變得很長的bug,會把下面的注釋都蓋掉,挺煩的。
CSDN之VB一群:283362041
uj5u.com熱心網友回復:
最多裝裝那個滑鼠滾輪插件, 可以用滾輪上下翻代碼uj5u.com熱心網友回復:
程式中,對一些錯誤沒有處理,可能是致命的,可以添加一個自動添加on error goto errhandler的代碼的功能uj5u.com熱心網友回復:
可以添加一個查看程序或函式被呼叫的位置uj5u.com熱心網友回復:
就裝1個中輪滾動的插件,其他一律不裝,免的到別的電腦還打不了代碼了uj5u.com熱心網友回復:
這個我想過,弄一個選項,當添加事件程序時自動添加這種錯誤處理
uj5u.com熱心網友回復:
有用的插件必然需要涉及到VB語法決議。VB6的編譯器是封閉的,注定這么搞是勞命傷財,你見過VB6有好用的重構插件么?其實這是最有用的。.NET下好玩的東西很多,得益于Compiler as a Service,有那么多人在給C#撰寫各種插件。我舉一個例子,你看什么插件有給VB增加代碼折疊的功能很神奇吧,在Roslyn的幫助下,只要你會用TreeView,寫這樣的東西就和玩一樣,因為我直接訪問編譯器產生的語法樹(也包括tokens、expression tree等等)。
uj5u.com熱心網友回復:

呵呵,看來老兄對IDE擴展不太了解,VBIDE 擴展這方面能力是很強的,你幾乎可以控制編程的各個方面,ide內部個各個細節事實上是很開放的
uj5u.com熱心網友回復:
了解10年前的古董有意思么?VBIDE擴展能力很強?你給VB IDE添加一種新語言的支持看看?我不是說不可以,但是一定是很麻煩的。事實上用VSShell,不需要什么技巧,就可以在幾個小時內搞定。包括語法高亮、智能感知、Debugger集成。事實上MSDN上就有把IronPython集成到VSShell的例子。
你把Python整合到VBIDE試試看?
uj5u.com熱心網友回復:
我說了,給VB寫插件方便不方便不是看那些花花綠綠的東西。我可以給VB6添加“記事本”“時鐘”“計算器”“小說閱讀器”“ftp上傳下載工具”等很多功能,有意思么?你要想給VB6寫有意義的插件,你就得自己實作VB代碼的詞法/語法決議器乃至解釋器,因為這些是VB不開放的。
另外,VB語法本身很糟糕,給VB寫解釋器甚至比給C#寫解釋器還困難。
uj5u.com熱心網友回復:



VB語法解釋難,老兄你說笑話吧?
語法的靈活度和解釋的難度是成正比的。
比如最簡單的賦值(包括自增、自減)陳述句
A = 1
A = 1;
A += 1;
A -= 1;
A *= 1;
A /= 1;
A %= 1;
A <<= 2;
A >>= 2;
A &= 1;
A ^= 1;
A |= 1;
A++;
++A;
A--;
--A;
uj5u.com熱心網友回復:
筆誤,我想說的是給VB寫語法決議比給C#等現代的語言更難。
難的原因是VB包含很多過時的,非結構化的語言成分。
uj5u.com熱心網友回復:
運算子多寡和實作語法分析沒有什么必然的聯系,這是詞法分析解決的問題。uj5u.com熱心網友回復:
猜到你會拿這個來糊弄。
很可惜,結構化好不好和語法決議難不難沒有關系。
就算一個函式中有 100 個 GOTO,人讀不懂邏輯,但語法決議根本不受影響。
又:下面的代碼就是結構化好的語言寫的
#include"stdio.h" main(int _){_^*("^o^"+(*"@_@">>7))-74?putchar(_^*&("- -!"[1])-13?*(&"=^_^=Mx\"Mehc'2)IB[RLCET-_-b"[_]+4)^_-1:10),main(*("^o^y"+1)-'n'+_):*"^_^";getch();}
uj5u.com熱心網友回復:
應該是兩行的,鄙視對復制內容動手腳的網站!#include"stdio.h"
main(int _){_^*("^o^"+(*"@_@">>7))-74?putchar(_^*&("- -!"[1])-13?*(&"=^_^=Mx\"Mehc'2)IB[RLCET-_-b"[_]+4)^_-1:10),main(*("^o^y"+1)-'n'+_):*"^_^";getch();}
uj5u.com熱心網友回復:
首先,C不算我說的良好的語言,其次,你根本沒有理解我的意思,舉例也莫名其妙。
我說的是實作語法決議的難度,而不是看懂源代碼的難度。
uj5u.com熱心網友回復:
很難想象這是一個5星的用戶講出的話,那么業余。機器和人對復雜、簡單的理解是完全不同的。按照你的理論,最簡單的語言不是C,也不是VB,而是漢語了。你寫一個漢語的編譯器試試看?
VB有很多雜七雜八的規則,比如說
Open xxx For xxx As xxx
呼叫方法,有回傳值和沒有回傳值還要區分Call xxx和xxx(...)
還有那個奇怪的On Error Goto/Resume Next
甚至還有GoSub之類的語法,你嘗試用BNF范式描述下,多到讓你吐血,更不用說實作了。
uj5u.com熱心網友回復:
C# 作為 C++ 的繼承者,那么原先靈活(較難決議)的語法至少 90% 是支持的吧?雖然 C# 提供了“結構好”的語法,但也會兼容以前“結構不好”的語法吧!
假如你來寫 C# 的語法決議,總要考慮這些“結構不好”的代碼吧?——這就是難度啊
雖然舉的是C的例子,不一定完全符合C#,但是能直觀表現難度。
不要求讀懂,只要構思一下如何決議。
而 VB6 語法就簡單多了,寫千行左右代碼就可以做一個簡單的代碼格式化工具了:
統一縮進;
將一個 Dim 陳述句定義多個變數拆分成單獨的 Dim 陳述句。
uj5u.com熱心網友回復:
打開一個事件,最好是能將容錯處理代碼自動生成。生成一個新的工程,最好能自動生成一個標準的模塊,里面包含常用的API函式。uj5u.com熱心網友回復:
我想明白我倆的看法差異在哪里了。你側重整體的結構性,所以覺得沒有統一簡潔的范式。
VB6 陳述句的范式種類多,這我同意。
但由于從最早的“行式”語法演變而來,VB6代碼只要拆分成行,每行的范式都不復雜。
結合寫編決議器的實踐看,我認為拆分再單句范式分析,簡單。
uj5u.com熱心網友回復:
我不談那些看似很學術的觀點(其實編譯原理都學過,談不上學術),我想說說為什么要做語法分析。不談C#,談VB,可以看看roslyn為撰寫插件帶來了什么好處:
http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/roslyn-syntax-visualizers.aspx
你可以看到,一組簡單的API可以將用戶輸入的代碼轉化為語法樹。
以18L說的需求為例,如果你不做語法決議,你的插件美其名曰“添加例外處理”,其實不過是多重剪貼板,它只能機械地給你往一個方法中灌入一些文本,我現在要做如下的需求,將原有的例外處理全部去掉,或者將A形式的例外處理全部替換成B形式的,或者,我需要檢查代碼中哪些部分沒有覆寫到例外處理,你能實作么?
uj5u.com熱心網友回復:
又想復雜了不是!問題是 VB 就是簡單到沒有多形式的例外處理,純粹就是機械添加
Sub f()
On Error GoTo ErrHandler
<原內容>
ExitEntry:
Exit Sub
ErrHandler:
ErrProc STR_MODULE_NAME & ".f()"
Resume ExitEntry
End Sub
MZ-Tools 的模板就輕易實作了。
再把 <原內容> 中的 On Error Goto 0 挑出來做個提示,就能檢查未覆寫了。
uj5u.com熱心網友回復:
還有,我們的分歧是“語法決議”,只管語法的難易度,不管程式的正確性。uj5u.com熱心網友回復:
有個美國人居然把VB的錯誤處理還寫出一本書來。

你可見VB實作例外處理的復雜。
如果你不是只打算拿VB做玩具的話。
比如這樣的邏輯:
Try
AccessNetwork
Catch CannotAccessNetworkException
Try
Writelog CannotAccessNetworkException
Catch CannotWriteFileException
...
End Try
Catch DataInvalidException
Throw ArgumentException
End Try
你用VB6寫寫看。據我所知,VB6不支持處理例外處理中引發的新例外吧。
uj5u.com熱心網友回復:
MZ-Tools做的如何先不說,就說給你半個小時,讓你做一個出來,你就肯定辦不到。據說MZ-Tools還可以賣錢吧,這東西在.NET平臺上估計賣不出去,這就是差別——WPS For DOS是一個商品軟體,功能也就和VB拖一個文本框差不多,而且前者的用戶體驗還不能和后者比,因為時代不同了。
uj5u.com熱心網友回復:
我22樓已經打了預防針了!不要跑題,VB6“語法決議”。
uj5u.com熱心網友回復:
呵呵,啥都不用。uj5u.com熱心網友回復:
物件瀏覽器左右的串列框會把下面的注釋蓋住?
我沒遇到過呀
我每次都能拖動下面的注釋框的大小。
--------------
斑竹在vb論壇討論vb這個不好,那個不好,奇怪的很哦
uj5u.com熱心網友回復:
賣爆米花啦……賣小板凳啦……元旦特價,要的速度。買了干嗎?
你2啊,坐著看大蝦論劍啊
uj5u.com熱心網友回復:
哎 無語。。討論這么激烈干嘛。。 自己試試就知道咧 - -!uj5u.com熱心網友回復:
應該要像VBNET那樣,對變數 關鍵字,字串要用不同的顏色標出自動排版,對簡單錯誤提供修復建議 支持點到某個變數,這個變數都高亮顯示
uj5u.com熱心網友回復:
31樓說的那些功能我也想要啊,可惜那些就算codesmart也沒做,應該是難度比較高吧。我也就做點低難度的或簡化的,比如像vs.net里“向前向后定位”那樣的
uj5u.com熱心網友回復:
好象爭得跑題了。各位有用過那二個插件嗎?
codesmart,太強大了。精典的多頁代碼顯示,折疊代碼,關鍵字著色都有。
mztools,大家提的錯誤處理,他可以設定代碼段,一個快捷鍵就進來了。
另外就是滑鼠滾輪,這個一定要的,不然太不方便了。
語言沒有好壞,只是用的人習慣不習慣而已。
水平高低決定了用同一種語言,寫出來的東西也是良莠不齊。
個人觀點,能養家糊口的語言就是好語言。
uj5u.com熱心網友回復:
bcrun 想寫一個 vb Add-in,這很正常,各人有各人的習慣和需求。你有一個想法,先做出來就是,開始不用考慮什么大而全的目標。
Just DO it!
————————
caozhy 潑冷水,說 VB 語法決議困難,這是我要反對的,僅此而已。
我有實際經驗,在用 Smart Indent 之前,自己寫過簡單的語法決議、進行代碼格式化(當然沒有 Smart Indent 這樣全面),就是千行左右代碼搞定。
"MZ-Tools做的如何先不說,就說給你半個小時,讓你做一個出來,你就肯定辦不到。"——這種通過否定一點來否定全部的論證方法聽得耳朵都起老繭的,直接無視了。
————————
雖然準備有許多 Add-in,但是經常加載的也就有限個
MZ-Tools
Smart Indent
Ulli's VB Companion(支持滑鼠滾輪)
*** (大學室友寫的,我喜歡其中的一個功能)
uj5u.com熱心網友回復:
語法決議,那是機器的事,管人什么事啊!uj5u.com熱心網友回復:
哈哈,感覺caozhy對VB6是BS得一無是處啊,簡直恨不得用VB6的人全都轉到C#之類的.NET平臺才好,看到好多個帖子里的回復,都是這樣的感覺
uj5u.com熱心網友回復:
絕對有私心,典型的屁股決定嘴巴啊,一邊狂BS一邊狂來這個版撈專家分:)
他今年的MVP申請表中估計也少不了VB版答疑的帖子鏈接

唉呀,我們好像忘了把那個國產的免費VBIDE擴展AmicForVB貼出來了,感覺功能上可和mztools互補。可惜作者沒有堅持下去,最新的還是2009年的,有幾個很討厭的BUG都沒改正。
http://download.csdn.net/detail/acev/4656128
AmicForVB 1.1.8, vb插件,作者:予心居
uj5u.com熱心網友回復:
難度由上至下遞增,哈哈哈1、滾輪必須的;
2、代碼自動格式化;
3、檢測未使用的變數、函式、程序,友情提示;
4、查找同一變數、函式、程序等物件的所有參考,需要區分變數定義范圍;
5、代碼區塊折疊,類似于#region #endregion
6、最后提個難點的,能否添加函式指標,以前用VB6的時候,總覺得少一個功能,錯誤處理里面不能獲得當前函式名稱,類似如下:
on error goto errHandler
exit sub
errHandler:
err.function_name
uj5u.com熱心網友回復:
那你以為我21樓的代碼那來的,MZ-Tools 模板中有運算式可用
On Error GoTo ErrHandler
{PROCEDURE_BODY}
ExitEntry:
Exit {PROCEDURE_TYPE}
ErrHandler:
ErrProc STR_MODULE_NAME & ".{PROCEDURE_NAME}()"
Resume ExitEntry
uj5u.com熱心網友回復:
沒用過MZ-Tools這個工具,原來已經有這工具了啊,是我孤陋寡聞了,哈哈
uj5u.com熱心網友回復:
補充一句:我覺得Codesmart的autotext比mztools的Code Template方便先結帖,下次正式確定下初期的功能再發新帖。
uj5u.com熱心網友回復:
那就來個像 excel那樣的 自動填充功能吧。 即 text1 下拉后變成 text2...雖然可以用控制元件陣列+回圈完成,但有時候也真的需要啊
uj5u.com熱心網友回復:
請教,為啥我沒找到代碼折疊在哪里呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/153305.html
標籤:VB基礎類
上一篇:求幫組
