VB6轉VB.Net學習筆記

OCX控件註冊:regsvr32 xxx.ocx,不需要加任何參數。

regsvr32的用法爲:
regsvr32 [/s] [/n] [/i(:cmdline)] dllname
其中dllname爲activex控件文件名,建議在安裝前拷貝到system文件夾下。
參數有如下意義:
/u——反註冊控件
/s——不管註冊成功與否,均不顯示提示框
/c——控制檯輸出
/i——跳過控件的選項進行安裝(與註冊不同)
/n——不註冊控件,此選項必須與/i選項一起使用 

OCX控件在升級之後被封裝成AxInterop.XXX和Interop.XXX的dll,在Win7下可能不能正常運行。
可以執行bcdedit /set nx alwaysoff然後重啓Win7來關閉Win7的DEP。
或者在Build Events的Post-build event command line中添加如下兩行代碼。
call "$(DevEnvDir)..\Tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
Win7 64位的DEP模式據說是alwayson,這種情況下,上述後面那種方法就無效了。


VB6:可以通過Form.Controls獲得畫面上的所有控件。
VB.Net:Form.Controls只能獲得通過Form.Controls.Add添加的控件。即VB.Net下,控件是有層次的,Form.Controls只能獲得容器,不能獲得添加到容器內的控件。


Win7下,向系統日誌寫入內容需要系統管理員權限。
如果自定義的日誌文件處於C:\Program Files內,也需要系統管理員權限。


TextBox的KeyDown事件不能響應Tab鍵
http://bbs.csdn.net/topics/240087876


某些早期的ocx控件通過互操作導入.net之後,在win7系統下切換輸入法時,可能會導致程序死機。

其中一個原因可能是win7切換輸入法時,會產生IMN_SETSENTENCEMODE消息,而ocx控件不能處理這個消息,導致出錯。

在XP下,切換輸入法時,不會產生IMN_SETSENTENCEMODE消息,所以程序正常運行。

通過SetWindowsHookEx設置鉤子監聽WM_IME_NOTIFY消息,不能使用GET_MESSAGE鉤子,應該用WH_CALLWNDPROC鉤子

可以通過Marshal.PtrToStructure將lParam轉化成CWPSTRUCT

CWPSTRUCT結構定義如下:
<StructLayout(LayoutKind.Sequential)>
    Public Structure CWPSTRUCT
        Public lParam As Integer
        Public wParam As Integer
        Public Msg As Integer
        Public hWnd As Integer
    End Structure


System.Threading.Thread.CurrentThread.ManagedThreadId 和WinAPI的GetCurrentProcessId,結果是不一樣的,不能等價替換。


vb6下,在Form1中打開Form2。在Form2中,將Form.Enabled設爲false,然後再設爲true。
在關閉Form2,回到Form1時,會使得Form1的Focus設到TabIndex爲0的控件。


VB.NET下,打開一個模態窗口,然後在子畫面中將父畫面Enabled改爲False,再改爲True。此時模態窗口會變爲非模態窗口。。。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章