关于custom control的custom property

williamq 2004-01-20 08:42:55
正在编写一个custom control,有3个properties, 分别是backstartcolor, backendcolor, backGradientMode. 用来画出一个色彩渐进的背景。后来想到能否用一个property就代替(应该是修改)以上3个,于是就加了一个Sytle property.
代码如下
public class MyControl
{
public ControlStyle.Style Style
{
get
{
return style;
}
set
{
this.style = value;
ControlStyle.ChangeStyleProperties(this, value);
}
}
}

public class ControlStyle
{
public enum Style
{
Custom,
LightBlue,
XpBlue
}

internal static void ChangeStyleProperties(object sender, Style style)
{
if(sender is ExplorerBar)
{
ExplorerBar explorerBar = (ExplorerBar)sender;
switch(style)
{
case Style.LightBlue:
explorerBar.BackStartColor = Color.FromArgb(195, 218, 249);
explorerBar.BackEndColor = Color.FromArgb(159, 191, 245);
explorerBar.BackGradientMode = LinearGradientMode.Horizontal;
break;
case Style.XpBlue:
explorerBar.BackStartColor = Color.FromArgb(122, 161, 230);
explorerBar.BackEndColor = Color.FromArgb(99, 117, 214);
explorerBar.BackGradientMode = LinearGradientMode.Vertical;
break;
}
}
}
}
=========================================================================
现在的问题是,上面的代码虽然工作,但结构差,添加新的style或维护麻烦,同时在property bar里4个是平行的,而理想的是可扩展的。(Style->backstarkcolor/backendcolor/backGradientMode)不知谁有好的建议,希望指点一二。
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
williamq 2004-01-28
  • 打赏
  • 举报
回复
最后决定还是放弃了,太复杂了,把一个小小简单冬冬高复杂了就不好了嘛!
williamq 2004-01-20
  • 打赏
  • 举报
回复
自己顶一把!嘿嘿!
shenanigan 2004-01-20
  • 打赏
  • 举报
回复
up
AlexAngel 2004-01-20
  • 打赏
  • 举报
回复
使用Struct/Class保存3个数,而原来的类中只使用一个属性设置这三个值。可以使结构好一些。不过看阁下的编码风格,该学一学设计模式。
running_su 2004-01-20
  • 打赏
  • 举报
回复
up
williamq 2004-01-20
  • 打赏
  • 举报
回复
to: AlexAngel(vivi)
能不能讲具体一些。之所以我后来觉得结构差,添加新的style或维护麻烦,是因为我还留了
custom的style,就是当你改动3个中的一个property时,style要自动搜索match的style, 搜索不到的话,要变成custom.
internal Style MatchStyle(object sender)
{
if(sender is ExplorerBar)
{
ExplorerBar explorerBar = (ExplorerBar)sender;
if(explorerBar.BackStartColor == Color.FromArgb(195, 218, 249)
&& explorerBar.BackEndColor == Color.FromArgb(159, 191, 245)
&& explorerBar.BackGradientMode == LinearGradientMode.Horizontal)
{
return Style.LightBlue;
}
}
else
{
return Style.Custom;
}
}
所以相近的东西写了2遍,将来改一个style起来很麻烦。


另外编码风格有什么问题吗?我以前也是写vb的,代用了c#之后,就不用"m_"之类的variable name, 一律用大小写区分,当然能用"this."就用。不只有什么问题?

110,534

社区成员

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

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

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