请问 WinForm 中自定义控件如何设置Image属性的默认值

youzelin 2009-09-19 05:49:37
我现在想创建一个 MyButton 控件,我想设置 Image 属性的默认值,将其设置成某一个图片,请问我该如何设置,大致代码是这样的:

public class MyButton
{
[DefaultValue(typeof(Image), "[What should it be?]")]
public Image Image
{
get; set;
}
}


我试过导入一个小图片 wizlink,将其设置为嵌入资源,然后 DefaultValue 写成:

[DefaultValue(typeof(Image), "global::WinFormTest.Properties.Resources.wizlink")]

在构造函数中,写入:Image = global::WinFormTest.Properties.Resources.wizlink;

但是无效果,其“重置”的值依然是 null,:( 不知道应该怎样做,网上找了 N 久,未遂

请 CSDN 高手们帮帮忙吧
...全文
859 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lalac 2009-09-20
  • 打赏
  • 举报
回复

public class MyButton
{
//[DefaultValue(typeof(Image), "[What should it be?]")]
public Image Image
{
get; set;
}

private bool ShouldSerializeImage()
{
return Image == GetDefaultImage();
}

private void ResetImage()
{
Image = GetDefaultImage();
}
}
newqqlive 2009-09-20
  • 打赏
  • 举报
回复
可以写个转换器。
DefaultValueAttribute:Property的 默认值,选中 组 件,其Event窗
口中默 认 选 中 在 这个Event上。
imageconver这个转换 器。默认 的就 是null
足球中国 2009-09-20
  • 打赏
  • 举报
回复
你必须写个转换器。
imageconver这个转换器。默认的就是null
youzelin 2009-09-20
  • 打赏
  • 举报
回复
@dylike

:( 呜呜呜~~~,我没说清楚吗?我想设置设计时(Design Time)的默认值,不知道你有没有试过对于一个 Button 控件,修改了它的 Image 之后让它恢复到初始值状态?对着 Image 属性右击,然后选择“重置”:) 默认都是 null 的,我想让它默认变成某一张图片。:) 可以怎么做呢?
lzsh0622 2009-09-20
  • 打赏
  • 举报
回复
楼主用这个试试. DefaultValueAttribute:Property的默认值,选中组件,其Event窗口中默认选中在这个Event上。
youzelin 2009-09-20
  • 打赏
  • 举报
回复
没有人知道吗?-_-
youzelin 2009-09-20
  • 打赏
  • 举报
回复
@lalac

你说的这个方法可行,谢谢!

不过在 ShouldSerialize<property name> 方法的实现上,我觉得很郁闷,因为如果我这样写,它总是返回 true,总是认为他们不相等:

!Image.Equals(global::WinFormTest.Properties.Resources.wizlink);

因此,如果我这样写,返回总是 false,属性框里面总是粗体,但是我在 Reset 方法里面确是这样写的:

Image = global::WinFormTest.Properties.Resources.wizlink;

为什么不一样?

现在我要判断他们是否相等,就必须循环做像素的比较处理,图小到还好,图大就恶心了,请问有没有什么好的解决办法?谢谢
lzsh0622 2009-09-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lalac 的回复:]
C# codepublicclass MyButton
{//[DefaultValue(typeof(Image), "[What should it be?]")]public Image Image
{get;set;
}privatebool ShouldSerializeImage()
{return Image== GetDefaultImage();
¡­
[/Quote]

Button 中已经有 Image 属性了,只能重写.
dylike 2009-09-19
  • 打赏
  • 举报
回复
将图片Nomal.jpg添加到资源后:

Me.Image=My.Resources.Nomal

当资源文件名称是数字时,如: 1.jpg

Me.Image=My.Resoures._1
youzelin 2009-09-19
  • 打赏
  • 举报
回复
@wuyq11

你给的例子很多,谢谢,但是里面没有说到如何设定 Image 默认值,其它的默认值比如 Color、Enum 我都知道,但是 Image 我弄不出来,我只需要知道如何有效地设置 Image 属性的默认值(默认不设置都是 null),这些例子我在 CodeProject 上都看过。谢谢

@zanfeng

呃......能否说的具体一点,或者举一个例子,谢谢
wuyq11 2009-09-19
  • 打赏
  • 举报
回复
足球中国 2009-09-19
  • 打赏
  • 举报
回复
自己写个转换器。
属性的转换器。
youzelin 2009-09-19
  • 打赏
  • 举报
回复
这个我当然知道,但是我的目的是在.NET设计界面能够在属性上通过右击,然后选择“重置”,直接回复默认值,难道你没有发现,直接在程序里赋值的操作在“属性”栏上看起来是粗体显示的吗?这就说明这个值不是该属性的默认值!!
足球中国 2009-09-19
  • 打赏
  • 举报
回复

private System.Drawing.Image _Image = global ::WindowsControlLibrary1.Properties.Resources._20076101246156;

public System.Drawing.Image p_Image
{
get { return this._Image; }

set { this._Image = value; }
}


只要给附初值就可以了。
提示一下,付初值会在以后的程序中带来很多想不到的问题;

可能界面会在此vs IDE环境打不开。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧