无法填充图片框
Unable To Populate Pictureboxes
我很卡。我一直在尝试不同的方法将头像字符串的 6 个结果放入图片框控件数组的加载方法中。
这就是我必须将(mysql 结果集)值字符串迭代到图片框
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (DataRow row in dt.Rows)
{
string url = "https://example.com/" + row["avatar"];
for (int i = 0; i < avatars.Length; i++)
{
avatars[i].Load(url);
}
}
但是每个图片框都显示为白色(空白)。如果我将 SQL 查询设置为 LIMIT 1,我会为每个图片框获得相同的第一个头像。但是它不会相应地分配,或者根本不会分配。
如何正确地将 url 循环到我的 6 个图片框中?谢谢
编辑
我也尝试过这个,但没有成功
List<string> AvatarList = new List<string>();
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (DataRow row in dt.Rows)
{
AvatarList.Add("https://example.com/" + row["avatar"]);
}
for (int i = 0; i < AvatarList.Count; i++)
{
for (int x = 0; x < avatars.Length; x++)
{
avatars[x].Load(AvatarList[i]);
}
}
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (var pb in avatars)
{
foreach (DataRow row in dt.Rows)
{
string url = "https://example.com/" + row["avatar"];
pb.Load(url);
}
}
已解决
类似情况的阅读者,答案如下
private bool CacheReadAvatars = true; // Image caching?
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (DataRow row in dt.Rows)
{
if (CacheReadAvatars != false)
{
SaveImage("https://example.com/" + row["avatar"], CachePath + "/peer_" + row["user_id"] + ".jpg");
AvatarList.Add(CachePath + "/peer_" + row["user_id"] + ".jpg");
}
else
{
AvatarList.Add("https://example.com/" + row["avatar"]);
}
}
for (int i = 0; i < AvatarList.Count; i++)
{
if (CacheReadAvatars != false)
{
avatars[i].Image = Image.FromFile(AvatarList[i]);
}
else
{
avatars[i].Load(AvatarList[i]);
}
}
public void SaveImage(string imageUrl, string filename)
{
WebClient client = new WebClient();
Stream stream = client.OpenRead(imageUrl);
Bitmap bitmap; bitmap = new Bitmap(stream);
if (bitmap != null)
{
bitmap.Save(filename, ImageFormat.Jpeg);
}
stream.Flush();
stream.Close();
client.Dispose();
}
我冒昧地允许图像缓存,以防我想限制 HTTP 请求、数据使用等。
为什么要用两个循环?如果图像的 URL 正确,则以下代码应该有效。
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
int i = 0;
foreach (DataRow row in dt.Rows)
{
string url = "https://example.com/" + row["avatar"];
avatars[i].Load(url);
i++;
}
我很卡。我一直在尝试不同的方法将头像字符串的 6 个结果放入图片框控件数组的加载方法中。
这就是我必须将(mysql 结果集)值字符串迭代到图片框
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (DataRow row in dt.Rows)
{
string url = "https://example.com/" + row["avatar"];
for (int i = 0; i < avatars.Length; i++)
{
avatars[i].Load(url);
}
}
但是每个图片框都显示为白色(空白)。如果我将 SQL 查询设置为 LIMIT 1,我会为每个图片框获得相同的第一个头像。但是它不会相应地分配,或者根本不会分配。
如何正确地将 url 循环到我的 6 个图片框中?谢谢
编辑
我也尝试过这个,但没有成功
List<string> AvatarList = new List<string>();
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (DataRow row in dt.Rows)
{
AvatarList.Add("https://example.com/" + row["avatar"]);
}
for (int i = 0; i < AvatarList.Count; i++)
{
for (int x = 0; x < avatars.Length; x++)
{
avatars[x].Load(AvatarList[i]);
}
}
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (var pb in avatars)
{
foreach (DataRow row in dt.Rows)
{
string url = "https://example.com/" + row["avatar"];
pb.Load(url);
}
}
已解决
类似情况的阅读者,答案如下
private bool CacheReadAvatars = true; // Image caching?
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
foreach (DataRow row in dt.Rows)
{
if (CacheReadAvatars != false)
{
SaveImage("https://example.com/" + row["avatar"], CachePath + "/peer_" + row["user_id"] + ".jpg");
AvatarList.Add(CachePath + "/peer_" + row["user_id"] + ".jpg");
}
else
{
AvatarList.Add("https://example.com/" + row["avatar"]);
}
}
for (int i = 0; i < AvatarList.Count; i++)
{
if (CacheReadAvatars != false)
{
avatars[i].Image = Image.FromFile(AvatarList[i]);
}
else
{
avatars[i].Load(AvatarList[i]);
}
}
public void SaveImage(string imageUrl, string filename)
{
WebClient client = new WebClient();
Stream stream = client.OpenRead(imageUrl);
Bitmap bitmap; bitmap = new Bitmap(stream);
if (bitmap != null)
{
bitmap.Save(filename, ImageFormat.Jpeg);
}
stream.Flush();
stream.Close();
client.Dispose();
}
我冒昧地允许图像缓存,以防我想限制 HTTP 请求、数据使用等。
为什么要用两个循环?如果图像的 URL 正确,则以下代码应该有效。
PictureBox[] avatars = { peer1, peer2, peer3, peer4, peer5, peer6 };
int i = 0;
foreach (DataRow row in dt.Rows)
{
string url = "https://example.com/" + row["avatar"];
avatars[i].Load(url);
i++;
}