C#-自定义WinForms按钮不会更改图像?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-自定义WinForms按钮不会更改图像?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1695字,纯文字阅读大概需要3分钟。
内容图文
我创建了一个自定义Button,称为AcceptButton,它继承自System.Windows.Forms.Button
在构造函数上,我设置了一些属性,但最重要的是图像(绿色的选中标记),如下所示:
this.Image = Proyecto.Controls.Bases.Properties.Resources.ok_16;
当我使用VS2013表单设计器添加此控件时,在另一个引用我刚刚创建的DLL的项目中,该图像将正确显示.但是,如果我进入控制范围,并通过代码将图像更改为例如:
this.Image = Proyecto.Controls.Bases.Properties.Resources.ok_32;
在使用此控件的项目中,图像不会更改(即使解决方案已清理并重新生成).我遵循了VS2013生成的代码,发现设计师添加了以下行:
this.botonAceptar1.Image = ((System.Drawing.Image)(resources.GetObject("botonAceptar1.Image")));
由于某种原因,该资源在VS生成的资源文件中被“硬编码”,但是当我重新生成解决方案时它不会被更新.
删除此行可使它按预期方式工作(我可以在“上游”类中更改图像,并且在重新生成解决方案时将对其进行更新).
为什么会这样呢?
如何避免这种情况?
解决方法:
这是由于DesignerSerializationVisibility(MSDN)属性引起的.尝试将此属性和以下方法(MSDN)添加到您的类中:
public class MyButton : System.Windows.Forms.Button
{
public bool ShouldSerializeImage()
{
return !object.ReferenceEquals(this.Image, _BaseImage);
}
public void ResetImage()
{
this.Image = _BaseImage;
}
[System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Visible)]
public new Image Image
{
get { return base.Image; }
set { base.Image = value; }
}
private Bitmap _BaseImage;
public MyButton()
{
_BaseImage = Proyecto.Controls.Bases.Properties.Resources.ok_16;
this.Image = _BaseImage;
}
}
这将替换默认的Image属性,并防止遇到序列化.此外,它允许设计人员检查属性是否具有默认值以及是否需要序列化.默认值存储在按钮类的私有字段中.这应该正确地序列化(或不序列化)属性.
删除所有的按钮,重新编译,阅读按钮以确保.
内容总结
以上是互联网集市为您收集整理的C#-自定义WinForms按钮不会更改图像?全部内容,希望文章能够帮你解决C#-自定义WinForms按钮不会更改图像?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。