如何永久显示放置的图像
How to permanently display the placed image
我创建了一个 windows 表单来显示和图像作为徽标。我能够使用以下代码浏览图像并将其显示到 PictureBox
:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png";
if (ofd.ShowDialog() == DialogResult.OK && ofd.FileName.Length > 0)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = Image.FromFile(ofd.FileName);
}
}
我希望每次调用 Form
时都显示保存在 PictureBox
中的放置图像。我需要编写什么代码才能做到这一点?
在窗体的加载事件中可以设置图片框的图片。通过转到项目设置,资源选项卡,您可以将图像添加为资源并使用 ProjectNamespace.Resources.NameOfResource.
引用它
然后让我们有一个静态的东西。
在您的表单中,为您的图像实现静态路径..say
public string prg_form_image
{
get { return "myimage.jpg"; }
}
public string prg_image_path
{
get { return this.AppDomain.CurrentDomain.BaseDirectory + "image\"; }
}
private string myImage
{
get
{
return File.Exists(prg_image_path + prg_form_image)
? prg_image_path + prg_form_image
: prg_image_path + "default.jpg";
}
}
public Image img
{
get { return Image.FromFile(prg_image_path + prg_form_image); }
}
private void SetImage()
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = img;
}
private void Form_Load(object sender, EventArgs e)
{
SetImage();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png";
if (ofd.ShowDialog() == DialogResult.OK && ofd.FileName.Length > 0)
{
if(File.Exists(prg_image_path + prg_form_image))
{
File.Delete(prg_image_path + prg_form_image);
}
if(!Directory.Exists(prg_image_path)) { Directory.Create(prg_image_path); }
Image imgIn = Image.FromFile(ofd.FileName);
imgIn.SaveAs(prg_image_path + prg_form_image);
SetImage();
}
}
注意:文件夹名称图像应该与您的可执行程序一起存在。 default.jpg 也应该存在于文件夹图像中。
您需要一种能显示徽标的特殊图片框。我们称其为 LogoBox。如果将其设为用户控件,您可以使用 Visual Studio 工具箱将其添加到您的控件中。
在Visual Studio中:
- 打开要使用LogoBox的项目,或者把它放在一个DLL中,这样就可以被多个可执行文件使用。
- 菜单:项目 - 添加用户控件,将其命名为 LogoBox
- 使用工具箱将 PictureBox 添加到用户控件。
- 将图片框的Dock样式改为DockStyle.Fill
- 使用属性为 Load 事件添加事件处理程序,我们称之为 OnLoad。
您的 LogoBox class 需要 属性 来更改将用作徽标的图像。我使用与 PictureBox.Image 相同的函数,但将其命名为 Logo:
[BindableAttribute(true)]
public Image Logo
{
get {return this.pictureBox1.Image;}
set
{
this.pictureBox1.Image = image;
}
}
此代码还不够:下次加载此 LogoBox 时,您希望它加载上次设置的 Logo。最简单的方法是将最后设置的图片保存到文件中,因为这样你就知道如果你的 LogoBox 的用户在设置后删除了原始图像,你仍然有自己保存的副本。
- 您需要文件的文件名。用户项目属性 - 创建文件名的设置。
- 使其成为具有应用范围的字符串属性(它永远不会改变)
- 名称:LogoFileName
- 价值:想点好事。 Logo.Img?
.
[BindableAttribute(true)]
public Image Logo
{
get {return this.pictureBox1.Image;}
set
{
this.pictureBox1.Image = image;
image.Save(Properties.Settings.Default.LogoFileName)
}
}
加载 LogoBox 时最后加载图像:
private void OnFormLoading(object sender, EventArgs e)
{
var img = Image.FromFile(Properties.Settings.Default.LogoFileName);
this.pictureBox1.Image = img;
}
不要使用this.Logo = img,因为那样会再次保存图像,浪费时间。
如果徽标文件不存在,唯一要做的就是错误处理。
我创建了一个 windows 表单来显示和图像作为徽标。我能够使用以下代码浏览图像并将其显示到 PictureBox
:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png";
if (ofd.ShowDialog() == DialogResult.OK && ofd.FileName.Length > 0)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = Image.FromFile(ofd.FileName);
}
}
我希望每次调用 Form
时都显示保存在 PictureBox
中的放置图像。我需要编写什么代码才能做到这一点?
在窗体的加载事件中可以设置图片框的图片。通过转到项目设置,资源选项卡,您可以将图像添加为资源并使用 ProjectNamespace.Resources.NameOfResource.
引用它然后让我们有一个静态的东西。 在您的表单中,为您的图像实现静态路径..say
public string prg_form_image
{
get { return "myimage.jpg"; }
}
public string prg_image_path
{
get { return this.AppDomain.CurrentDomain.BaseDirectory + "image\"; }
}
private string myImage
{
get
{
return File.Exists(prg_image_path + prg_form_image)
? prg_image_path + prg_form_image
: prg_image_path + "default.jpg";
}
}
public Image img
{
get { return Image.FromFile(prg_image_path + prg_form_image); }
}
private void SetImage()
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = img;
}
private void Form_Load(object sender, EventArgs e)
{
SetImage();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png";
if (ofd.ShowDialog() == DialogResult.OK && ofd.FileName.Length > 0)
{
if(File.Exists(prg_image_path + prg_form_image))
{
File.Delete(prg_image_path + prg_form_image);
}
if(!Directory.Exists(prg_image_path)) { Directory.Create(prg_image_path); }
Image imgIn = Image.FromFile(ofd.FileName);
imgIn.SaveAs(prg_image_path + prg_form_image);
SetImage();
}
}
注意:文件夹名称图像应该与您的可执行程序一起存在。 default.jpg 也应该存在于文件夹图像中。
您需要一种能显示徽标的特殊图片框。我们称其为 LogoBox。如果将其设为用户控件,您可以使用 Visual Studio 工具箱将其添加到您的控件中。
在Visual Studio中:
- 打开要使用LogoBox的项目,或者把它放在一个DLL中,这样就可以被多个可执行文件使用。
- 菜单:项目 - 添加用户控件,将其命名为 LogoBox
- 使用工具箱将 PictureBox 添加到用户控件。
- 将图片框的Dock样式改为DockStyle.Fill
- 使用属性为 Load 事件添加事件处理程序,我们称之为 OnLoad。
您的 LogoBox class 需要 属性 来更改将用作徽标的图像。我使用与 PictureBox.Image 相同的函数,但将其命名为 Logo:
[BindableAttribute(true)]
public Image Logo
{
get {return this.pictureBox1.Image;}
set
{
this.pictureBox1.Image = image;
}
}
此代码还不够:下次加载此 LogoBox 时,您希望它加载上次设置的 Logo。最简单的方法是将最后设置的图片保存到文件中,因为这样你就知道如果你的 LogoBox 的用户在设置后删除了原始图像,你仍然有自己保存的副本。
- 您需要文件的文件名。用户项目属性 - 创建文件名的设置。
- 使其成为具有应用范围的字符串属性(它永远不会改变)
- 名称:LogoFileName
- 价值:想点好事。 Logo.Img?
.
[BindableAttribute(true)]
public Image Logo
{
get {return this.pictureBox1.Image;}
set
{
this.pictureBox1.Image = image;
image.Save(Properties.Settings.Default.LogoFileName)
}
}
加载 LogoBox 时最后加载图像:
private void OnFormLoading(object sender, EventArgs e)
{
var img = Image.FromFile(Properties.Settings.Default.LogoFileName);
this.pictureBox1.Image = img;
}
不要使用this.Logo = img,因为那样会再次保存图像,浪费时间。
如果徽标文件不存在,唯一要做的就是错误处理。