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。此时模态窗口会变为非模态窗口。。。。。


猜你喜欢

转载自blog.csdn.net/F2004/article/details/17561327