保存以编程方式创建的图片框控件并重新加载
Save programmatically created picturebox control and reload
其实我有麻烦了。我的项目是创建一个带有快捷方式的桌面。桌面已经准备好了,它是一个作为背景的图片框。现在是捷径。
通过一个对话框,我将在图片框(桌面)上创建一个快捷方式。例子:
这是我的桌面:
https://pasteboard.co/IHSdXvX.png
这是我的对话:
https://pasteboard.co/IHSefrz.png
第一个文本框是文件的路径。第二个文本框是快捷方式的名称。
结果如下:
https://pasteboard.co/IHSeM7Y.png
左上角是一个新的绿色快捷方式。这是一个图片框,由以下代码创建:
Icon ico = Icon.ExtractAssociatedIcon(textBox1.Text);
var picture = new PictureBox
{
Name = textBox2.Text,
Size = new Size(48, 46),
Location = new Point(100, 100),
Image = ico.ToBitmap(),
SizeMode = PictureBoxSizeMode.Zoom,
};
Form1Singleton.FormVerweis.pictureBox1.Controls.Add(picture);
那么,我的问题是:
如何保存新创建的图片框(左上角的绿色图标)并将其加载回相同的位置,并使用相同的点击事件启动它后面的.exe(exe路径在文本框1中之前的对话框)当应用程序启动时。有关要保存的图片框的信息:位置、图标、.exe 路径。
感谢您的帮助,我对代码示例非常满意。
约书亚
您需要创建一个 class 来存储创建图标所需的所有信息:
[Serializable]
public class IconDefinition
{
public string Name { get; set; }
public string Path { get; set; }
public int X { get; set; }
public int Y { get; set; }
public int Width { get; set; }
public int Height { get; set; }
}
然后你有一些方法可以根据这些值实际创建你的图标:
void createIcon(IconDefinition iconDefinition)
{
PictureBox pictureBox = new PictureBox()
{
Name = iconDefinition.Name,
Size = new Size(iconDefinition.Width, iconDefinition.Height),
Location = new Point(iconDefinition.X, iconDefinition.Y),
Image = Icon.ExtractAssociatedIcon(iconDefinition.Path).ToBitmap(),
SizeMode = PictureBoxSizeMode.Zoom
};
pictureBox.Click += myClickHandler;
Form1Singleton.FormVerweis.pictureBox1.Controls.Add(pictureBox);
}
接下来您将拥有序列化和反序列化它们的方法。由于您可能希望将所有图标存储在同一个文件中以保持持久性,因此您可以使用 List
进行序列化。
static void saveIcons(List<IconDefinition> icons)
{
using (Stream stream = new FileStream(@".\icons.bin", FileMode.Create, FileAccess.Read))
new BinaryFormatter().Serialize(stream, icons);
}
static List<IconDefinition> loadIcons()
{
using (Stream stream = new FileStream(@".\icons.bin", FileMode.Open, FileAccess.Read))
return (List<IconDefinition>)new BinaryFormatter().Deserialize(stream);
}
这些将为您提供将 List<IconDefinition>
写入文件或从文件恢复的功能。
现在你必须有一个地方来放置你所有的图标:
List<IconDefinition> allIcons = new List<IconDefinition>();
手动创建图标时(您已经这样做了):
IconDefinition iconDefinition = new IconDefinition()
{
Path = textBox1.Text,
Name = textBox2.Text,
X = 100,
Y = 100,
Width = 48,
Height = 46
};
allIcons.Add(iconDefinition);
createIcon(iconDefinition);
当您想保存所有图标时:
saveIcons(allIcons);
当您的应用程序开始恢复它们时:
// When application starts you can load the icons
allIcons = loadIcons();
// then restore them all
foreach (IconDefinition definition in allIcons)
createIcon(definition);
希望对您有所帮助。
其实我有麻烦了。我的项目是创建一个带有快捷方式的桌面。桌面已经准备好了,它是一个作为背景的图片框。现在是捷径。
通过一个对话框,我将在图片框(桌面)上创建一个快捷方式。例子: 这是我的桌面: https://pasteboard.co/IHSdXvX.png
这是我的对话: https://pasteboard.co/IHSefrz.png 第一个文本框是文件的路径。第二个文本框是快捷方式的名称。
结果如下: https://pasteboard.co/IHSeM7Y.png 左上角是一个新的绿色快捷方式。这是一个图片框,由以下代码创建:
Icon ico = Icon.ExtractAssociatedIcon(textBox1.Text);
var picture = new PictureBox
{
Name = textBox2.Text,
Size = new Size(48, 46),
Location = new Point(100, 100),
Image = ico.ToBitmap(),
SizeMode = PictureBoxSizeMode.Zoom,
};
Form1Singleton.FormVerweis.pictureBox1.Controls.Add(picture);
那么,我的问题是:
如何保存新创建的图片框(左上角的绿色图标)并将其加载回相同的位置,并使用相同的点击事件启动它后面的.exe(exe路径在文本框1中之前的对话框)当应用程序启动时。有关要保存的图片框的信息:位置、图标、.exe 路径。
感谢您的帮助,我对代码示例非常满意。 约书亚
您需要创建一个 class 来存储创建图标所需的所有信息:
[Serializable]
public class IconDefinition
{
public string Name { get; set; }
public string Path { get; set; }
public int X { get; set; }
public int Y { get; set; }
public int Width { get; set; }
public int Height { get; set; }
}
然后你有一些方法可以根据这些值实际创建你的图标:
void createIcon(IconDefinition iconDefinition)
{
PictureBox pictureBox = new PictureBox()
{
Name = iconDefinition.Name,
Size = new Size(iconDefinition.Width, iconDefinition.Height),
Location = new Point(iconDefinition.X, iconDefinition.Y),
Image = Icon.ExtractAssociatedIcon(iconDefinition.Path).ToBitmap(),
SizeMode = PictureBoxSizeMode.Zoom
};
pictureBox.Click += myClickHandler;
Form1Singleton.FormVerweis.pictureBox1.Controls.Add(pictureBox);
}
接下来您将拥有序列化和反序列化它们的方法。由于您可能希望将所有图标存储在同一个文件中以保持持久性,因此您可以使用 List
进行序列化。
static void saveIcons(List<IconDefinition> icons)
{
using (Stream stream = new FileStream(@".\icons.bin", FileMode.Create, FileAccess.Read))
new BinaryFormatter().Serialize(stream, icons);
}
static List<IconDefinition> loadIcons()
{
using (Stream stream = new FileStream(@".\icons.bin", FileMode.Open, FileAccess.Read))
return (List<IconDefinition>)new BinaryFormatter().Deserialize(stream);
}
这些将为您提供将 List<IconDefinition>
写入文件或从文件恢复的功能。
现在你必须有一个地方来放置你所有的图标:
List<IconDefinition> allIcons = new List<IconDefinition>();
手动创建图标时(您已经这样做了):
IconDefinition iconDefinition = new IconDefinition()
{
Path = textBox1.Text,
Name = textBox2.Text,
X = 100,
Y = 100,
Width = 48,
Height = 46
};
allIcons.Add(iconDefinition);
createIcon(iconDefinition);
当您想保存所有图标时:
saveIcons(allIcons);
当您的应用程序开始恢复它们时:
// When application starts you can load the icons
allIcons = loadIcons();
// then restore them all
foreach (IconDefinition definition in allIcons)
createIcon(definition);
希望对您有所帮助。