正文
vb.net内存不足 vbnet core
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
在vb.net2015中为什么在只用一个picturebox只显示一张图片的情况下,出现“内存不足”的错误
ret(i, j) = input.Clone(New Rectangle(w * i, h * j, w,h), maging.PixelFormat.DontCare)
宽度高度需要再 * (i + 1)了,可能vb.net裁剪范围超出了图片范围会出错的吧,倒不是真的内存不足了。
玩火线精英卡怎么办?
问题一:为什么我家的电脑很卡机,一玩火线精英、穿越火线和生死狙击就很卡。怎么让电脑不卡机。 系统用久,电脑运行肯定会慢,不是电脑配置不行,而是电脑垃圾和插件过多,开机启动项目过多,造成的电脑卡,以及慢的情况,这个时候,最好的选择就是重装系统,重装系统,只会改变电脑C盘里的系统,像电脑D和E和F盘里面的文件和东西一个都不会少。根据你的电脑配置,完全可以装WIN7的64位操作系统。用电脑硬盘安装系统,可以安装WIN7的系统,具体操作如下:1.首先到ghost系统基地去ghost008/win7/shendu/2665下载WIN7的操作系统:2.将下载的WIN7的64位操作系统,解压到D盘,千万不要解压到C盘。3.打开解压后的文件夹,双击“AUTORUN”,在打开的窗口中,点击“安装”.即可4.在出现的窗口中,ghost映像文件路径会自动加入,选择需要还原到的分区,默认是C盘,点击“确定”按钮即可自动安装。
问题二:电脑玩火线精英很卡很卡很卡怎么办 1,打开腾讯电脑管家――工具箱――游戏加速
2,内存占用大,有必要的话,加多条内存
平时也可以清理加速下内存
打开腾讯电脑管家――电脑加速――开启小火箭
3,清理下垃圾,管家带扫一扫,闲时清理省事省心
问题三:火线精英怎么卡的 原因可能很多 比如显卡不支持 比如显示器分辨率设置不当――很多显示器,特别是液晶显示器,要在默认的分辨率下才有最佳表现,要是自己调整了不适当的分辨率与刷新率,买最猛的显卡都没用 比如CPU温度过高 比如没有安装最新的DirectX(注意有些游。
问题四:玩4399火线精英屏幕一卡一卡是不是正常的? 原因可能很多
比如显卡不支持
比如显示器分辨率设置不当――很多显示器,特别是液晶显示器,要在默认的分辨率下才有最佳表现,要是自己调整了不适当的分辨率与刷新率,买最猛的显卡都没用
比如CPU温度过高
比如没有安装最新的DirectX(注意有些游戏需要的版本)
比如没有安装必须的音视频解码器乃至播放器
比如缺少某些dll文件
比如vb库、vc库、netframework、java虚拟机的支持等 换一下吧,或者是老化了。
问题五:为什么火线精英一玩就很卡 因为你显卡不好
问题六:火线精英为什么玩火线精英这么卡 服务器太垃圾了
问题七:为什么我玩火线精英很卡,还经常掉线,断开连接,游戏里做什么都好卡。而玩其他的游戏就很顺畅(附图) 建议楼主按以下方法进行下检查:
1、网络
检查下网络,是不是网速不好啊,打开腾讯电脑管家一工具箱一网速测试,测试下是不是网速不怎么给力
2、电脑的温度
电脑开机时过长或是运行的软件过多风扇灰尘转速不够灰尘过多导致电脑过热,所以电脑会卡,打开腾讯电脑管家里硬件检测的检测温度的悬浮窗,可以随时查看你电脑的温度
3、电脑的垃圾过多
长时间使用电脑导致电脑的垃圾过多,可以使用腾讯电脑管的垃圾清理功能,清理下电脑的垃圾还有注册表、插件等来提升电脑的速度
4、运行的软件过多
有一些软件运行的话会占用电脑的宽带以及内存,这样也会导致卡,打开腾讯电脑管家使用腾讯电脑管家里的电脑加速功能,优化一些不需要的软件,来提升电脑的速度
5、中了病毒、木马
也会导致电脑过慢,可以开启腾讯电脑管家小红伞查杀引擎(打开腾讯电脑管家一杀毒一扫描查杀)如果杀到木马或病毒后,应立即重启,重启电脑后,来到“隔离|恢复”,彻底删除,木马和病毒!
6、使用电脑诊所查看下
腾讯电脑管家--电脑诊所--腾讯专区--腾讯游戏--自助攻略--玩英雄联盟卡,点击查看,腾讯电脑管家会为我们分析原因并提出解决方案的。
希望我的回答可以帮到你,如未帮上请见谅。
问题八:为什么4399火线精英那么卡 那是因为你的网络不好,建议换一个网络。如果还不行,那就换台电脑试试(换电脑的同时也记得要换网络)。
问题九:为什么我玩火线精英这么卡 先发配置再说话
问题十:火线精英为什么玩火线精英卡 因为运行内存不足导致卡,或者是网络不稳定导致的卡。望采纳,谢谢
VB.NET编程中调用Windows API
Windows API就是Windows系统的API函数简称(Application Program Interface 即 应用程序接口函数) 它是Windows操作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数 这些函数一般都比较底层 所以当各种开发语言使用自带的函数或类库已无法解决问题时 调用Windows API函数往往是一种非常直接 有效的解决方法 但由于在程序中调用Windows API函数一般都很复杂 所以对于程序员来说 是否能够灵活的使用Windows API函数 往往也是其水平高低的一个重要标志 但自从微软推出 Net框架以后 各种开发基于 Net平台下的程序语言 如Visual Basic Net Visual C#等却很少使用Windows API函数 并且微软公司也不像以前那样 提倡在这些 Net开发语言中使用Windows API函数 其主要的原因如下 Net框架所附带的类库 Net FrameWork SDK是一个内容丰富 功能强大的软件开发包 各种Windows API函数所实现的各种功能几乎都可以在这个软件开发包中找到与之对应的部分 微软Visual Basic Net Visual C#等目的是编写跨平台的应用程序 如果在Visual Basic Net Visual C#等中使用Windows API函数 这也就注定了编写出的程序只能运行于Windows平台之下 而弱化了 NET的跨平台能力 这也就是为什么微软不提倡在 Net平台调用Windows API函数的原因 虽然微软并不提倡在Visual Basic Net Visual C#中调用Windows API函数 但由于目前 Net 框架推出时间较短 Net FrameWork SDK中提供的类库还并不足以完全替换Windows API函数的所有功能 所以在某些时候 Net开发语言还是必须要调用Windows API函数 一 平台调用 托管DLL 非托管DLL简介 托管DLL就是能够在公共语言运行库(Common Language Runtime 简称CLR)中能够直接引用的 并且扩展名为 DLL 的文件 具体所指就是封装各种命名空间所在的DLL文件 如System dll等 非托管DLL就是平常所的动态链接库等 其中就包括了封装所有Windows API函数的DLL文件 各种非托管DLL中的函数在公共语言运行库中不能直接被调用 而需要经过 Net框架提供的 平台调用 服务后才可以 平台调用 是 Net框架为Visual Basic Net Visual C#等 Net开发语言提供的一种服务 用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数) 平台调用 依赖于元数据在运行时查找导出函数并封装其参数 图 公共语言运行库利用 平台服务 调用非托管DLL中的函数的流程图 图 平台服务 的调用非托管函数的流程图在托管代码中使用 平台调用 服务调用非托管DLL中封装的函数时 平台服务 将依次执行以下操作 . 查找包含该函数所在的DLL文件 . 如果找到 则将该DLL文件 加载到内存中 . 查找函数在内存中的地址并将其参数推到堆栈上 并封送所需的数据 . 将控制权转移给非托管函数 这样整个函数调用完成 在Visual Basic Net中使用 平台调用 服务 申明Windows API函数主要有二种具体的实现方法 . 使用DllImport特征类来申明Windows API函数 . 使用 Declare 语句来申明Windows API函数 这二种方法虽有异曲同工之效 但在繁简上却有很大差异 第一种方法申明过程比较复杂 很容易在申明Windows API函数时出错 所以并不提倡 而第二种方法相对简单 并且又保存了以前Visual Basic中的很多语法 所以在平常时大都使用这种方法来申明Windows API函数 二.VB Net查看文件中图标的函数及申明Windows API的方法 Visual Basic Net要实现查看文件中的图标 目前只使用 Net FrameWork SDK是无法实现这种功能的 正如前面所说 主要是由于 Net FrameWork SDK推出的时间较短 其功能还不可能面面俱到 解决问题的关键是正确使用Windows API函数 其中所涉及到的Windows API函数主要有二个 其一是获得指定文件中的图标数目 其二是从指定文件的指定位置导出图标的Windows句柄 这二个函数都位于 Shell dll 文件中 并且函数的入口点都为 ExtractIcon 下面是在Visual Basic Net中分别使用DllImport特征类和 Declare 语句申明这二个Windows API函数的具体方法 ( ) 使用DllImport特征类来申明Windows API函数 下面是在Visual Basic Net中使用DllImport特征类申明二个Windows API函数的具体示例 函数ExtractIcon 其功能是是从指定文件的指定位置导出图标的Windows句柄 < System Runtime InteropServices DllImport ( Shell dll EntryPoint := ExtractIcon ) > _Public Function _ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtrEnd Function 函数Icon_Num 其功能是获得指定文件中的图标数目< System Runtime InteropServices DllImport ( Shell dll EntryPoint := ExtractIcon ) > _Public Function _Icon_Num ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As Integer ) As IntegerEnd Function在使用DllImport特征类申明Windows API函数时 如果申明的函数名称和函数的入口点相同 则可以在申明Windows API函数时 省略定义函数入口点对应的代码 即EntryPoint对象字段对应的代码 这样声明ExtractIcon函数的代码也可以简化为如下所示 < System Runtime InteropServices DllImport ( Shell dll ) > _Public Function _ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtrEnd Function( ) 使用 Declare 语句来申明Windows API函数 使用 Declare 语句的确比使用DllImport特征类要简单了许多 下面是在Visual Basic Net中使用 Declare 语句来声明上述二个Windows API函数的具体方法 Declare Auto Function ExtractIcon Lib Shell dll Alias ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtr 声明ExtractIcon函数Declare Auto Function Icon_Num Lib Shell dll Alias ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As Integer ) As Integer 声明Icon_Num函数在Visual Basic Net中声明Windows API函数时 Declare 语句中Alias关键字的作用相当于使用DllImport特征类中的EntryPoint对象字段 同样在使用 Declare 语句声明Windows API函数时 如果声明的函数和函数的入口点相同 也可以省略Alias关键字对应的代码 所以ExtractIcon函数也可以简化为如下 Declare Auto Function ExtractIcon Lib Shell dll ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtr下面就结合一个示例的编写过程来掌握的这二个Windows API函数的具体使用方法 这个示例的作用就是读取指定文件中的图标数目 并显示文件中的图标 三.本文中程序的编写 调试和运行环境 ( ) 视窗 高级服务器版 ( ) Visual Studio Net 企业结构设计版 Net FrameWork SDK版本号 四.Visual Basic Net读取文件中的图标的实现步骤 下面介绍的示例 其功能读取指定文件中包含的图标数目 并把这些图标全部显示出来 下面是这个示例的实现步骤 启动Visual Studio Net 选择菜单【文件】|【新建】|【项目】后 弹出【新建项目】对话框 将【项目类型】设置为【Visual Basic项目】 将【模板】设置为【Windows应用程序】 在【名称】文本框中输入【Visual Basic Net查看文件中的图标】 在【位置】的文本框中输入【E:\VS NET项目】 然后单击【确定】按钮 这样在【E:\VS NET项目】目录中就产生了名称为【Visual Basic Net查看文件中的图标】文件夹 里面存放著【Visual Basic Net查看文件中的图标】项目的所有文件 具体如图 所示 图 【Visual Basic Net查看文件中的图标】项目的【新建项目】对话框 选择菜单【项目】|【添加新项】 在弹出的对话框中的【模板】设置为【模块】 【名称】文本框设置为【Module vb】后 单击【打开】按钮 则在项目中增加了一个模板文件 名称为【Module vb】 把Visual Stuido Net的当前窗口切换到Module vb的代码编辑窗口 并在其Module 的代码区中添加下列代码 下列代码是用二种方式声明二个Windows API函数 < System Runtime InteropServices DllImport ( Shell dll ) > _Public Function _ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As String ByVal uiIconIndex As UInt ) As System IntPtrEnd Function 声明ExtractIcon函数Declare Auto Function Icon_Num Lib Shell dll Alias ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As String ByVal uiIconIndex As Integer ) As Integer 把Visual Studio Net的当前窗口切换到Form 窗体的设计查看 并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到Form 窗体 四个Label组件 其中二个用以显示提示信息 另外二个分别用以显示选择的文件名称和这个文件中包含的图标数目 一个ListView组件 利用其显示大图标的属性用以显示选定文件中的图标 一个OpenFileDialog组件 用以选择要查看图标的文件名称 一个ImageList组件 它起的是桥梁的作用 首先把从文件中导出的图标存放到这里 然后再提供ListView组件显示出来 一个Button组件 按照表 中数值来设定设定组件的主要属性 组件类型 组件名称 属性 设置结果 Form Form Text VB NET查看文件中的图标 Form MaximizeBox False Form MinimizeBox False Form FormBorderStyle FixedSingle ListView ListView ImageList LargeImageList ListView MultiSelect False ListView Size Size ( ) Button Button Text 选择文件 Button FlatStyle Flat ImageList ImageList Size Size ( ) ImageList TransparentColor Color Transparent Label Label Text 文件名称 Label Text 图标数目 Label Text Label Text 表 【Visual Basic Net查看文件中的图标】项目窗体中各组件的主要属性设定数值表并按照图 中各组件的位置 大小和排列方式来调整窗体中各个组件 图 【Visual Basic Net查看文件中的图标】项目的设计界面 把Visual Studio Net当前窗口切换到Form vb的代码编辑窗口 并用下列代码替换Form vb中的Button 组件的Click事件的处理代码 下列代码是在Button 组件的Click事件中处理查看文件中图标的功能 具体如下 Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button ClickIf OpenFileDialog ShowDialog ( ) = DialogResult OK Then 清除组件中的所有项目 ListView Items Clear ( ) ImageList Images Clear ( ) Dim sfName As String = OpenFileDialog FileName Label Text = sfName Dim iIcon_Num As Integer = Icon_Num ( IntPtr Zero sfName ) 显示文件中的图标数目 Label Text = iIcon_Num ToString ( ) Dim i As Integer For i = To iIcon_Num Step 强制实现int到uint类型转换Dim j As UInt j = System Convert ToUInt ( i )Dim hIcon As System IntPtr = ExtractIcon ( IntPtr Zero sfName j ) 在imageList 组件中加入当然提取的图标ImageList Images Add ( Icon FromHandle ( hIcon ) ToBitmap ( ) ) 在ListView组件中加入一个项目ListView Items Add ( 第 + ( i + ) ToString ( ) + 个图标 ) 把加入项目的图象索引指向刚才加入图标在imagList 组件中的索引 从而显示图标ListView Items ( i ) ImageIndex = i Next iEnd IfEnd Sub 至此 在上述步骤都正确执行后 【Visual Basic Net查看文件中的图标】项目的全部工作就完成了 单击快捷键F 就可以运行程序 此时单击【选择文件】按钮选择文件后 程序就能够读取这个文件中的图标及其数目 并显示出来了 具体如图 所示 图 【Visual Basic Net查看文件中的图标】项目的运行界面 五.总结 解决Visual Basic Net查看文件中的图标的关键并非是使用 Net框架中提供的类库 而是使用Windows的API函数 虽然这与利用Visual Basic Net开发跨平台程序的初衷相违背 但的确不失为一种解决问题的方法 有些时候通过Windows API函数能够快捷 方便的解决实际问题 而这往往是只使用 Net FrameWork SDK所望尘莫及的 但随着 Net FrameWork SDK内容的不断丰富 各种新的组成部分和新的功能不断加入 可以预见的是 在未来的 Net FrameWork SDK中必将拥有可以替换本文中介绍的二个Windows API函数的组成部分 lishixinzhi/Article/program/net/201311/12511
vb.net 从文件倒入图片的问题
因为文件被打开,所以出错,把前面的fileopen和后面的fileclose语句去掉。
VB.NET的API调用
现在我用我所知道的为楼主介绍VB.NET的API调用,请楼主浏览一下,看看行不行。
Windows API就是Windows系统的API函数简称(Application Program Interface,即:应用程序接口函数),它是Windows操作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数,这些函数一般都比较底层,所以当各种开发语言使用自带的函数或类库已无法解决问题时,调用Windows API函数往往是一种非常直接、有效的解决方法。但由于在程序中调用Windows API函数一般都很复杂,所以对于程序员来说,是否能够灵活的使用Windows API函数,往往也是其水平高低的一个重要标志。但自从微软推出.Net框架以后,各种开发基于.Net平台下的程序语言,如Visual Basic .Net、Visual C#等却很少使用Windows API函数,并且微软公司也不像以前那样,提倡在这些.Net开发语言中使用Windows API函数,其主要的原因如下:
1. .Net框架所附带的类库.Net FrameWork SDK是一个内容丰富、功能强大的软件开发包,各种Windows API函数所实现的各种功能几乎都可以在这个软件开发包中找到与之对应的部分。
2. 微软Visual Basic .Net、Visual C#等目的是编写跨平台的应用程序,如果在Visual Basic .Net、Visual C#等中使用Windows API函数,这也就注定了编写出的程序只能运行于Windows平台之下,而弱化了.NET的跨平台能力。这也就是为什么微软不提倡在.Net平台调用Windows API函数的原因。
虽然微软并不提倡在Visual Basic .Net、Visual C#中调用Windows API函数,但由于目前.Net 框架推出时间较短,.Net FrameWork SDK中提供的类库还并不足以完全替换Windows API函数的所有功能,所以在某些时候,.Net开发语言还是必须要调用Windows API函数。
一.平台调用、托管DLL、非托管DLL简介:
托管DLL就是能够在公共语言运行库(Common Language Runtime,简称CLR)中能够直接引用的,并且扩展名为“DLL”的文件。具体所指就是封装各种命名空间所在的DLL文件,如System.dll等。非托管DLL就是平常所的动态链接库等,其中就包括了封装所有Windows API函数的DLL文件。各种非托管DLL中的函数在公共语言运行库中不能直接被调用,而需要经过.Net框架提供的“平台调用”服务后才可以。
“平台调用”是.Net框架为Visual Basic .Net、Visual C#等.Net开发语言提供的一种服务,用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数)。“平台调用”依赖于元数据在运行时查找导出函数并封装其参数。图01公共语言运行库利用“平台服务”调用非托管DLL中的函数的流程图:
图01:“平台服务”的调用非托管函数的流程图
在托管代码中使用“平台调用”服务调用非托管DLL中封装的函数时,“平台服务”将依次执行以下操作:
1. 查找包含该函数所在的DLL文件。
2. 如果找到,则将该DLL文件 加载到内存中。
3. 查找函数在内存中的地址并将其参数推到堆栈上,并封送所需的数据。
4. 将控制权转移给非托管函数。 这样整个函数调用完成。
在Visual Basic .Net中使用“平台调用”服务,申明Windows API函数主要有二种具体的实现方法:
1. 使用DllImport特征类来申明Windows API函数。
2. 使用“Declare”语句来申明Windows API函数。
这二种方法虽有异曲同工之效,但在繁简上却有很大差异,第一种方法申明过程比较复杂,很容易在申明Windows API函数时出错,所以并不提倡。而第二种方法相对简单,并且又保存了以前Visual Basic中的很多语法,所以在平常时大都使用这种方法来申明Windows API函数。
二.VB.Net查看文件中图标的函数及申明Windows API的方法:
Visual Basic .Net要实现查看文件中的图标,目前只使用.Net FrameWork SDK是无法实现这种功能的,正如前面所说,主要是由于.Net FrameWork SDK推出的时间较短,其功能还不可能面面俱到。解决问题的关键是正确使用Windows API函数,其中所涉及到的Windows API函数主要有二个:其一是获得指定文件中的图标数目;其二是从指定文件的指定位置导出图标的Windows句柄。这二个函数都位于“Shell32.dll”文件中,并且函数的入口点都为“ExtractIcon”。下面是在Visual Basic .Net中分别使用DllImport特征类和“Declare”语句申明这二个Windows API函数的具体方法。
(1).使用DllImport特征类来申明Windows API函数:
下面是在Visual Basic .Net中使用DllImport特征类申明二个Windows API函数的具体示例:
'函数ExtractIcon,其功能是是从指定文件的指定位置导出图标的Windows句柄。
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'函数Icon_Num,其功能是获得指定文件中的图标数目
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _
Public Function _
Icon_Num ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
End Function
在使用DllImport特征类申明Windows API函数时,如果申明的函数名称和函数的入口点相同,则可以在申明Windows API函数时,省略定义函数入口点对应的代码,即EntryPoint对象字段对应的代码,这样声明ExtractIcon函数的代码也可以简化为如下所示:
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
(2).使用“Declare”语句来申明Windows API函数:
使用“Declare”语句的确比使用DllImport特征类要简单了许多,下面是在Visual Basic .Net中使用“Declare”语句来声明上述二个Windows API函数的具体方法:
Declare Auto Function ExtractIcon Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
'声明ExtractIcon函数
Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
'声明Icon_Num函数
在Visual Basic .Net中声明Windows API函数时,“Declare”语句中Alias关键字的作用相当于使用DllImport特征类中的EntryPoint对象字段。同样在使用“Declare”语句声明Windows API函数时,如果声明的函数和函数的入口点相同,也可以省略Alias关键字对应的代码,所以ExtractIcon函数也可以简化为如下:
Declare Auto Function ExtractIcon Lib "Shell32.dll" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
下面就结合一个示例的编写过程来掌握的这二个Windows API函数的具体使用方法,这个示例的作用就是读取指定文件中的图标数目,并显示文件中的图标。
三.本文中程序的编写、调试和运行环境:
(1).视窗2000高级服务器版。
(2).Visual Studio .Net 2003企业结构设计版,.Net FrameWork SDK版本号4322。
四.Visual Basic .Net读取文件中的图标的实现步骤:
下面介绍的示例,其功能读取指定文件中包含的图标数目,并把这些图标全部显示出来。下面是这个示例的实现步骤:
1. 启动Visual Studio .Net。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3. 将【项目类型】设置为【Visual Basic项目】。
4. 将【模板】设置为【Windows应用程序】。
5. 在【名称】文本框中输入【Visual Basic .Net查看文件中的图标】。
6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在【E:\VS.NET项目】目录中就产生了名称为【Visual Basic .Net查看文件中的图标】文件夹,里面存放着【Visual Basic .Net查看文件中的图标】项目的所有文件。具体如图02所示:
图02:【Visual Basic .Net查看文件中的图标】项目的【新建项目】对话框
7. 选择菜单【项目】|【添加新项】,在弹出的对话框中的【模板】设置为【模块】,【名称】文本框设置为【Module1.vb】后。单击【打开】按钮,则在项目中增加了一个模板文件,名称为【Module1.vb】。
8. 把Visual Stuido .Net的当前窗口切换到Module1.vb的代码编辑窗口,并在其Module1的代码区中添加下列代码,下列代码是用二种方式声明二个Windows API函数:
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'声明ExtractIcon函数
Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As Integer ) As Integer
9. 把Visual Studio .Net的当前窗口切换到Form1窗体的设计查看,并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到Form1窗体:
四个Label组件,其中二个用以显示提示信息,另外二个分别用以显示选择的文件名称和这个文件中包含的图标数目。
一个ListView组件,利用其显示大图标的属性用以显示选定文件中的图标。
一个OpenFileDialog组件,用以选择要查看图标的文件名称。
一个ImageList组件,它起的是桥梁的作用,首先把从文件中导出的图标存放到这里,然后再提供ListView组件显示出来。
一个Button组件。
10. 按照表01中数值来设定设定组件的主要属性:
组件类型 组件名称 属性 设置结果
Form Form1 Text VB.NET查看文件中的图标
Form1 MaximizeBox False
Form1 MinimizeBox False
Form1 FormBorderStyle FixedSingle
ListView ListView1 ImageList1 LargeImageList
ListView1 MultiSelect False
ListView1 Size Size ( 380 , 208 )
Button Button1 Text 选择文件
Button1 FlatStyle Flat
ImageList ImageList1 Size Size ( 32 , 32 )
ImageList1 TransparentColor Color.Transparent
Label Label1 Text 文件名称:
Label2 Text 图标数目:
Label3 Text ""
Label4 Text "0"
表01:【Visual Basic .Net查看文件中的图标】项目窗体中各组件的主要属性设定数值表
并按照图02中各组件的位置、大小和排列方式来调整窗体中各个组件:
图02:【Visual Basic .Net查看文件中的图标】项目的设计界面
11. 把Visual Studio .Net当前窗口切换到Form.vb的代码编辑窗口,并用下列代码替换Form1.vb中的Button1组件的Click事件的处理代码,下列代码是在Button1组件的Click事件中处理查看文件中图标的功能,具体如下:
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
If OpenFileDialog1.ShowDialog ( ) = DialogResult.OK Then
'清除组件中的所有项目
ListView1.Items.Clear ( )
ImageList1.Images.Clear ( )
Dim sfName As String = OpenFileDialog1.FileName
Label3.Text = sfName
Dim iIcon_Num As Integer = Icon_Num ( IntPtr.Zero , sfName , -1 )
'显示文件中的图标数目
Label4.Text = iIcon_Num.ToString ( )
Dim i As Integer
For i = 0 To iIcon_Num - 1 Step 1
'强制实现int到uint类型转换
Dim j As UInt32
j = System.Convert.ToUInt32 ( i )
Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , j )
'在imageList1组件中加入当然提取的图标
ImageList1.Images.Add ( Icon.FromHandle ( hIcon ).ToBitmap ( ) )
'在ListView组件中加入一个项目
ListView1.Items.Add ( "第" + ( i + 1 ).ToString ( ) + "个图标" )
'把加入项目的图象索引指向刚才加入图标在imagList1组件中的索引,从而显示图标
ListView1.Items ( i ).ImageIndex = i
Next i
End If
End Sub
12. 至此,在上述步骤都正确执行后,【Visual Basic .Net查看文件中的图标】项目的全部工作就完成了。单击快捷键F5就可以运行程序,此时单击【选择文件】按钮选择文件后,程序就能够读取这个文件中的图标及其数目,并显示出来了。具体如图03所示:
图03:【Visual Basic .Net查看文件中的图标】项目的运行界面
五.总结:
解决Visual Basic .Net查看文件中的图标的关键并非是使用.Net框架中提供的类库,而是使用Windows的API函数。虽然这与利用Visual Basic .Net开发跨平台程序的初衷相违背,但的确不失为一种解决问题的方法。有些时候通过Windows API函数能够快捷、方便的解决实际问题,而这往往是只使用.Net FrameWork SDK所望尘莫及的,但随着.Net FrameWork SDK内容的不断丰富,各种新的组成部分和新的功能不断加入,可以预见的是,在未来的.Net FrameWork SDK中必将拥有可以替换本文中介绍的二个Windows API函数的组成部分。
vb.net内存不足的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vbnet core、vb.net内存不足的信息别忘了在本站进行查找喔。