none
VB.NET 集成DLL资源和读取 RRS feed

  • 问题

  • 1,怎么把软件中需要的图片,音频资源保存为DLL文件并且通过程序来读取这个文件?
    2,VB.NET中使用Mouse_Hover和Mouse_Leave事件做按钮的悬停响应似乎有点延迟。鼠标放上去以后要过一会儿才有反应。确定了不是电脑配置问题。我用PictureBox当按钮,在Mouse_Hover事件里写上
    PictureBox1.Image = System.Drawing.Image.Fromfile("res\xxx.bmp")
    每次鼠标停下要1秒左右的时间才换了图片。怎么解决?

    本人用VB2008
    2009年3月15日 2:47

答案

  •  PictureBox1.Image = System.Drawing.Image.Fromfile("res\xxx.bmp")
    问题不是出在处理事件的速度上
    事件发生了你才想起来io操作读文件  自然是慢得要死了
    请你使用 imagelist 或者其他资源方式  把资源读到内存中
    热烈庆祝进入4星活跃用户队伍
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    2009年3月18日 7:38
    版主

全部回复

  • 你好!
         似乎和这两个事件无关,加载图片需要的时间本来就比较多,就算你在Button.Click事件里处理也一样效果!

    周雪峰
    2009年3月15日 6:36
    版主
  • 楼主,你好

    至于你的第一个问题你可以参考下面的连接。

    如何把声音文件和图片文件 等 一些文件写到 资源文件和dll中?



    Microsoft Online Community Support
    2009年3月17日 6:10
  • 那么Windows的窗口中的按钮变化又怎么解释?
    不说Windows这么高技术的东西。
    就是随便一个软件,QQ之类的。那些按钮的变化速度也很快呀?
    2009年3月18日 4:50
  •  PictureBox1.Image = System.Drawing.Image.Fromfile("res\xxx.bmp")
    问题不是出在处理事件的速度上
    事件发生了你才想起来io操作读文件  自然是慢得要死了
    请你使用 imagelist 或者其他资源方式  把资源读到内存中
    热烈庆祝进入4星活跃用户队伍
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    2009年3月18日 7:38
    版主
  • KeFang Chen - MSFT 说:

    楼主,你好

    至于你的第一个问题你可以参考下面的连接。

    如何把声音文件和图片文件 等 一些文件写到 资源文件和dll中?



    Microsoft Online Community Support



    还是不懂,有详细的操作方法么
    2009年3月20日 5:23
  • 韦恩卑鄙 说:

     PictureBox1.Image = System.Drawing.Image.Fromfile("res\xxx.bmp")
    问题不是出在处理事件的速度上
    事件发生了你才想起来io操作读文件  自然是慢得要死了
    请你使用 imagelist 或者其他资源方式  把资源读到内存中


    热烈庆祝进入4星活跃用户队伍
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。



    详细,OK?怎么把资源读取到内存中
    2009年3月20日 5:28
  • 楼主,你好
    请根据下面的步骤操作。
    1.在VS中新建一个空的项目,然后右键单击项目选择属性,在Application栏目中选择输出类型为Class Library。
    2.在Resource栏目中选择添加resource,如果你想添加图片,就选择Add Resource旁边的下拉列表选择相应格式,其它格式选择添加existing file。
    3.确保Refernce下面应用了System.dll
    4.编译。

    使用dll
    新建一个winform工程进行测试。
    1.引用刚才的dll
    2.代码如下
     protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                MemoryStream ms = new MemoryStream();
               // TestResourceDll为上面产生的dll,karl为该图片的名字。
                TestResourceDll.Properties.Resources.karl.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                Image ima = Image.FromStream(ms);
               // this.pictureBox1.Image = ima;
                Graphics gc =e.Graphics;
                Point p = new Point(0, 0);
                gc.DrawImage(ima, p);
            }
    如果C#不了解,请到下面网站进行转换。
    http://www.developerfusion.com/tools/convert/csharp-to-vb/


    Microsoft Online Community Support
    2009年3月20日 8:10
  • 楼上还是不行,在使用的时候有问题。那段代码转成VB以后有一堆错误。我把做好的DLL引用了。现在你说个简单的例子。
    在Form_Load中加载res.dll(引用中显示res)中的bg文件(原本是bg.png标识符为bg)为Form1的背景。

    如果是把bg.png文件放在程序目录下,代码应该是

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.BackgroundImage = System.Drawing.Image.FromFile(".\bg.png")
        End Sub
    2009年4月4日 14:44