.net里面怎么扩展元数据(100不够在加)

shuiwenyu 2009-04-15 10:08:34
public class ShapeNode : DiagramNode, IPersists, InplaceEditable
{
public ShapeNode();
public ShapeNode(Diagram parent);
public ShapeNode(ShapeNode prototype);

public CustomDraw CustomDraw { get; set; }
public bool EnableStyledText { get; set; }
public override Font Font { get; set; }
public Image Image { get; set; }

[Editor("MindFusion.Diagramming.WinForms.Design.ShapeEditor, MindFusion.Diagramming.Design, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a0d18338041985ba", typeof(UITypeEditor))]

public bool Transparent { get; set; }

protected internal override void OnZoomChanged();
public void ResizeToFitImage();
public bool ResizeToFitText(FitSize fit);
protected internal override void RestoreProperties(DiagramItemProperties props);
protected internal override void SaveProperties(DiagramItemProperties props);
protected internal override void SaveTo(BinaryWriter writer, PersistContext context);
protected internal override void SaveToXml(XmlElement xmlElement, XmlPersistContext context);


比如说有这样一个源数据类,里面定义的属性不够
我现在想自己扩展添加一些属性(比如说添加一个action,一个pictures属性)
我该怎么扩展这个元数据类
请高手指点啊(最好有代码实例)
...全文
190 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙宜坡 2009-04-15
  • 打赏
  • 举报
回复
看看扩展方法(C# 编程指南)也许对你有用
gomoku 2009-04-15
  • 打赏
  • 举报
回复
建议你和同事讨论一下,你的问题主要还是在具体商业逻辑上,外面的朋友很难帮得上力。
shuiwenyu 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 gomoku 的回复:]
这是你项目的逻辑问题,并不是“怎么扩展元数据”问题。
你要做的是
1、确认你的扩展属性触发了OnPropertyValueChanged,
2、嗅嗅看ChangeItemCmd.Execute作了些什么,
3、有可能IPersist接口被用来将属性们写到xml里去,看看你能不能实现或扩展基类的IPersist功能。
[/Quote]
1确实触发了OnPropertyValueChanged
2.ChangeItemCmd.Execute 这个是用来更新属性值的
3IPersist接口确实是实现保存了的
我现在写了一个继承类
public class Ashapenode : ShapeNode, IPersists, InplaceEditable
{


public bool _paly;
public bool play
{
get { return this._paly ; }

set { this._paly = value; }
}


private bool _Action;
public bool action
{
get { return _Action; }
set { _Action = value; }
}


}
添加了俩个属性
可是执行到时间改变触发事件到这一句Ashapenode E = diagram.Selection.Nodes[0] as Ashapenode;if (E == null)
return;
为空了直接返回了
还是shapenode类的问题
gomoku 2009-04-15
  • 打赏
  • 举报
回复
这是你项目的逻辑问题,并不是“怎么扩展元数据”问题。
你要做的是
1、确认你的扩展属性触发了OnPropertyValueChanged,
2、嗅嗅看ChangeItemCmd.Execute作了些什么,
3、有可能IPersist接口被用来将属性们写到xml里去,看看你能不能实现或扩展基类的IPersist功能。
shuiwenyu 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 gomoku 的回复:]
string也是基本属性,string类型的属性在Visual Studio的设计窗口也一定可以保存下来(系列化到代码中)。
如果这不是你的问题,那你自己要描述得更清楚些。
[/Quote]
因为我的属性是要保存下来生成xml文件的
private void OnPropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
if (diagram.Selection.Nodes.Count == 0)
return;

ShapeNode b = diagram.Selection.Nodes[0] as ShapeNode;//shapenode就是那个元数据类
if (b == null)
return;

ChangeItemCmd cmd =
new ChangeItemCmd(b, "Property change");

b.Text = _selected.Text;//_select是我定义的属性类
b.Brush = new SolidBrush(_selected.FillColor);
b.Image = _selected.image;

cmd.Execute();
}
在这个属性改变事件方法里面因为元数据类里面没有FatherNode这个属性
所以就不能b.FatherNode
以致于这个属性就不能保存下来
zzxap 2009-04-15
  • 打赏
  • 举报
回复

以TextBox为例
using System;
using System.Windows.Forms;
using System.Drawing.Design;
using System.ComponentModel;
using System.Globalization;
using System.Windows.Forms.Design;
public class TextBoxEx:TextBox
{
private All a= All.A;
private object b;
public All A
{
get
{
return a;
}
set
{
a=value;
switch(value)
{
case All.A:
b=Aenum.D;
break;
case All.B:
b=Benum.P;
break;
}
}
}

[System.ComponentModel.Editor(typeof(EnumEditer),typeof(UITypeEditor))]
public object B
{
get
{
return b;
}
set
{
b=value;
}
}
}

public class EnumEditer:UITypeEditor
{
ListBox dropdown ;
IWindowsFormsEditorService edSvc;
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object Value)
{
if (provider != null && Value !=null)
{
edSvc = (IWindowsFormsEditorService) provider.GetService(typeof(IWindowsFormsEditorService));
if ((edSvc ==null) || (context.Instance == null))
{
return Value;
}
if( dropdown ==null)
{
dropdown = new ListBox();
dropdown.BorderStyle = BorderStyle.None;
dropdown.MouseUp+= new System.Windows.Forms.MouseEventHandler(dropdown_MouseUp);
}
dropdown.Items.Clear();
Array values= System.Enum.GetValues(Value.GetType());
for(int i=0;i <values.Length;i++)
{
dropdown.Items.Add(values.GetValue(i));
}
edSvc.DropDownControl(this.dropdown);
Value = this.dropdown.SelectedItem;
return Value;
}
return Value;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}

private void dropdown_MouseUp(object sender , System.Windows.Forms.MouseEventArgs e)
{
if( edSvc != null && e.Button == MouseButtons.Left && this.dropdown.SelectedIndex > = 0)
{
edSvc.CloseDropDown();
}
}

}

public enum All
{
A,
B
}
public enum Aenum
{
K,
L,
D
}
public enum Benum
{
R,
Y,
P
}
zzxap 2009-04-15
  • 打赏
  • 举报
回复
在控件中声明一下这个事件

如果要实现双击控件,自动产生
this.TextBoxIP.IPBoxValueChanged += new TextBoxChangedHandle(TextBoxIP_UserControlValueChanged);

则给IPBoxValueChanged事件贴上 DefaultEvent 标签
gomoku 2009-04-15
  • 打赏
  • 举报
回复
string也是基本属性,string类型的属性在Visual Studio的设计窗口也一定可以保存下来(系列化到代码中)。
如果这不是你的问题,那你自己要描述得更清楚些。
shuiwenyu 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gomoku 的回复:]
1、为什么继承不行?
2、即使不能继承,也有扩展的可能,但这取决于你怎么用它们。
[/Quote]
在元数据里面有TEXT Font等属性,可是这些都是基本的属性,我现在的程序还必须加入一些我自己的属性比如说加一个
protected string Father_node;
public string father_node
{
get { return Father_node; }
set { Father_node = value; }
这个属性加进去后在属性浏览器能显示,但是就是值不能保存(比如说这次你设置值为1,关闭在打开后值就为空了)
但是如果是元数据的类的属性就可以保存下来
我现在就想解决这个问题能把设置的值保存下来
gomoku 2009-04-15
  • 打赏
  • 举报
回复
1、为什么继承不行?
2、即使不能继承,也有扩展的可能,但这取决于你怎么用它们。
shuiwenyu 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gomoku 的回复:]
你上贴已经有很多朋友帮忙,可也没有结贴。

这次你能把需求讲更清楚些吗?
比如你要怎么用那些扩展属性,为什么不用继承来扩展。
[/Quote]
在元数据里面有TEXT Font等属性,可是这些都是基本的属性,我现在的程序还必须加入一些我自己的属性比如说加一个
protected string Father_node;
public string father_node
{
get { return Father_node; }
set { Father_node = value; }
这个属性加进去后在属性浏览器能显示,但是就是值不能保存(比如说这次你设置值为1,关闭在打开后值就为空了)
但是如果是元数据的类的属性就可以保存下来
这问题困扰我几天了
请高手赐教啊
shuiwenyu 2009-04-15
  • 打赏
  • 举报
回复
继承不行啊
现在是不是我不能扩展啊
要扩展只能在源代码里改了
gomoku 2009-04-15
  • 打赏
  • 举报
回复
你上贴已经有很多朋友帮忙,可也没有结贴。

这次你能把需求讲更清楚些吗?
比如你要怎么用那些扩展属性,为什么不用继承来扩展。
Ricercar 2009-04-15
  • 打赏
  • 举报
回复
继承
whycom 2009-04-15
  • 打赏
  • 举报
回复
继承它
wartim 2009-04-15
  • 打赏
  • 举报
回复
元数据是自动生成的,要改的话只能改类源代码
shuiwenyu 2009-04-15
  • 打赏
  • 举报
回复
我现在用的第三方的一个控件
这是她里面的类
我没源码
microblue 2009-04-15
  • 打赏
  • 举报
回复
如果有源代码,就直接添加。
ASP.NET常见问题集锦.zip . .. .net中中文乱码问题解决.txt ADO.NET 与 XML:双剑合壁,威力强大.doc ASP.NET HTTP 运行时.doc ASP.NET ViewState 初探.doc ASP.NET Web 方法中的 XmlElement 参数的功能.d ASP.NET 中 Cookie 的基本知识.doc ASP.NET 页面对象模型.doc asp.net200问-专家门诊—ASP.NET开发答疑 ASP.NetWebPage深入探讨.txt ASP.NET中为DataGrid添合计字段.doc ASP.NET中实现DataGrid数据排序.doc asp.net中的弹出对话框.doc ASP.NET中自定义控件的创建和使用.doc ASP.NET实现用户在线检测的类源码.txt ASP.NET常见问题集锦.zip ASP.NET弹出式日历选择控件的实现.doc ASP.NET程序中常用的三十三种代码.txt ASP.NET页面间数据传递小结.doc ASPNETXML深入编程.pdf C Primer Plus 5th.chm C#中结构与类的区别.doc C#复习.txt C#实现Web文件上传的两种方法.doc C#排序算法大全.txt C#编程规范.doc C#语言参考.doc Code.doc C#中的“装箱”与“拆箱”.txt Datagrid分页、排序、删除代码.txt DataList分页、增、删除、修改实例.doc is as override示例.txt JA_ASP lecture_UML MS Press - Programming Microsoft.Net.chm NET 技术交流与实际应用.ppt net窗体身份验证方案.doc OOAD OOAD.doc Oreilly - C#.Net Programming 2nd Edition--ne Sort.cs treeview问题.txt Visual Basic .NET 和 Visual C# .NET 程序员需 vs.net安装部署深入研究.doc WEB_APP_E_BOOK.pdf XML编程从入门到精通.pdf 《ASP.NET完全入门》 一个Web文件上传的C#源代码.doc 为 ASP.NET Datagrid 创建自定义列.doc 为DataGrid写一个DropDownListColumn.txt 从 ASP.NET 服务器控件插入客户端脚本.doc 从 ASPX 页面进行 Web 服务调用时的性能考虑.do 使用 .NET 框架轻松开发完美的 Web 窗体控件.do 使用 TreeView IE Web 控件.doc 关于ASP.Net中的时间处理.txt 关于上下文.doc 创建可分页、可排序的 DataGrid.doc 创建用于 ASP.NET 的分页程序控件.doc 创建用于ASP.NET的分页控件.txt 利用 ASP.NET 创建多页自定义报表.doc 利用属性扩展元数据.doc 在 ASP.NET 中实现会话状态的基础.doc 在ASP.NET程序中实现上传下载文件.doc 复合 Web 控件示例(2.0).doc 如何在ASP.Net中把图片存入数据库.txt 如何在DateTime字段里只存储日期部分?.txt 如何用.NET创建Windows服务.doc 委托与事件.doc 学生选课系统事例(老师).txt 学生选课系统示例(自己).txt 开发和使用自定义服务器控件(2005).doc 开发组件.doc 归并排序,快速排序,冒泡算法,二叉查找树.doc 微软C编程精粹.doc 探讨 ASP.NET 的可伸缩性.doc 提高ASP.Net应用程序性能的十大方法.doc 无废话XML.pdf 概念.txt 求最大最小值示例.txt 用ASP.NET创建自定义文本框.doc 电话卡销售电子商务平台系统.doc 笔记.txt 类结构分析.doc 索引器例子.txt 翻译C#.txt 老师quicksort算发(无相等的两个元素).txt 老师quicksort算发(考虑相等的两个元素).txt 老师的学生考试系统改造结果.txt 自定义控件.doc 认识Web.config文件.doc 设计模式迷你手册.chm 设计模式(搞笑).doc 转意字符.txt 进入 ASP.NET 世界 - 第 1 部分:应用程序规划 进入 ASP.NET 世界 - 第 2 部分:使用 SQL Serv 面向对象设计(OOD)思想(C#) - c-c++ - CSDN

111,126

社区成员

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

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

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