问题描述
我正在尝试找到一种好方法,将 100 多个小图像(每个 98 像素 png)加载到我的 .net 表单中,并另外让它们以某种方式进行交互(click
,以及name
图像/文件),但不从本地预定义文件夹加载图像。我是什么意思?让我解释和演示一个例子。请耐心等待,我对building
解决方案和compiling the executeable's folder structure
的主题有些困惑。
示例: 想象一下,在创建个人资料时,例如在这里。通常,您设置名称并添加个人资料图片。有时必须上传个人资料图片,但在我的情况下,我希望预设 100 张可用的个人资料图片供用户选择。听起来可能很多,但考虑到应用程序的目的,它确实是必要的。
问题/疑问:
简单但可能不太好的方法是简单地添加 pictureBoxes
并将点击分配给 flowlayoutpanel
。这是我目前的临时解决方案,但最大的缺陷是它使用了本地存储的路径。这个应用程序应该安装在多台机器上,我需要它在安装它的任何计算机上运行,无论使用什么驱动器号等。
string[] files = Directory.GetFiles("C:\\path\\folder_a","*",SearchOption.TopDirectoryOnly);
foreach (var filename in files)
{
Bitmap bmp = null;
try
{
bmp = new Bitmap(filename);
}catch{
}
var card = new PictureBox();
card.BackgroundImage = bmp;
card.Tag = (filename.Split('\\').Last());
card.Padding = new Padding(0);
card.BackgroundImageLayout = ImageLayout.Stretch;
card.Size = normal;
card.Click += delegate
{
//something
};
flowProfileIcons.Controls.Add(card);
}
这些是我的知识选择,但我真的不知道:
-
Embed
(in 'build action') 直接从解决方案资源管理器中的文件夹中获取所有图像,并使用AssemblyDirectory
以与以下类似的方式查找和使用图像显示在上面。但是,这是否允许用户实际访问和潜在地修改/删除文件,因为它们暴露在安装文件夹中?这甚至是实现此目的的好方法吗?
-
将所有图像放入
resources.resx
并以某种方式使用那里的图像,但据我所知,这不是很容易做到。如果这是首选方式,我肯定会研究它。我确实尝试了一些东西,这是我到目前为止的进展,虽然只是测试 - 不起作用。var images = Properties.resProfileIconsDark.ResourceManager .GetResourceSet(CultureInfo.CurrentCulture,true,true) .Cast<DictionaryEntry>() .Where(x => x.Value.GetType() == typeof(Bitmap)) .Select(x => new { Name = x.Key.ToString(),Image = x.Value }) .ToList();
这就是我所在的地方。希望有人能把我推向正确的方向。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)