c# BackgroundImage的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# BackgroundImage的问题相关的知识,希望对你有一定的参考价值。

在form1 中 文件路径为sMystring[0] 并传入到form2

messgebox会弹出表示已经接收到了 但是为什么 form2的背景还是不会改变??

代码没有问题啊,不过你Form2窗体并为显示,是因为你没调用显示窗体2的代码。

在Form2 f2 = new Form2(sMystring[0])后写一句:
f2.Show();

以上信息希望对你有帮助^^追问

解决的了问题。 可是能解释一下吗...为什么不SHOW一下就不会改变..

追答

不是show一下就改变,本来是改变的,但是你窗体没显示出来啊。
Form2 f2 = new Form2(sMystring[0])这句只是声明并初始化这个窗体,并没有让窗体显示出来。
f2.show()就指出了让f2窗口显示。

参考技术A 把this.backgroundimage = image.formfile(lj);这句代码放在from2加载事件中执行。或是在show事件执行。追问

不太懂能解释一下吗.. 加载事件是指LOAD吗。。

追答

正如楼上所说的Form2 f2 = new Form2(sMystring[0])这句只是声明并初始化这个窗体,因为Form2你已经定义了背景。所以在执行的时候就很存在你给它赋值他不会变。这种情况有三种解决方式。
一是你不要用这个你自己定义的窗体当然如果里头的东西多比较复杂的话除外。你只要在Form1中再实例出一个Form newfrm = new form(); newfrm.backgroundimage = ".....";然后再newfrm.show();就正常了。这种情况不管你是先给backgroundimage赋值还是在show后都可以。没有顺序要求。

二是如果你要用自定义的窗体From2你要看下你定义窗体初始化代码是不是有个
public partial class Frmain : Form

public Frmain()

InitializeComponent();
this.backgroundimage =....//一定要在这方法之后执行这条语句才会生效


InitializeComponent这个方法里会改变你窗体背景为设计时的背景的。所以你如要用参数来改变背景你的this.backgroundimage =....一定要在这个方法之后执行。要不然不起作用。当然我说的第三种方法就是在Load事件里执行也可以。因为这里后InitializeComponent早就执行过了。也就是初始化完毕了。show事件也是同理

C# 中的循环按钮背景图像

【中文标题】C# 中的循环按钮背景图像【英文标题】:Cycle Button Background Images in C# 【发布时间】:2010-09-06 02:47:24 【问题描述】:

我有一个 C# 表单,它有一个按钮,单击该按钮时,我希望背景图像循环显示一组图像(我将其作为项目的资源)。这些图像被命名为“_1”、“_2”等,每次单击按钮时,我都希望其背景图像递增到下一个,并在达到最高值时返回“_1”。有没有办法做到这一点?

我尝试获取button1.BackgroundImage.ToString(),但生成System.Drawing.Bitmap 而不是Resources._1,就像我想的那样(在这种情况下,我可以获取最后一个字符并打开它以将背景更改为适当的新图像)。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

你为什么不把图像放在一个数组中?

【讨论】:

【参考方案2】:

您可以继承 Button 并覆盖 BackgroundImage 属性,以便更好地跟踪表示图像的当前资源。您也可以重写 onclick 方法以在内部处理循环到下一个图像,但如果资源是在派生按钮类之外处理的,这可能有点奇怪。

【讨论】:

【参考方案3】:
class YourClass

    private IEnumerator<Image> enumerator;

    YourClass(IEnumerable<Image> images)
    
        enumerator = (from i in Enumerable.Range(0, int.Max)
                      from image in images
                      select image).GetEnumerator();
        enumerator.MoveNext();
    

    public Image CurrentImage  get  return enumerator.Current;  

    public void OnButtonClick()  enumerator.MoveNext(); 

假设用户点击按钮的次数不会超过 20 亿次,您可以将此代码用作控件的支持类。

请注意,一旦创建了此类,您就无法在外部修改给定的图像列表。如果你想做这样的事情,你需要实现一次性模式并相应地处理枚举器。

【讨论】:

以上是关于c# BackgroundImage的问题的主要内容,如果未能解决你的问题,请参考以下文章

c# BackgroundImage的问题

C# winform 程序 怎么动态设置BackgroundImage属性。这个图片的类型是啥 如果用代码编写我该怎么写

c#关于backgroundimage和imagelist的使用。图片大小怎么调节为啥我的一张图给我缩小了。怎么原图铺

c# winform_form属性详解以及事件详解(二)

初始Windows程序

C# 中的循环按钮背景图像