我创建了一个窗体,用于显示和图像作为徽标。我能够使用以下代码浏览并向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);
}
}
我希望每次调用PictureBox
时都会显示保存在Form
中的已放置图像。为了做到这一点,我需要编写什么代码?
答案 0 :(得分:4)
在表单的加载事件中,您可以设置图片框的图像。通过转到项目设置,资源选项卡,您可以将图像添加为资源,并使用ProjectNamespace.Resources.NameOfResource引用它。
答案 1 :(得分:1)
然后让我们有一个静态的东西。 在表单中,为您的image..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也应该存在于文件夹图像中。
答案 2 :(得分:1)
您需要一种特殊的图片框来显示徽标。我们称之为LogoBox。如果您将其设置为用户控件,则可以使用Visual Studio Toolbox将其添加到控件中。
在Visual Studio中:
您的LogoBox类需要一个属性来更改将用作徽标的图像。我使用与PictureBox.Image相同的功能,但称之为Logo:
[BindableAttribute(true)]
public Image Logo
{
get {return this.pictureBox1.Image;}
set
{
this.pictureBox1.Image = image;
}
}
此代码是不够的:下次加载此LogoBox时,您希望它加载其最后设置的徽标。最常用的方法是将最后一组图像保存在文件中,因为您知道如果LogoBox的用户在设置后删除原始图像,您仍然拥有自己保存的副本。
[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,因为这会再次保存图像,这是浪费时间。
如果徽标文件不存在,唯一要做的就是错误处理。