PropertyGrid中如何人为控制SelectedGridItem

neuyun 2016-12-07 11:37:43
目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
...全文
357 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
phone296 2017-03-13
  • 打赏
  • 举报
回复
引用 1 楼 neuyun 的回复:
[quote=引用 楼主 neuyun 的回复:] 目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
制作一个图形编辑软件,图形的属性利用PropertyGrid显示,主要涉及了SelectedObject,当使用SelectedObject这个函数时,绘制图形的坐标就会被改变,即使SelectedObject不指向图形属性直接给其赋值个字符串,也会影响我的图形坐标,每次选中图形的特征点都会更改特征点的坐标值,有没有谁遇到这样的问题,绘图和属性控件两个不相干的为什么会互相影响,请教大神们。。。[/quote]可以考虑换一种方法
neuyun 2017-03-13
  • 打赏
  • 举报
回复
引用 楼主 neuyun 的回复:
目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
//保À¡ê存ä?编À¨¤辑-之?后¨®状Á¡ä态¬?列¢D表À¨ª private void FillAfterList(GraphicsList graphicsList/*, List<DrawObject> listToFill*/) { listAfter = new List<DrawObject>(); /* foreach (DrawObject o in graphicsList.Selection) { listAfter.Add(o.Clone()); } foreach (DrawObject o in graphicsList.SelectionHandlePoint) { listAfter.Add(o.Clone()); }*/ DrawObject newO = null; foreach (DrawObject o in graphicsList.Selection) { if (o.ObjectType == (int)DrawArea.DrawToolType.PolyLine) { newO = new DrawPolyLine(((DrawPolyLine)o).pointArray[0].X, ((DrawPolyLine)o).pointArray[0].Y); int num = 0; foreach (PointF point in ((DrawPolyLine)o).pointArray.ToArray()) { if (num >= 1) { ((DrawPolyLine)newO).AddPoint(point); } num++; } newO.ID = o.ID; newO.ObjectType = o.ObjectType; //当Ì¡À多¨¤段?线?时º¡À,List<T>指?向¨°内¨²存ä? 当Ì¡À内¨²存ä?发¤¡é生¦¨²变À?化¡¥则¨°跟¨²随?之?变À?化¡¥ 导Ì?致?无T法¤¡§撤¡¤销¨²恢?复¡ä上¦?一°?个?状Á¡ä态¬? listAfter.Add(newO); } else if (o.ObjectType == (int)DrawArea.DrawToolType.Curve) { } else { newO = o.Clone(); listAfter.Add(newO); } } foreach (DrawObject o in graphicsList.SelectionHandlePoint) { if (o.ObjectType == (int)DrawArea.DrawToolType.PolyLine) { newO = new DrawPolyLine(((DrawPolyLine)o).pointArray[0].X, ((DrawPolyLine)o).pointArray[0].Y); int num = 0; foreach (PointF point in ((DrawPolyLine)o).pointArray.ToArray()) { if (num >= 1) { ((DrawPolyLine)newO).AddPoint(point); } num++; } newO.ID = o.ID; newO.ObjectType = o.ObjectType; //当Ì¡À多¨¤段?线?时º¡À,List<T>指?向¨°内¨²存ä? 当Ì¡À内¨²存ä?发¤¡é生¦¨²变À?化¡¥则¨°跟¨²随?之?变À?化¡¥ 导Ì?致?无T法¤¡§撤¡¤销¨²恢?复¡ä上¦?一°?个?状Á¡ä态¬? listAfter.Add(newO); } else if (o.ObjectType == (int)DrawArea.DrawToolType.Curve) { } else { newO = o.Clone(); listAfter.Add(newO); } } } } }
neuyun 2017-03-13
  • 打赏
  • 举报
回复
引用 楼主 neuyun 的回复:
目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
// Replace objects in graphicsList with objects from list private void ReplaceObjects(GraphicsList graphicsList, List<DrawObject> list) { for (int i = 0; i < graphicsList.Count; i++) { DrawObject replacement = null; foreach (DrawObject o in list) { if (o.ID == graphicsList[i].ID) { replacement = o; break; } } if (replacement != null) { graphicsList.Replace(i, replacement); } } } //保À¡ê存ä?编À¨¤辑-之?前¡ã状Á¡ä态¬?列¢D表À¨ª private void FillBeforeList(GraphicsList graphicsList) { listBefore = new List<DrawObject>(); /* foreach (DrawObject o in graphicsList.Selection) { listBefore.Add(o.Clone()); } foreach (DrawObject o in graphicsList.SelectionHandlePoint) { listBefore.Add(o.Clone()); }*/ DrawObject newO = null; foreach (DrawObject o in graphicsList.Selection) { if (o.ObjectType == (int)DrawArea.DrawToolType.PolyLine) { newO = new DrawPolyLine(((DrawPolyLine)o).pointArray[0].X, ((DrawPolyLine)o).pointArray[0].Y); int num = 0; foreach (PointF point in ((DrawPolyLine)o).pointArray.ToArray()) { if (num >= 1) { ((DrawPolyLine)newO).AddPoint(point); } num++; } newO.ID = o.ID; newO.ObjectType = o.ObjectType; //记?录?缩?放¤?及¡ã拖ª?拽Á¡ì newO.ObjectZoomRate = o.ObjectZoomRate; newO.ObjectDragOffset = o.ObjectDragOffset; //当Ì¡À多¨¤段?线?时º¡À,List<T>指?向¨°内¨²存ä? 当Ì¡À内¨²存ä?发¤¡é生¦¨²变À?化¡¥则¨°跟¨²随?之?变À?化¡¥ 导Ì?致?无T法¤¡§撤¡¤销¨²恢?复¡ä上¦?一°?个?状Á¡ä态¬? listBefore.Add(newO); } else if (o.ObjectType == (int)DrawArea.DrawToolType.Curve) { } else { newO = o.Clone(); listBefore.Add(newO); } } foreach (DrawObject o in graphicsList.SelectionHandlePoint) { if (o.ObjectType == (int)DrawArea.DrawToolType.PolyLine) { newO = new DrawPolyLine(((DrawPolyLine)o).pointArray[0].X, ((DrawPolyLine)o).pointArray[0].Y); int num = 0; foreach (PointF point in ((DrawPolyLine)o).pointArray.ToArray()) { if (num >= 1) { ((DrawPolyLine)newO).AddPoint(point); } num++; } newO.ID = o.ID; newO.ObjectType = o.ObjectType; //当Ì¡À多¨¤段?线?时º¡À,List<T>指?向¨°内¨²存ä? 当Ì¡À内¨²存ä?发¤¡é生¦¨²变À?化¡¥则¨°跟¨²随?之?变À?化¡¥ 导Ì?致?无T法¤¡§撤¡¤销¨²恢?复¡ä上¦?一°?个?状Á¡ä态¬? listBefore.Add(newO); } else if (o.ObjectType == (int)DrawArea.DrawToolType.Curve) { } else { newO = o.Clone(); listBefore.Add(newO); } } }
neuyun 2017-03-13
  • 打赏
  • 举报
回复
引用 楼主 neuyun 的回复:
目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
using System; using System.Collections.Generic; using System.Text; using System.Drawing; namespace CSharp { /// <summary> /// Changing state of existing objects: /// move, resize, change properties. /// </summary> class CommandChangeState : Command { //=========================old========================================= /* // Selected object(s) before operation List<DrawObject> listBefore; // Selected object(s) after operation List<DrawObject> listAfter; // Create this command BEFORE operation. public CommandChangeState(GraphicsList graphicsList) { // Keep objects state before operation. FillList(graphicsList, ref listBefore); } // Call this function AFTER operation. public void NewState(GraphicsList graphicsList) { // Keep objects state after operation. FillList(graphicsList, ref listAfter); } public override void Undo(GraphicsList list) { // Replace all objects in the list with objects from listBefore ReplaceObjects(list, listBefore); } public override void Redo(GraphicsList list) { // Replace all objects in the list with objects from listAfter ReplaceObjects(list, listAfter); } // Replace objects in graphicsList with objects from list private void ReplaceObjects(GraphicsList graphicsList, List<DrawObject> list) { for (int i = 0; i < graphicsList.Count; i++) { DrawObject replacement = null; foreach (DrawObject o in list) { if (o.ID == graphicsList[i].ID) { replacement = o; break; } } if (replacement != null) { graphicsList.Replace(i, replacement); } } } // Fill list from selection private void FillList(GraphicsList graphicsList, ref List<DrawObject> listToFill) { listToFill = new List<DrawObject>(); foreach (DrawObject o in graphicsList.Selection) { listToFill.Add(o.Clone()); } foreach (DrawObject o in graphicsList.SelectionHandlePoint) { listToFill.Add(o.Clone()); } }*/ //=========================new========================================= // Selected object(s) before operation List<DrawObject> listBefore ;//= new List<DrawObject>(); // Selected object(s) after operation List<DrawObject> listAfter;// = new List<DrawObject>(); // Create this command BEFORE operation. public CommandChangeState(GraphicsList graphicsList) { // Keep objects state before operation. FillBeforeList(graphicsList); } // clear this command BEFORE invalid operation. public void ClearInvalidCommandChangeState() { // Keep objects state before operation. listBefore.Clear(); } // Call this function AFTER operation. public void NewState(GraphicsList graphicsList) { // Keep objects state after operation. FillAfterList(graphicsList); } public override void Undo(GraphicsList list) { // Replace all objects in the list with objects from listBefore ReplaceObjects(list, listBefore); } public override void Redo(GraphicsList list) { // Replace all objects in the list with objects from listAfter ReplaceObjects(list, listAfter); }
assky124 2017-03-10
  • 打赏
  • 举报
回复
用 DefaultProperty 标记下类试试
xdashewan 2017-03-10
  • 打赏
  • 举报
回复
一般用途可以参考http://blog.csdn.net/luyifeiniu/article/details/5426960
neuyun 2017-03-10
  • 打赏
  • 举报
回复
引用 2 楼 neuyun 的回复:
[quote=引用 1 楼 neuyun 的回复:] [quote=引用 楼主 neuyun 的回复:] 目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
制作一个图形编辑软件,图形的属性利用PropertyGrid显示,主要涉及了SelectedObject,当使用SelectedObject这个函数时,绘制图形的坐标就会被改变,即使SelectedObject不指向图形属性直接给其赋值个字符串,也会影响我的图形坐标,每次选中图形的特征点都会更改特征点的坐标值,有没有谁遇到这样的问题,绘图和属性控件两个不相干的为什么会互相影响,请教大神们。。。[/quote] 怎么没人回答[/quote]using System.Collections.Generic; using System.Text; using System.Drawing; namespace CSharp { /// <summary> /// Add new object command /// </summary> class CommandAdd : Command { //========================================old============================================ /*DrawObject drawObject; // Create this command with DrawObject instance added to the list public CommandAdd(DrawObject drawObject) : base() { // Keep copy of added object this.drawObject = drawObject.Clone(); } public override void Undo(GraphicsList list) { list.DeleteLastAddedObject(); } public override void Redo(GraphicsList list) { list.UnselectAll(); list.Add(drawObject); }*/ //=====================================new==================================================== List<DrawObject> listAdd;// = new List<DrawObject>(); // Create this command with DrawObject instance added to the list public CommandAdd(DrawObject drawObject) : base() { // Keep copy of added object listAdd = new List<DrawObject>(); DrawObject newO = null; if (drawObject.ObjectType == (int)DrawArea.DrawToolType.PolyLine) { newO = new DrawPolyLine(((DrawPolyLine)drawObject).pointArray[0].X, ((DrawPolyLine)drawObject).pointArray[0].Y); int num = 0; foreach (PointF point in ((DrawPolyLine)drawObject).pointArray.ToArray()) { if (num >= 1) { ((DrawPolyLine)newO).AddPoint(point); } num++; } newO.ID = drawObject.ID; newO.ObjectType = drawObject.ObjectType; //记?录?缩?放¤?及¡ã拖ª?拽Á¡ì newO.ObjectZoomRate = drawObject.ObjectZoomRate; newO.ObjectDragOffset = drawObject.ObjectDragOffset; //当Ì¡À多¨¤段?线?时º¡À,List<T>指?向¨°内¨²存ä? 当Ì¡À内¨²存ä?发¤¡é生¦¨²变À?化¡¥则¨°跟¨²随?之?变À?化¡¥ 导Ì?致?无T法¤¡§撤¡¤销¨²恢?复¡ä上¦?一°?个?状Á¡ä态¬? listAdd.Add(newO); } else if (drawObject.ObjectType == (int)DrawArea.DrawToolType.Curve) { } else { listAdd.Add(drawObject.Clone()); } //========================================================== } public override void Undo(GraphicsList list) { list.DeleteLastAddedObject(); } public override void Redo(GraphicsList list) { list.UnselectAll(); list.Add(listAdd[0]); } } }
neuyun 2016-12-15
  • 打赏
  • 举报
回复
引用 1 楼 neuyun 的回复:
[quote=引用 楼主 neuyun 的回复:] 目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
制作一个图形编辑软件,图形的属性利用PropertyGrid显示,主要涉及了SelectedObject,当使用SelectedObject这个函数时,绘制图形的坐标就会被改变,即使SelectedObject不指向图形属性直接给其赋值个字符串,也会影响我的图形坐标,每次选中图形的特征点都会更改特征点的坐标值,有没有谁遇到这样的问题,绘图和属性控件两个不相干的为什么会互相影响,请教大神们。。。[/quote] 怎么没人回答
neuyun 2016-12-07
  • 打赏
  • 举报
回复
引用 楼主 neuyun 的回复:
目前制作的一部分功能的属性通过PropertyGrid显示,对于不同功能选择时呈现对应功能的属性并将该属性ITem选中,所以是想要人为控制Item的选择,一直没有找到方法控制Item的选择,请教大神们。
制作一个图形编辑软件,图形的属性利用PropertyGrid显示,主要涉及了SelectedObject,当使用SelectedObject这个函数时,绘制图形的坐标就会被改变,即使SelectedObject不指向图形属性直接给其赋值个字符串,也会影响我的图形坐标,每次选中图形的特征点都会更改特征点的坐标值,有没有谁遇到这样的问题,绘图和属性控件两个不相干的为什么会互相影响,请教大神们。。。

110,534

社区成员

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

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

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