none
单个使用项目资源图片没有问题,同时选择两个或者以上就自动添加本地资源文件的问题 RRS feed

  • 问题

  • 1,我在winfrom里添加10个pictureBox

    2,在项目资源文件里添加了一些图片

    3,如果单独为任何一个pictureBox添加image属性,图片指向项目资源文件里的图片,添加后从image属性可以看得到xxx.Properties.Resources.xxx,看起来一切都正常。如果有10个那么就要手动添加十次。

    4,如果同时选择两个或者更多pictureBox,然后给image属性添加项目资源文件里的图片。添加后图片是显示出来了,但是image属性变成

    System.Drawing.Bitmap,并非指向项目资源文件,而是指向本地资源文件:而是在本地资源文件里创建了新的图片,有多少个pictureBox就添加多少本地资源图片。


    2018年8月5日 6:52

答案

  • 你好 冬日厦雨,

    根据你的描述,我再一次做了测试。选择两个pictureBox, 然后通过属性窗口修改Image,我重现的你的情况。当我选择多个pictureBox添加之后,再一次打开,我发现,资源内容从工程资源文件变为了本地资源。

    我去检查了Form1.Designer.cs,Form1.Designer.cs是Visual Studio对窗体的操作代码,它里面的内容时自动生成的。

    以下是操作前和操作后的代码对比,给你做个参考。

    操作前

    this.pictureBox1.Image = global::WindowsForms.Properties.Resources._1;
    this.pictureBox2.Image = global::WindowsForms.Properties.Resources._2;
    this.pictureBox3.Image = global::WindowsForms.Properties.Resources._3;
    this.pictureBox4.Image = global::WindowsForms.Properties.Resources._4;

    操作之后PictureBox1和PictureBox2的Image属性变为了

    this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
     this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));

    所以在属性窗口你可以看到他们的属性变化了。

    修改前

    修改后

    这个是自动生成的,是默认设置。

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月20日 13:47
    版主

全部回复

  • 可以将图片放到项目的资源中,其它的窗体引用项目的资源图片。 

    将文件复制到这里,右键点击项目,属性,资源。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年8月7日 0:24
  • 你好,冬日厦语,

    欢迎在MSDN 论坛发帖。

    如果你想要同时在多个PictureBox里给image属性添加项目资源文件里的图片,你可以参考一下代码。但是请注意,这里所使用的PictureBox必须使用默认名称,PictureBox1、PictureBox2、PictureBox3、PictureBox4、PictureBox5等等。 以下例子使用了5个PictureBox加载资源文件里的5张不同的图片。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Globalization;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using WindowsForms.Properties;
    
    namespace WindowsForms
    {
        public partial class Add_image_to_multiple_pictures : Form
        {
            public Add_image_to_multiple_pictures()
            {
                InitializeComponent();
            }
    
            private void btnLoad_Click(object sender, EventArgs e)
            {
                var images = Resources.ResourceManager
                           .GetResourceSet(CultureInfo.CurrentCulture, true, true)
                           .GetEnumerator();
                List<Image> list = new List<Image>();
                while (images.MoveNext())
                {
                    list.Add((Image)images.Value);
                }
    
                for (int i = 0; i < list.Count; i++)
                {
                    PictureBox pb = Controls["pictureBox" + (i + 1).ToString()] as PictureBox;
                    if (pb != null)
                    {
                        pb.Image = list[i];
                    }
                }
            }
    
            private void Add_image_to_multiple_pictures_Load(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox4.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox5.SizeMode = PictureBoxSizeMode.StretchImage;
            }
        }
    }
    

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已建议为答案 Stanly Fan 2018年8月10日 8:40
    • 取消建议作为答案 冬日厦语 2018年8月12日 13:33
    2018年8月8日 2:04
    版主
  • 谢谢版主的回复!但这不是我的问题所在,我的问题是:

    1,将图片放到项目的资源中,其它的窗体引用项目的资源图片。

    2,在winform上添加picturebox,然后在可以Image属性哪里直接选择资源文件里面的图片,就像下面这样,设置完属性的结果是Temp.Properties.Resources._247

    3,现在我的问题是:

    如果第二步设置的是一个picturebox的属性,那么一切没有问题。

    如果我第二步选择的不是一个,而是两个以上的pictureBox,然后再设置Image属性,就想这样:

    那么设置后的属性不是我预想中的资源文件,而是System.Drawing.Bitmap。

    2018年8月12日 13:46
  • 你好,冬日厦雨,

    根据你的描述, 我发现你并不是在代码中实现image属性的图片添加,而是直接在设置中添加, 我做了一些测试, 但是并没有重现你的问题。

    当我在同时选定已经添加过图片的PictureBox上添加时, 也同样没有出现你的问题。

    请问你是如何打开添加图片的的选择资源窗口的?是否跟我方式一样?

    请提供更多的信息, 我会做进一步的测试。

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月15日 3:22
    版主
  • 而这些图片在项目的资源文件里面就有,并不需要重复创建

    2018年8月15日 12:12
  • 请问版主您还在关注这个帖子吗?
    2018年8月20日 11:00
  • 你好 冬日厦雨,

    根据你的描述,我再一次做了测试。选择两个pictureBox, 然后通过属性窗口修改Image,我重现的你的情况。当我选择多个pictureBox添加之后,再一次打开,我发现,资源内容从工程资源文件变为了本地资源。

    我去检查了Form1.Designer.cs,Form1.Designer.cs是Visual Studio对窗体的操作代码,它里面的内容时自动生成的。

    以下是操作前和操作后的代码对比,给你做个参考。

    操作前

    this.pictureBox1.Image = global::WindowsForms.Properties.Resources._1;
    this.pictureBox2.Image = global::WindowsForms.Properties.Resources._2;
    this.pictureBox3.Image = global::WindowsForms.Properties.Resources._3;
    this.pictureBox4.Image = global::WindowsForms.Properties.Resources._4;

    操作之后PictureBox1和PictureBox2的Image属性变为了

    this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
     this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));

    所以在属性窗口你可以看到他们的属性变化了。

    修改前

    修改后

    这个是自动生成的,是默认设置。

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月20日 13:47
    版主
  • Question
    您不能对您自己的帖子投票
    0

    感谢版主的回复。

    您不觉得这样不合理吗?这样导致本地资源文件的图片越来越多,为什么不直接指向项目资源文件呢?这应该是一个bug吧

    2018年8月21日 13:27
  • 你好 冬日厦雨,

    这并不是一个bug,这是VS的一些设置。如果希望修改这些设置的话, 可以到下面的链接去反馈,然后把反馈的链接写到回复里, 我会对它进行投票,这样可以更便于微软团队看到你的需求。很抱歉,这个反馈只有英文的。

    https://microsoftteams.uservoice.com/forums/555103-public

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月23日 8:21
    版主
  • 多谢版主!想别的办法解决了,把image属性换成string,在内部再处理成image,这样就不会了。
    2018年8月24日 7:52
  • 你好 冬日厦雨,

    如果你的问题解决了, 请把有帮助的回复标记为答复。 谢谢。

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月31日 6:28
    版主
  • 非常感谢版主的热心回复。

    有点遗憾的是,问题事实上没有解决。

    2018年9月26日 0:34