STNodeEditor
Properties
Name | Type | Description |
CanvasOffsetX | float | 获取画布原点相对于控件 X 方向上的偏移位置 |
CanvasOffsetY | float | 获取画布原点相对于控件 Y 方向上的偏移位置 |
CanvasOffset | PointF | 获取画布原点相对于控件偏移位置 |
CanvasValidBounds | Rectangle | 获取画布中的有被用到的有效区域 |
CanvasScale | float | 获取画布的缩放比例 |
Curvature | float | 获取或设置 Option 之间连线的曲度 |
ShowMagnet | bool | 获取或设置移动画布中 Node 时候 是否启用磁铁效果 |
ShowBorder | bool | 获取或设置 移动画布中是否显示 Node 边框 |
ShowGrid | bool | 获取或设置画布中是否绘制背景网格线条 |
ShowLocation | bool | 获取或设置是否在画布边缘显示超出视角的 Node 位置信息 |
Nodes | STNodeCollection | 获取画布中 Node 集合 |
ActiveNode | STNode | 获取当前画布中被选中的活动 Node |
HoverNode | STNode | 获取当前画布中鼠标悬停的 Node |
GridColor | Color | 获取或设置绘制画布背景时 网格线条颜色 |
BorderColor | Color | 获取或设置画布中 Node 边框颜色 |
BorderHoverColor | Color | 获取或设置画布中悬停 Node 边框颜色 |
BorderSelectedColor | Color | 获取或设置画布中选中 Node 边框颜色 |
BorderActiveColor | Color | 获取或设置画布中活动 Node 边框颜色 |
MarkForeColor | Color | 获取或设置画布绘制 Node 标记详情采用的前景色 |
MarkBackColor | Color | 获取或设置画布绘制 Node 标记详情采用的背景色 |
MagnetColor | Color | 获取或设置画布中移动 Node 时候 磁铁标记颜色 |
SelectedRectangleColor | Color | 获取或设置画布中选择矩形区域的颜色 |
HighLineColor | Color | 获取或设置画布中高亮连线的颜色 |
LocationForeColor | Color | 获取或设置画布中边缘位置提示区域前景色 |
LocationBackColor | Color | 获取或设置画布中边缘位置提示区域背景色 |
UnknownTypeColor | Color | 获取或设置画布中当 Node 中 Option 数据类型无法确定时应当使用的颜色 |
Protected fields
Name | Type | Description |
m_pt_in_control | Point | 当前鼠标在控件中的实时位置 |
m_pt_in_canvas | PointF | 当前鼠标在画布中的实时位置 |
m_pt_down_in_control | Point | 鼠标点击时在控件上的位置 |
m_pt_down_in_canvas | PointF | 鼠标点击时在画布中的位置 |
m_pt_canvas_old | PointF | 用于鼠标点击移动画布时候 鼠标点下时候的画布坐标位置 |
m_pt_dot_down | Point | 用于保存连线过程中保存点下 Option 的起点坐标 |
m_option_down | STNodeOption | 用于保存连线过程中鼠标点下的起点Option 当MouseUP时候 确定是否连接此节点 |
m_node_down | STNode | 当前鼠标点下的 STNode |
m_mouse_in_control | bool | 当前鼠标是否位于控件中 |
Events
Name | Description |
ActiveChanged | 活动的节点发生变化时候发生 |
SelectedChanged | 选择的节点发生变化时候发生 |
HoverChanged | 悬停的节点发生变化时候发生 |
NodeAdded | 当节点被添加时候发生 |
NodeRemoved | 当节点被移除时候发生 |
CanvasMoved | 移动画布原点时候发生 |
CanvasScaled | 缩放画布时候发生 |
OptionConnected | 连接节点选项时候发生 |
OptionConnecting | 正在连接节点选项时候发生 |
OptionDisConnected | 断开节点选项时候发生 |
OptionDisConnecting | 正在断开节点选项时候发生 |
Virtual method
OnDrawGrid
/// <summary>
/// 当绘制背景网格线时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="nWidth">需要绘制宽度</param>
/// <param name="nHeight">需要绘制高度</param>
protected virtual void OnDrawGrid(DrawingTools dt, int nWidth, int nHeight);
OnDrawNode
/// <summary>
/// 当绘制 Node 时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="rect">可视画布区域大小</param>
protected virtual void OnDrawNode(DrawingTools dt, Rectangle rect);
OnDrawNodeBorder
/// <summary>
/// 当绘制 Node 边框时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="node">目标node</param>
protected virtual void OnDrawNodeBorder(DrawingTools dt, STNode node);
OnDrawConnectedLine
/// <summary>
/// 当绘制已连接路径时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawConnectedLine(DrawingTools dt);
OnDrawMark
/// <summary>
/// 当绘制 Mark 详情信息时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawMark(DrawingTools dt);
OnDrawMagnet
/// <summary>
/// 当移动 Node 时候 需要显示对齐参考线时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="mi">匹配的磁铁信息</param>
protected virtual void OnDrawMagnet(DrawingTools dt, MagnetInfo mi);
OnDrawSelectedRectangle
/// <summary>
/// 绘制选择的矩形区域
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="rectf">位于控件上的矩形区域</param>
protected virtual void OnDrawSelectedRectangle(DrawingTools dt, RectangleF rectf);
OnDrawNodeOutLocation
/// <summary>
/// 绘制超出视觉区域的 Node 位置提示信息
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="sz">提示框边距</param>
/// <param name="lstPts">超出视觉区域的 Node 位置信息</param>
protected virtual void OnDrawNodeOutLocation(DrawingTools dt, Size sz, List<Point> lstPts);
OnDrawAlert
/// <summary>
/// 绘制提示信息
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="rect">需要绘制区域</param>
/// <param name="strText">需要绘制文本</param>
/// <param name="foreColor">信息前景色</param>
/// <param name="backColor">信息背景色</param>
/// <param name="al">信息位置</param>
protected virtual void OnDrawAlert(DrawingTools dt, Rectangle rect, string strText, Color foreColor, Color backColor, AlertLocation al);
GetAlertRectangle
/// <summary>
/// 获取提示信息需要绘制的矩形区域
/// </summary>
/// <param name="g">绘图表面</param>
/// <param name="strText">需要绘制文本</param>
/// <param name="al">信息位置</param>
/// <returns>矩形区域</returns>
protected virtual Rectangle GetAlertRectangle(Graphics g, string strText, AlertLocation al);
public method
FindNodeFromPoint
/// <summary>
/// 通过画布坐标进行寻找
/// </summary>
/// <param name="pt">画布中的坐标</param>
/// <returns>寻找到的数据</returns>
public NodeFindInfo FindNodeFromPoint(PointF pt);
GetSelectedNode
/// <summary>
/// 获取已经被选择的 Node 集合
/// </summary>
/// <returns>Node 集合</returns>
public STNode[] GetSelectedNode();
CanvasToControl
/// <summary>
/// 将画布坐标转换为控件坐标
/// </summary>
/// <param name="number">参数</param>
/// <param name="isX">是否为 X 坐标</param>
/// <returns>转换后的坐标</returns>
public float CanvasToControl(float number, bool isX);
CanvasToControl
/// <summary>
/// 将画布坐标转换为控件坐标
/// </summary>
/// <param name="pt">坐标</param>
/// <returns>转换后的坐标</returns>
public PointF CanvasToControl(PointF pt);
CanvasToControl
/// <summary>
/// 将画布坐标转换为控件坐标
/// </summary>
/// <param name="pt">坐标</param>
/// <returns>转换后的坐标</returns>
public Point CanvasToControl(Point pt);
CanvasToControl
/// <summary>
/// 将画布坐标转换为控件坐标
/// </summary>
/// <param name="rect">矩形区域</param>
/// <returns>转换后的矩形区域</returns>
public Rectangle CanvasToControl(Rectangle rect);
CanvasToControl
/// <summary>
/// 将画布坐标转换为控件坐标
/// </summary>
/// <param name="rect">矩形区域</param>
/// <returns>转换后的矩形区域</returns>
public RectangleF CanvasToControl(RectangleF rect);
ControlToCanvas
/// <summary>
/// 将控件坐标转换为画布坐标
/// </summary>
/// <param name="number">参数</param>
/// <param name="isX">是否为 X 坐标</param>
/// <returns>转换后的坐标</returns>
public float ControlToCanvas(float number, bool isX);
ControlToCanvas
/// <summary>
/// 将控件坐标转换为画布坐标
/// </summary>
/// <param name="pt">坐标</param>
/// <returns>转换后的坐标</returns>
public Point ControlToCanvas(Point pt);
ControlToCanvas
/// <summary>
/// 将控件坐标转换为画布坐标
/// </summary>
/// <param name="pt">坐标</param>
/// <returns>转换后的坐标</returns>
public PointF ControlToCanvas(PointF pt);
ControlToCanvas
/// <summary>
/// 将控件坐标转换为画布坐标
/// </summary>
/// <param name="rect">矩形区域</param>
/// <returns>转换后的区域</returns>
public Rectangle ControlToCanvas(Rectangle rect);
ControlToCanvas
/// <summary>
/// 将控件坐标转换为画布坐标
/// </summary>
/// <param name="rect">矩形区域</param>
/// <returns>转换后的区域</returns>
public RectangleF ControlToCanvas(RectangleF rect);
MoveCanvas
/// <summary>
/// 移动画布原点坐标到指定的控件坐标位置
/// 当不存在 Node 时候 无法移动
/// </summary>
/// <param name="x">X 坐标</param>
/// <param name="y">Y 坐标</param>
/// <param name="bAnimation">移动过程中是否启动动画效果</param>
/// <param name="ma">指定需要修改的坐标参数</param>
public void MoveCanvas(float x, float y, bool bAnimation, CanvasMoveArgs ma);
ScaleCanvas
/// <summary>
/// 缩放画布
/// 当不存在 Node 时候 无法缩放
/// </summary>
/// <param name="f">缩放比例</param>
/// <param name="x">缩放中心X位于控件上的坐标</param>
/// <param name="y">缩放中心Y位于控件上的坐标</param>
public void ScaleCanvas(float f, float x, float y);
GetConnectionInfo
/// <summary>
/// 获取当前已连接的 Option 对应关系
/// </summary>
/// <returns>连接信息集合</returns>
public ConnectionInfo[] GetConnectionInfo();
GetCanvasImage
/// <summary>
/// 获取画布中指定矩形区域图像
/// </summary>
/// <param name="rect">画布中指定的矩形区域</param>
/// <returns>图像</returns>
public Image GetCanvasImage(Rectangle rect);
GetCanvasImage
/// <summary>
/// 获取画布中指定矩形区域图像
/// </summary>
/// <param name="rect">画布中指定的矩形区域</param>
/// <param name="fScale">缩放比例</param>
/// <returns>图像</returns>
public Image GetCanvasImage(Rectangle rect, float fScale);
SaveCanvas
/// <summary>
/// 保存画布中的类容到文件中
/// </summary>
/// <param name="strFileName">文件路径</param>
public void SaveCanvas(string strFileName);
SaveCanvas
/// <summary>
/// 保存画布中的类容到数据流
/// </summary>
/// <param name="s">数据流对象</param>
public void SaveCanvas(Stream s);
GetCanvasData
/// <summary>
/// 获取画布中内容二进制数据
/// </summary>
/// <returns>二进制数据</returns>
public byte[] GetCanvasData();
LoadAssembly
/// <summary>
/// 加载程序集
/// </summary>
/// <param name="strFiles">程序集集合</param>
/// <returns>存在STNode类型的文件的个数</returns>
public int LoadAssembly(string[] strFiles);
LoadAssembly
/// <summary>
/// 加载程序集
/// </summary>
/// <param name="strFile">指定需要加载的文件</param>
/// <returns>是否加载成功</returns>
public bool LoadAssembly(string strFile);
GetTypes
/// <summary>
/// 获取当前编辑器中已加载的Node类型
/// </summary>
/// <returns>类型集合</returns>
public Type[] GetTypes();
LoadCanvas
/// <summary>
/// 从文件中加载数据
/// 注意: 此方法并不会清空画布中数据 而是数据叠加
/// </summary>
/// <param name="strFileName">文件路径</param>
public void LoadCanvas(string strFileName);
LoadCanvas
/// <summary>
/// 从二进制加载数据
/// 注意: 此方法并不会清空画布中数据 而是数据叠加
/// </summary>
/// <param name="byData">二进制数据</param>
public void LoadCanvas(byte[] byData);
LoadCanvas
/// <summary>
/// 从数据流中加载数据
/// 注意: 此方法并不会清空画布中数据 而是数据叠加
/// </summary>
/// <param name="s">数据流对象</param>
public void LoadCanvas(Stream s);
ShowAlert
/// <summary>
/// 在画布中显示提示信息
/// </summary>
/// <param name="strText">要显示的信息</param>
/// <param name="foreColor">信息前景色</param>
/// <param name="backColor">信息背景色</param>
public void ShowAlert(string strText, Color foreColor, Color backColor);
ShowAlert
/// <summary>
/// 在画布中显示提示信息
/// </summary>
/// <param name="strText">要显示的信息</param>
/// <param name="foreColor">信息前景色</param>
/// <param name="backColor">信息背景色</param>
/// <param name="al">信息要显示的位置</param>
public void ShowAlert(string strText, Color foreColor, Color backColor, AlertLocation al);
ShowAlert
/// <summary>
/// 在画布中显示提示信息
/// </summary>
/// <param name="strText">要显示的信息</param>
/// <param name="foreColor">信息前景色</param>
/// <param name="backColor">信息背景色</param>
/// <param name="nTime">信息持续时间</param>
/// <param name="al">信息要显示的位置</param>
/// <param name="bRedraw">是否立即重绘</param>
public void ShowAlert(string strText, Color foreColor, Color backColor, int nTime, AlertLocation al, bool bRedraw);
SetActiveNode
/// <summary>
/// 设置画布中活动的节点
/// </summary>
/// <param name="node">需要被设置为活动的节点</param>
/// <returns>设置前的活动节点</returns>
public STNode SetActiveNode(STNode node);
AddSelectedNode
/// <summary>
/// 向画布中添加一个被选中的节点
/// </summary>
/// <param name="node">需要被选中的节点</param>
/// <returns>是否添加成功</returns>
public bool AddSelectedNode(STNode node);
RemoveSelectedNode
/// <summary>
/// 向画布中移除一个被选中的节点
/// </summary>
/// <param name="node">需要被移除的节点</param>
/// <returns>是移除否成功</returns>
public bool RemoveSelectedNode(STNode node);
SetTypeColor
/// <summary>
/// 向编辑器中添加默认数据类型颜色
/// </summary>
/// <param name="t">数据类型</param>
/// <param name="clr">对应颜色</param>
/// <returns>被设置后的颜色</returns>
public Color SetTypeColor(Type t, Color clr);
SetTypeColor
/// <summary>
/// 向编辑器中添加默认数据类型颜色
/// </summary>
/// <param name="t">数据类型</param>
/// <param name="clr">对应颜色</param>
/// <param name="bReplace">若已经存在是否替换颜色</param>
/// <returns>被设置后的颜色</returns>
public Color SetTypeColor(Type t, Color clr, bool bReplace);
STNode
Properties
Name | Type | Description |
Owner | STNodeEditor | 获取当前 Node 所有者 |
IsSelected | bool | 获取或设置 Node 是否处于被选中状态 |
IsActive | bool | 获取 Node 是否处于活动状态 |
TitleColor | Color | 获取或设置标题背景颜色 |
MarkColor | Color | 获取或设置标记信息背景颜色 |
ForeColor | Color | 获取或设置当前 Node 前景色 |
BackColor | Color | 获取或设置当前 Node 背景色 |
Title | string | 获取或设置 Node 标题 |
Mark | string | 获取或设置 Node 标记信息 |
Left | int | 获取或设置 Node 左边坐标 |
Top | int | 获取或设置 Node 上边坐标 |
Width | int | 获取或设置 Node 宽度 当AutoSize被设置时 无法设置此值 |
Height | int | 获取或设置 Node 高度 当AutoSize被设置时 无法设置此值 |
ItemHeight | int | 获取或设置 Node 每个选项的高度 |
AutoSize | bool | 获取或设置 Node 是否自动计算宽高 |
Right | int | 获取 Node 右边边坐标 |
Bottom | int | 获取 Node 下边坐标 |
Rectangle | Rectangle | 获取 Node 矩形区域 |
TitleRectangle | Rectangle | 获取 Node 标题矩形区域 |
MarkRectangle | Rectangle | 获取 Node 标记矩形区域 |
TitleHeight | int | 获取或设置 Node 标题高度 |
InputOptionsCount | int | 获取输入选项集合个数 |
OutputOptionsCount | int | 获取输出选项个数 |
ControlsCount | int | 获取 Node 所包含的控件集合个数 |
Location | Point | 获取 Node 坐标位置 |
Size | Size | 获取 Node 大小 |
LockOption | bool | 获取或设置是否锁定Option选项 锁定后不在接受连接 |
LockLocation | bool | 获取或设置是否锁定Node位置 锁定后不可移动 |
ContextMenuStrip | ContextMenuStrip | 获取或设置当前Node 上下文菜单 |
Tag | object | 获取或设置用户自定义保存的数据 |
Guid | Guid | 获取全局唯一标识 |
LetGetOptions | bool | 获取或设置是否允许外部访问STNodeOption |
Protected fields
Name | Type | Description |
m_ctrl_active | STNodeControl | 当前Node中 活动的控件 |
m_ctrl_hover | STNodeControl | 当前Node中 悬停的控件 |
m_ctrl_down | STNodeControl | 当前Node中 鼠标点下的控件 |
Virtual method
OnCreate
/// <summary>
/// 当Node被构造时候发生
/// </summary>
protected virtual void OnCreate();
OnDrawNode
/// <summary>
/// 绘制整个Node
/// </summary>
/// <param name="dt">绘制工具</param>
protected internal virtual void OnDrawNode(DrawingTools dt);
OnDrawTitle
/// <summary>
/// 绘制Node标题部分
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawTitle(DrawingTools dt);
OnDrawBody
/// <summary>
/// 绘制Node主体部分 除去标题部分
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawBody(DrawingTools dt);
OnDrawMark
/// <summary>
/// 绘制标记信息
/// </summary>
/// <param name="dt">绘制工具</param>
protected internal virtual void OnDrawMark(DrawingTools dt);
OnDrawOptionDot
/// <summary>
/// 绘制选项连线的点
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="op">指定的选项</param>
protected virtual void OnDrawOptionDot(DrawingTools dt, STNodeOption op);
OnDrawOptionText
/// <summary>
/// 绘制选项的文本
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="op">指定的选项</param>
protected virtual void OnDrawOptionText(DrawingTools dt, STNodeOption op);
OnSetOptionDotLocation
/// <summary>
/// 当计算Option连线点位置时候发生
/// </summary>
/// <param name="op">需要计算的Option</param>
/// <param name="pt">自动计算出的位置</param>
/// <param name="nIndex">当前Option的索引</param>
/// <returns>新的位置</returns>
protected virtual Point OnSetOptionDotLocation(STNodeOption op, Point pt, int nIndex);
OnSetOptionTextRectangle
/// <summary>
/// 当计算Option文本区域时候发生
/// </summary>
/// <param name="op">需要计算的Option</param>
/// <param name="rect">自动计算出的区域</param>
/// <param name="nIndex">当前Option的索引</param>
/// <returns>新的区域</returns>
protected virtual Rectangle OnSetOptionTextRectangle(STNodeOption op, Rectangle rect, int nIndex);
GetDefaultNodeSize
/// <summary>
/// 获取当前STNode所需要的默认大小
/// 返回的大小并不会限制绘制区域 任然可以在此区域之外绘制
/// 但是并不会被STNodeEditor所接受 并触发对应事件
/// </summary>
/// <param name="g">绘图面板</param>
/// <returns>计算出来的大小</returns>
protected virtual Size GetDefaultNodeSize(Graphics g);
OnBuildMarkRectangle
/// <summary>
/// 计算当前Mark所需要的矩形区域
/// 返回的大小并不会限制绘制区域 任然可以在此区域之外绘制
/// 但是并不会被STNodeEditor所接受 并触发对应事件
/// </summary>
/// <param name="g">绘图面板</param>
/// <returns>计算后的区域</returns>
protected virtual Rectangle OnBuildMarkRectangle(Graphics g);
OnSaveNode
/// <summary>
/// 当需要保存时候 此Node有哪些需要额外保存的数据
/// 注意: 保存时并不会进行序列化 还原时候仅重新通过空参数构造器创建此Node
/// 然后调用 OnLoadNode() 将保存的数据进行还原
/// </summary>
/// <param name="dic">需要保存的数据</param>
protected virtual void OnSaveNode(Dictionary<string, byte[]> dic);
OnLoadNode
/// <summary>
/// 当还原该节点时候会将 OnSaveNode() 所返回的数据重新传入此函数
/// </summary>
/// <param name="dic">保存时候的数据</param>
protected internal virtual void OnLoadNode(Dictionary<string, byte[]> dic);
OnEditorLoadCompleted
/// <summary>
/// 当编辑器加载完成所有的节点时候发生
/// </summary>
protected internal virtual void OnEditorLoadCompleted();
SetOptionText
/// <summary>
/// 设置Option的文本信息
/// </summary>
/// <param name="op">目标Option</param>
/// <param name="strText">文本</param>
/// <returns>是否成功</returns>
protected bool SetOptionText(STNodeOption op, string strText);
SetOptionTextColor
/// <summary>
/// 设置Option文本信息颜色
/// </summary>
/// <param name="op">目标Option</param>
/// <param name="clr">颜色</param>
/// <returns>是否成功</returns>
protected bool SetOptionTextColor(STNodeOption op, Color clr);
SetOptionDotColor
/// <summary>
/// 设置Option连线点颜色
/// </summary>
/// <param name="op">目标Option</param>
/// <param name="clr">颜色</param>
/// <returns>是否成功</returns>
protected bool SetOptionDotColor(STNodeOption op, Color clr);
OnOwnerChanged
/// <summary>
/// 当所有者发生改变时候发生
/// </summary>
protected virtual void OnOwnerChanged();
OnSelectedChanged
/// <summary>
/// 当选中状态改变时候发生
/// </summary>
protected virtual void OnSelectedChanged();
OnActiveChanged
/// <summary>
/// 当活动状态改变时候发生
/// </summary>
protected virtual void OnActiveChanged();
SetOptionsLocation
/// <summary>
/// 计算每个Option的位置
/// </summary>
protected virtual void SetOptionsLocation();
public method
Invalidate
/// <summary>
/// 重绘Node
/// </summary>
public void Invalidate();
Invalidate
/// <summary>
/// 重绘 Node 指定区域
/// </summary>
/// <param name="rect">Node 指定区域</param>
public void Invalidate(Rectangle rect);
GetInputOptions
/// <summary>
/// 获取此Node所包含的输入Option集合
/// </summary>
/// <returns>Option集合</returns>
public STNodeOption[] GetInputOptions();
GetOutputOptions
/// <summary>
/// 获取此Node所包含的输出Option集合
/// </summary>
/// <returns>Option集合</returns>
public STNodeOption[] GetOutputOptions();
SetSelected
/// <summary>
/// 设置Node的选中状态
/// </summary>
/// <param name="bSelected">是否选中</param>
/// <param name="bRedraw">是否重绘</param>
public void SetSelected(bool bSelected, bool bRedraw);
STNodeOption
Properties
Name | Type | Description |
Owner | STNode | 获取当前 Option 所属的 Node |
IsSingle | bool | 获取当前 Option 是否仅能被连接一次 |
IsInput | bool | 获取当前 Option 是否是输入选项 |
TextColor | Color | 获取或设置当前 Option 文本颜色 |
DotColor | Color | 获取或设置当前 Option 连接点的颜色 |
Text | string | 获取或设置当前 Option 显示文本 当AutoSize被设置时 无法修改此属性 |
DotLeft | int | 获取当前 Option 连接点的左边坐标 |
DotTop | int | 获取当前 Option 连接点的上边坐标 |
DotSize | int | 获取当前 Option 连接点的宽度 |
TextRectangle | Rectangle | 获取当前 Option 文本区域 |
Data | object | 获取或者设置当前 Option 所包含的数据 |
DataType | Type | 获取当前 Option 数据类型 |
DotRectangle | Rectangle | 获取当前 Option 连接点的区域 |
ConnectionCount | int | 获取当前 Option 被连接的个数 |
Events
Name | Description |
Connected | 当被连接时候发生 |
Connecting | 当连接开始发生时发生 |
DisConnected | 当连接断开时候发生 |
DisConnecting | 当连接开始断开时发生 |
DataTransfer | 当有数据传递时候发生 |
Constructor
Constructor
/// <summary>
/// 构造一个 Option
/// </summary>
/// <param name="strText">显示文本</param>
/// <param name="dataType">数据类型</param>
/// <param name="bSingle">是否为单连接</param>
public STNodeOption(string strText, Type dataType, bool bSingle);
Virtual method
Invalidate
/// <summary>
/// 重绘整个控件
/// </summary>
protected void Invalidate();
ConnectingOption
/// <summary>
/// 当前 Option 开始连接目标 Option
/// </summary>
/// <param name="op">需要连接的 Option</param>
/// <returns>是否允许继续操作</returns>
protected virtual bool ConnectingOption(STNodeOption op);
DisConnectingOption
/// <summary>
/// 当前 Option 开始断开目标 Option
/// </summary>
/// <param name="op">需要断开的 Option</param>
/// <returns>是否允许继续操作</returns>
protected virtual bool DisConnectingOption(STNodeOption op);
public method
DisConnectionAll
/// <summary>
/// 断开当前 Option 的所有连接
/// </summary>
public void DisConnectionAll();
GetConnectedOption
/// <summary>
/// 获取当前 Option 所连接的 Option 集合
/// </summary>
/// <returns>如果为null 则表示不存在所有者 否则返回集合</returns>
public List<STNodeOption> GetConnectedOption();
TransferData
/// <summary>
/// 向当前 Option 所连接的所有 Option 投递数据
/// </summary>
public void TransferData();
TransferData
/// <summary>
/// 向当前 Option 所连接的所有 Option 投递数据
/// </summary>
/// <param name="data">需要投递的数据</param>
public void TransferData(object data);
TransferData
/// <summary>
/// 向当前 Option 所连接的所有 Option 投递数据
/// </summary>
/// <param name="data">需要投递的数据</param>
/// <param name="bDisposeOld">是否释放旧数据</param>
public void TransferData(object data, bool bDisposeOld);
STNodePropertyGrid
Properties
Name | Type | Description |
STNode | STNode | 当前显示的STNode |
ItemHoverColor | Color | 获取或设置属性选项被鼠标悬停时候背景色 |
ItemSelectedColor | Color | 获取或设置属性选项被选中时候背景色 当AutoColor被设置时此属性不能被设置 |
ItemValueBackColor | Color | 获取或设置属性选项值背景色 |
TitleColor | Color | 获取或设置默认标题背景色 |
ErrorColor | Color | 获取或设置属性设置错误时候提示信息背景色 |
DescriptionColor | Color | 获取或设置属性描述信息背景色 |
ShowTitle | bool | 获取或设置是否显示节点标题 |
AutoColor | bool | 获取或设置是否根据STNode自动设置控件高亮颜色 |
InfoFirstOnDraw | bool | 获取或当节点被设置时候 是否优先绘制信息面板 |
ReadOnlyModel | bool | 获取或设置当前属性编辑器是否处于只读模式 |
ScrollOffset | int | 获取当前滚动条高度 |
Protected fields
Name | Type | Description |
m_rect_link | Rectangle | 作者链接地址区域 |
m_rect_help | Rectangle | 查看帮助按钮区域 |
m_rect_title | Rectangle | 编辑器标题区域 |
m_rect_switch | Rectangle | 面板切换按钮区域 |
m_nOffsetY | int | 控件在绘制过程中使用的垂直滚动偏移 |
m_nInfoOffsetY | int | 保存的信息面板垂直滚动偏移 |
m_nPropertyOffsetY | int | 保存的属性面板垂直滚动偏移 |
m_nVHeight | int | 控件在绘制过程中使用的绘图区域总高度 |
m_nInfoVHeight | int | 保存的信息面板需要的总高度 |
m_nPropertyVHeight | int | 保存的属性面板需要的总高度 |
m_nInfoLeft | int | 信息面板中Key显示需要的水平宽度 |
Virtual method
OnPaint
/// <summary>
/// 当控件重绘时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected override void OnPaint(PaintEventArgs e);
OnMouseMove
/// <summary>
/// 当鼠标在控件上移动时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected override void OnMouseMove(MouseEventArgs e);
OnMouseDown
/// <summary>
/// 当鼠标在控件上点下时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected override void OnMouseDown(MouseEventArgs e);
OnMouseUp
/// <summary>
/// 当鼠标在控件上抬起时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected override void OnMouseUp(MouseEventArgs e);
OnMouseLeave
/// <summary>
/// 当鼠标离开控件时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected override void OnMouseLeave(EventArgs e);
OnMouseWheel
/// <summary>
/// 当鼠标在控件上滚动滚轮时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected override void OnMouseWheel(MouseEventArgs e);
OnResize
/// <summary>
/// 当控件尺寸发生改变时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected override void OnResize(EventArgs e);
OnDrawPropertyItem
/// <summary>
/// 当绘制属性选项时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="item">目标属性选项描述器</param>
/// <param name="nIndex">选项所在索引</param>
protected virtual void OnDrawPropertyItem(DrawingTools dt, STNodePropertyDescriptor item, int nIndex);
OnDrawTitle
/// <summary>
/// 绘制属性窗口标题
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawTitle(DrawingTools dt);
OnDrawDescription
/// <summary>
/// 当需要绘制属性描述信息时发生
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawDescription(DrawingTools dt);
OnDrawErrorInfo
/// <summary>
/// 当需要绘制错误信息时发生
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawErrorInfo(DrawingTools dt);
OnDrawInfo
/// <summary>
/// 当绘制节点信息时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawInfo(DrawingTools dt);
OnProcessPropertyMouseDown
/// <summary>
/// 当在属性面板鼠标点下时候发生
/// </summary>
/// <param name="e">鼠标事件参数</param>
protected virtual void OnProcessPropertyMouseDown(MouseEventArgs e);
OnProcessInfoMouseDown
/// <summary>
/// 当在信息面板鼠标点下时候发生
/// </summary>
/// <param name="e">鼠标事件参数</param>
protected virtual void OnProcessInfoMouseDown(MouseEventArgs e);
OnProcessPropertyMouseMove
/// <summary>
/// 当在属性面板鼠标移动时候发生
/// </summary>
/// <param name="e">鼠标事件参数</param>
protected virtual void OnProcessPropertyMouseMove(MouseEventArgs e);
OnProcessHelpMouseMove
/// <summary>
/// 当在信息面板鼠标移动时候发生
/// </summary>
/// <param name="e">鼠标事件参数</param>
protected virtual void OnProcessHelpMouseMove(MouseEventArgs e);
public method
SetNode
/// <summary>
/// 设置需要显示的STNode节点
/// </summary>
/// <param name="node">目标节点</param>
public void SetNode(STNode node);
SetInfoKey
/// <summary>
/// 设置信息页面Key的显示文本
/// </summary>
/// <param name="strAuthor">作者</param>
/// <param name="strMail">邮箱</param>
/// <param name="strLink">连接</param>
/// <param name="strHelp">查看帮助</param>
public void SetInfoKey(string strAuthor, string strMail, string strLink, string strHelp);
SetErrorMessage
/// <summary>
/// 设置要显示的错误信息
/// </summary>
/// <param name="strText">错误信息</param>
public void SetErrorMessage(string strText);
STNodeTreeView
Properties
Name | Type | Description |
ItemBackColor | Color | 获取或设置每行属性选项背景色 |
ItemHoverColor | Color | 获取或设置属性选项被鼠标悬停时候背景色 |
TitleColor | Color | 获取或设置顶部检索区域背景色 |
TextBoxColor | Color | 获取或设置检索文本框的背景色 |
HightLightTextColor | Color | 获取或设置检索时候高亮文本颜色 |
InfoButtonColor | Color | 获取或设置信息显示按钮颜色 若设置AutoColor无法设置此属性值 |
FolderCountColor | Color | 获取或设置统计个数的文本颜色 |
ShowFolderCount | bool | 获取或设置是否统计STNode的个数 |
ShowInfoButton | bool | 获取或设置是否显示信息按钮 |
InfoPanelIsLeftLayout | bool | 获取或设置预览窗口是否是向左布局 |
AutoColor | bool | 获取或设置控件中部分颜色来之对应的STNode的标题颜色 |
Editor | STNodeEditor | 获取节点预览时候使用的STNodeEditor |
PropertyGrid | STNodePropertyGrid | 获取节点预览时候使用的STNodePropertyGrid |
Virtual method
OnDrawSearch
/// <summary>
/// 当绘制检索文本区域时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
protected virtual void OnDrawSearch(DrawingTools dt);
OnStartDrawItem
/// <summary>
/// 当开始绘制树节点的每一个节点时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="Items">当前需要绘制的集合</param>
/// <param name="nCounter">已经绘制个数的计数器</param>
/// <param name="nLevel">当前位于第几级子集合</param>
/// <returns>已经绘制个数</returns>
protected virtual int OnStartDrawItem(DrawingTools dt, STNodeTreeCollection Items, int nCounter, int nLevel);
OnDrawItem
/// <summary>
/// 当绘制树节点每一个节点时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="items">当前需要绘制的集合</param>
/// <param name="nCounter">已经绘制个数的计数器</param>
/// <param name="nLevel">当前位于第几级子集合</param>
protected virtual void OnDrawItem(DrawingTools dt, STNodeTreeCollection items, int nCounter, int nLevel);
OnDrawSwitch
/// <summary>
/// 当绘制树节点展开与关闭开关时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="items">当前需要绘制的集合</param>
protected virtual void OnDrawSwitch(DrawingTools dt, STNodeTreeCollection items);
OnDrawItemText
/// <summary>
/// 当绘制树节点的文本时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="items">当前需要绘制的集合</param>
/// <param name="rect">文本域所在矩形区域</param>
protected virtual void OnDrawItemText(DrawingTools dt, STNodeTreeCollection items, Rectangle rect);
OnDrawItemIcon
/// <summary>
/// 当绘制树节点图标时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
/// <param name="items">当前需要绘制的集合</param>
/// <param name="rect">文本域所在矩形区域</param>
protected virtual void OnDrawItemIcon(DrawingTools dt, STNodeTreeCollection items, Rectangle rect);
public method
Search
/// <summary>
/// 在控件中检索STNode
/// </summary>
/// <param name="strText">需要检索的文本</param>
public void Search(string strText);
AddNode
/// <summary>
/// 向控件中添加一个STNode类型
/// </summary>
/// <param name="stNodeType">STNode类型</param>
/// <returns>是否添加成功</returns>
public bool AddNode(Type stNodeType);
LoadAssembly
/// <summary>
/// 从文件中向控件添加STNode类型
/// </summary>
/// <param name="strFile">指定文件路径</param>
/// <returns>添加成功个数</returns>
public int LoadAssembly(string strFile);
Clear
/// <summary>
/// 清空控件中所有STNode类型
/// </summary>
public void Clear();
RemoveNode
/// <summary>
/// 向控件中移除一个STNode类型
/// </summary>
/// <param name="stNodeType">STNode类型</param>
/// <returns>是否移除成功</returns>
public bool RemoveNode(Type stNodeType);
STNodeTreeCollection
STNodeTreeCollection类被protected修饰 在STNodeTreeView内部 仅继承STNodeTreeView才能访问
Properties
Name | Type | Description |
Name | string | 获取当前树节点显示名称 |
NameLower | string | 获取当前树节点显示名称的小写字符串 |
STNodeType | Type | 获取当前树节点对应的STNode类型 |
Parent | STNodeTreeCollection | 获取当前树节点的父级树节点 |
STNodeCount | int | 获取当前树节点下拥有的STNode类型个数 |
Path | string | 获取当前树节点对应STNode类型在树控件中对应路径 |
IsOpen | bool | 获取当前或设置树节点是否为打开状态 |
IsLibraryRoot | bool | 获取当前树节点是否为加载模块的根路劲节点 |
DisplayRectangle | Rectangle | 获取当前树节点在控件中的显示区域 |
SwitchRectangle | Rectangle | 获取当前树节点在控件中的开关按钮区域 |
InfoRectangle | Rectangle | 获取当前树节点在控件中的信息按钮区域 |
STNodeTypeColor | Color | 获取当前树节点对应STNode类型的标题颜色 |
Count | int | 获取当前树节点所包含子节点个数 |
Constructor
Constructor
/// <summary>
/// 构造一颗树节点集合
/// </summary>
/// <param name="strName">当前树节点在控件中的显示名称</param>
public STNodeTreeCollection(string strName);
public method
Add
/// <summary>
/// 向当前树节点中添加一个子节点
/// </summary>
/// <param name="strName">节点显示名称</param>
/// <returns>添加后的子节点集合</returns>
public STNodeTreeCollection Add(string strName);
Remove
/// <summary>
/// 向当前树节点中删除一个子集合
/// </summary>
/// <param name="strName">子集合名称</param>
/// <param name="isAutoDelFolder">是否递归向上自动清空无用节点</param>
/// <returns>是否删除成功</returns>
public bool Remove(string strName, bool isAutoDelFolder);
Clear
/// <summary>
/// 清空当前树节点中所有子节点
/// </summary>
public void Clear();
GetKeys
/// <summary>
/// 获取当前树节点中所有的名称数组
/// </summary>
/// <returns></returns>
public string[] GetKeys();
Copy
/// <summary>
/// 拷贝当前树节点集合中所有数据
/// </summary>
/// <returns>拷贝的副本</returns>
public STNodeTreeCollection Copy();
GetEnumerator
/// <summary>
/// 返回 System.Collections.IEnumerator 的 Array
/// </summary>
/// <returns></returns>
public IEnumerator GetEnumerator();
STNodeEditorPannel
Properties
Name | Type | Description |
LeftLayout | bool | 获取或设置是否是左边布局 |
SplitLineColor | Color | 获取或这是分割线颜色 |
HandleLineColor | Color | 获取或设置分割线手柄颜色 |
ShowScale | bool | 获取或设置编辑器缩放时候显示比例 |
ShowConnectionStatus | bool | 获取或设置节点连线时候是否显示状态 |
X | int | 获取或设置分割线水平宽度 |
Y | int | 获取或设置分割线垂直高度 |
Editor | STNodeEditor | 获取面板中的STNodeEditor |
TreeView | STNodeTreeView | 获取面板中的STNodeTreeView |
PropertyGrid | STNodePropertyGrid | 获取面板中的STNodePropertyGrid |
public method
AddSTNode
/// <summary>
/// 向树控件中添加一个STNode
/// </summary>
/// <param name="stNodeType">STNode类型</param>
/// <returns>是否添加成功</returns>
public bool AddSTNode(Type stNodeType);
LoadAssembly
/// <summary>
/// 从程序集中加载STNode
/// </summary>
/// <param name="strFileName">程序集路径</param>
/// <returns>添加成功个数</returns>
public int LoadAssembly(string strFileName);
SetConnectionStatusText
/// <summary>
/// 设置编辑器显示连接状态的文本
/// </summary>
/// <param name="status">连接状态</param>
/// <param name="strText">对应显示文本</param>
/// <returns>旧文本</returns>
public string SetConnectionStatusText(ConnectionStatus status, string strText);
STNodeAttribute
Properties
Name | Type | Description |
Path | string | 获取STNode节点期望在树形控件的路径 |
Author | string | 获取STNode节点的作者名称 |
Mail | string | 获取STNode节点的作者邮箱 |
Link | string | 获取STNode节点的作者链接 |
Description | string | 获取STNode节点的描述信息 |
Constructor
Constructor
/// <summary>
/// 构造一个STNode特性
/// </summary>
/// <param name="strPath">期望路径</param>
public STNodeAttribute(string strPath) : this(strPath, null, null, null, null);
Constructor
/// <summary>
/// 构造一个STNode特性
/// </summary>
/// <param name="strPath">期望路径</param>
/// <param name="strDescription">描述信息</param>
public STNodeAttribute(string strPath, string strDescription) : this(strPath, null, null, null, strDescription);
Constructor
/// <summary>
/// 构造一个STNode特性
/// </summary>
/// <param name="strPath">期望路径</param>
/// <param name="strAuthor">STNode作者名称</param>
/// <param name="strMail">STNode作者邮箱</param>
/// <param name="strLink">STNode作者链接</param>
/// <param name="strDescription">STNode节点描述信息</param>
public STNodeAttribute(string strPath, string strAuthor, string strMail, string strLink, string strDescription);
STNodePropertyAttribute
Properties
Name | Type | Description |
Name | string | 获取属性需要在属性编辑器上显示的名称 |
Description | string | 获取属性需要在属性编辑器上显示的描述 |
DescriptorType | Type | 获取属性描述器类型 |
Constructor
Constructor
/// <summary>
/// 构造一个STNode属性特性
/// </summary>
/// <param name="strKey">需要显示的名称</param>
/// <param name="strDesc">需要显示的描述信息</param>
public STNodePropertyAttribute(string strKey, string strDesc);
STNodePropertyDescriptor
Properties
Name | Type | Description |
Node | STNode | 获取目标节点 |
Control | STNodePropertyGrid | 获取所属的节点属性编辑器控件 |
Rectangle | Rectangle | 获取选项所在区域 |
RectangleL | Rectangle | 获取选项名称所在区域 |
RectangleR | Rectangle | 获取选项值所在区域 |
Name | string | 获取选项需要显示的名称 |
Description | string | 获取属性对应的描述信息 |
PropertyInfo | PropertyInfo | 获取属性信息 |
Virtual method
OnSetItemLocation
/// <summary>
/// 当确定STNode属性在属性编辑器上的位置时候发生
/// </summary>
protected internal virtual void OnSetItemLocation();
GetValueFromString
/// <summary>
/// 将字符串形式的属性值转换为属性目标类型的值
/// 默认只支持 int float double string bool 以及上述类型的Array
/// 若目标类型不在上述中 请重写此函数自行转换
/// </summary>
/// <param name="strText">字符串形式的属性值</param>
/// <returns>属性真实目标类型的值</returns>
protected internal virtual object GetValueFromString(string strText);
GetStringFromValue
/// <summary>
/// 将属性目标类型的值转换为字符串形式的值
/// 默认对类型值进行 ToString() 操作
/// 如需特殊处理 请重写此函数自行转换
/// </summary>
/// <returns>属性值的字符串形式</returns>
protected internal virtual string GetStringFromValue();
GetValueFromBytes
/// <summary>
/// 将二进制形式的属性值转换为属性目标类型的值 用于从文件存储中的数据还原属性值
/// 默认将其转换为字符串然后调用 GetValueFromString(string)
/// 此函数与 GetBytesFromValue() 相对应 若需要重写函数应当两个函数一起重写
/// </summary>
/// <param name="byData">二进制数据</param>
/// <returns>属性真实目标类型的值</returns>
protected internal virtual object GetValueFromBytes(byte[] byData);
GetBytesFromValue
/// <summary>
/// 将属性目标类型的值转换为二进制形式的值 用于文件存储时候调用
/// 默认调用 GetStringFromValue() 然后将字符串转换为二进制数据
/// 如需特殊处理 请重写此函数自行转换 并且重写 GetValueFromBytes()
/// </summary>
/// <returns>属性值的二进制形式</returns>
protected internal virtual byte[] GetBytesFromValue();
GetValue
/// <summary>
/// 此函数对应 System.Reflection.PropertyInfo.GetValue()
/// </summary>
/// <param name="index">索引属性的可选索引值 对于非索引属性 此值应为null</param>
/// <returns>属性值</returns>
protected internal virtual object GetValue(object[] index);
SetValue
/// <summary>
/// 此函数对应 System.Reflection.PropertyInfo.SetValue()
/// </summary>
/// <param name="value">需要设置的属性值</param>
protected internal virtual void SetValue(object value);
SetValue
/// <summary>
/// 此函数对应 System.Reflection.PropertyInfo.SetValue()
/// 在调用之前会默认进行 GetValueFromString(strValue) 处理
/// </summary>
/// <param name="strValue">需要设置的属性字符串形式的值</param>
protected internal virtual void SetValue(string strValue);
SetValue
/// <summary>
/// 此函数对应 System.Reflection.PropertyInfo.SetValue()
/// 在调用之前会默认进行 GetValueFromBytes(byte[]) 处理
/// </summary>
/// <param name="byData">需要设置的属性二进制数据</param>
protected internal virtual void SetValue(byte[] byData);
SetValue
/// <summary>
/// 此函数对应 System.Reflection.PropertyInfo.SetValue()
/// </summary>
/// <param name="value">需要设置的属性值</param>
/// <param name="index">索引属性的可选索引值 对于非索引属性 此值应为null</param>
protected internal virtual void SetValue(object value, object[] index);
SetValue
/// <summary>
/// 此函数对应 System.Reflection.PropertyInfo.SetValue()
/// 在调用之前会默认进行 GetValueFromString(strValue) 处理
/// </summary>
/// <param name="strValue">需要设置的属性字符串形式的值</param>
/// <param name="index">索引属性的可选索引值 对于非索引属性 此值应为null</param>
protected internal virtual void SetValue(string strValue, object[] index);
SetValue
/// <summary>
/// 此函数对应 System.Reflection.PropertyInfo.SetValue()
/// 在调用之前会默认进行 GetValueFromBytes(byte[]) 处理
/// </summary>
/// <param name="byData">需要设置的属性二进制数据</param>
/// <param name="index">索引属性的可选索引值 对于非索引属性 此值应为null</param>
protected internal virtual void SetValue(byte[] byData, object[] index);
OnSetValueError
/// <summary>
/// 当设置属性值发生错误时候发生
/// </summary>
/// <param name="ex">异常信息</param>
protected internal virtual void OnSetValueError(Exception ex);
OnDrawValueRectangle
/// <summary>
/// 当绘制属性在属性编辑器上的值所在区域时候发生
/// </summary>
/// <param name="dt">绘制工具</param>
protected internal virtual void OnDrawValueRectangle(DrawingTools dt);
OnMouseEnter
/// <summary>
/// 当鼠标进入属性值所在区域时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected internal virtual void OnMouseEnter(EventArgs e);
OnMouseDown
/// <summary>
/// 当鼠标在属性值所在区域点击时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected internal virtual void OnMouseDown(MouseEventArgs e);
OnMouseMove
/// <summary>
/// 当鼠标在属性值所在区域移动时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected internal virtual void OnMouseMove(MouseEventArgs e);
OnMouseUp
/// <summary>
/// 当鼠标在属性值所在区域抬起时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected internal virtual void OnMouseUp(MouseEventArgs e);
OnMouseLeave
/// <summary>
/// 当鼠标在属性值所在区域离开时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected internal virtual void OnMouseLeave(EventArgs e);
OnMouseClick
/// <summary>
/// 当鼠标在属性值所在区域点击时候发生
/// </summary>
/// <param name="e">事件参数</param>
protected internal virtual void OnMouseClick(MouseEventArgs e);
public method
Invalidate
/// <summary>
/// 重绘选项区域
/// </summary>
public void Invalidate();