目标:当应用程序启动时,我想为我的资源中的每张图片生成一个按钮(6个用于测试,128个最终版本),位于TabPage
的一侧。
这是我到目前为止所处的位置:
private void tabPage1_load(object sender, EventArgs e)
{
ResourceSet rs = new ResourceSet("");
IDictionaryEnumerator id = rs.GetEnumerator();
List<Bitmap> CIcons = new List<Bitmap>();
while (id.MoveNext())
{
if (id.Value is Bitmap)
CIcons.Add((Bitmap)id.Value);
}
}
这似乎没有诀窍,任何建议都会非常感激
编辑(添加):问题是应用程序启动时我没有看到“tabPage1”中列出的图像。
同样是的,我在Visual Studio中的“资源文件夹”中添加了6张图像。
仅为未来的人们,我想添加完成的工作代码:
// Button list start
// Credit to Jcl
ResourceSet rs = Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
IDictionaryEnumerator id = rs.GetEnumerator();
List<Bitmap> CIcons = new List<Bitmap>();
while (id.MoveNext())
{
if (id.Value is Bitmap)
CIcons.Add((Bitmap)id.Value);
}
int yposition = 0;
foreach (var bmp in CIcons)
{
Button button = new Button();
button.Location = new Point(0, yposition);
button.Size = new Size(125, 125);
button.Visible = true;
button.BackgroundImage = bmp;
tabPage1.Controls.Add(button);
yposition += 125;
}
//Button list end
答案 0 :(得分:1)
如果你想生成一个按钮,我会说:
private void tabPage1_load(object sender, EventArgs e)
{
ResourceSet rs = new ResourceSet("");
IDictionaryEnumerator id = rs.GetEnumerator();
List<Bitmap> CIcons = new List<Bitmap>();
while (id.MoveNext())
{
if (id.Value is Bitmap)
CIcons.Add((Bitmap)id.Value);
}
// Vertical aligned: i'll let you figure out how to position them
int yposition = 0;
foreach(var bmp in CIcons)
{
var button = new Button();
button.Location = new Point(0, yposition);
button.Size = new Size(50, 20); // for example
button.Visible = true;
button.BackgroundImage = bmp;
tabPage1.Controls.Add(button);
yposition += 20; // height of button
}
}
如评论中所述(我认为这是示例代码,但似乎不是),您还需要指定从哪里获取ResourceSet
。在您的情况下,更改:
ResourceSet rs = new ResourceSet("");
的
ResourceSet rs = Properties.Resources.ResourceManager.GetResourceSet(
CultureInfo.CurrentUICulture, true, true);
所有这些代码:
IDictionaryEnumerator id = rs.GetEnumerator();
List<Bitmap> CIcons = new List<Bitmap>();
while (id.MoveNext())
{
if (id.Value is Bitmap)
CIcons.Add((Bitmap)id.Value);
}
相当于:
List<Bitmap> CIcons = new List<Bitmap>();
foreach(var bmp in rs.OfType<Bitmap>())
CIcons.Add(bmp);
由于您可以从可枚举中创建列表,因此您可以执行以下操作:
List<Bitmap> CIcons = new List<Bitmap>(rs.OfType<Bitmap>());
但是,由于除了创建按钮之外没有使用位图列表,您可能无法定义它,然后整个代码变为:
var rs = Properties.Resources.ResourceManager.GetResourceSet(
CultureInfo.CurrentUICulture, true, true);
int yposition = 0;
foreach (var bmp in rs.OfType<Bitmap>())
{
var button = new Button()
{
Location = new Point(0, yposition),
Size = new Size(125, 125),
Visible = true,
BackgroundImage = bmp,
};
tabPage1.Controls.Add(button);
yposition += 125;
}
这可以进一步优化:如果我是你,而不是通过计算每个组件的像素位置来定位,我会使用FlowLayoutPanel来排列按钮。 FlowLayoutPanel
的使用超出了这个问题的范围,我只是提到它,以防您想要进一步调查和谷歌