winform 将项目所有图片资源作为一个类库,然后让其他库引用,这方案行得通吗?有没有其他方案,谢谢大家

jianshao810 2020-12-09 12:38:09
1、一个类库名称时 ImgRescources,里面存储的都是图片文件,并且图片文件都作为库的资源了
2、win1,win2,win3 是实际的 win程序,现在 win1,win2,win3 都引用了 ImgRescources 这个库,但是在界面设计器的时候却选择
不了ImgRescources里面的资源,请问有什么方式可以实现吗?
或者有没有其他方案,可以将图片资源打包,让其他项目引用的呢?
...全文
12160 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
enaking 2020-12-14
  • 打赏
  • 举报
回复
这个是可以的,vs资源有封装好的,当然你可以自己写,建议楼正把类的概念吃透 自己就明白了。
jianshao810 2020-12-13
  • 打赏
  • 举报
回复
引用 9 楼 以专业开发人员为伍 的回复:
你可以在一个工程中封装一下资源,开放给其它工程能顺利使用! 例如
    private static Dictionary<string, object> _MyResources;

    public static Dictionary<string, object> AllResource
    {
        get
        {
            if (_MyResources == null)
                _MyResources = typeof(Properties.Resources)
                    .GetProperties(BindingFlags.NonPublic | BindingFlags.Static)
                    .ToDictionary(x => x.Name, x => x.GetValue(null));
            return _MyResources;
        }
    }
不需要“破坏”其它工程或者当前工程的资源文件。
但是这样不可以在界面上选择喔 楼上的可以,但是图片是绝对路径的方式,明天我拿去其他电脑看看
  • 打赏
  • 举报
回复
你可以在一个工程中封装一下资源,开放给其它工程能顺利使用!

例如
    private static Dictionary<string, object> _MyResources;

public static Dictionary<string, object> AllResource
{
get
{
if (_MyResources == null)
_MyResources = typeof(Properties.Resources)
.GetProperties(BindingFlags.NonPublic | BindingFlags.Static)
.ToDictionary(x => x.Name, x => x.GetValue(null));
return _MyResources;
}
}


不需要“破坏”其它工程或者当前工程的资源文件。
jianshao810 2020-12-09
  • 打赏
  • 举报
回复
收到,谢谢大神啊,我试试看,非常感谢
bloodish 2020-12-09
  • 打赏
  • 举报
回复
看到stackoverflow上的一个方案,试了一下可行。 Access resources from a different project using the designer in WinForms 1.资源project, xxx.resx 2.其他project, 以link的方式添加xxx.resx, 3.然后就可以直接选资源图片了
andy_wanhl 2020-12-09
  • 打赏
  • 举报
回复
试试1楼的做法。
jianshao810 2020-12-09
  • 打赏
  • 举报
回复
引用 1 楼 bloodish 的回复:
行得通,设计器虽然不能直接选择图片了,但并不影响实际的使用,手写一下就行了.


xxx.Image = ImgRescources.Properties.Resources.XXXImage;


如果还有String是需要共享的,那么建议把Image和String可以分两个Project,生成两个独立的Assembly.可以提供给多个项目使用.

我这样测试过,是可以的,但是在界面设置的时候不可以选择,这个就麻烦,界面设置导入资源也不行,如果真的只能这样也可以勉强使用
jianshao810 2020-12-09
  • 打赏
  • 举报
回复
引用 3 楼 assky124 的回复:
这样还不如放到SQLite中呢

放sqlite要替换的时候麻烦呢,是不是要转为二进制?
assky124 2020-12-09
  • 打赏
  • 举报
回复
这样还不如放到SQLite中呢
w123wxh 2020-12-09
  • 打赏
  • 举报
回复
单独打包成一个DLL就可以。
bloodish 2020-12-09
  • 打赏
  • 举报
回复
行得通,设计器虽然不能直接选择图片了,但并不影响实际的使用,手写一下就行了.

xxx.Image = ImgRescources.Properties.Resources.XXXImage;
如果还有String是需要共享的,那么建议把Image和String可以分两个Project,生成两个独立的Assembly.可以提供给多个项目使用.

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧