这个问题看下面的代码就知道了。
启用注释的那句”propertyGrid1.SelectedObject = new param2();“, 可以看到此现象。
但是如果你把它修改成下面这样,又可以了!
public class param2 { private int _k1; private string _str1; public int k1 { get { return _k1; } set { _k1 = value; } } public string str1 { get { return _str1; } set { _str1 = value; } } }
丫的原来的两种不同的属性定义对结果有影响。
如果非要按{get;set;} 这种写法,也可以,必须让特性 Browable(true) ,不能是False
Browsable(true)
就像类CAxisParam定义的那样就可以了。
源码:
using Csharp_06; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { private CAxisParam configdata = new CAxisParam(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SaveSACMotionDebugConfig(); MessageBox.Show("ok"); } private void Form1_Load(object sender, EventArgs e) { LoadSACMotionDebugConfig(); //propertyGrid1.SelectedObject = new Go2(); //propertyGrid1.SelectedObject = new param2(); propertyGrid1.SelectedObject = configdata; } /// <summary> /// 保存面板的调试参数 /// </summary> /// <param name="filename"></param> public void SaveSACMotionDebugConfig(string filename = "ConfigDataFileName") { string moduleDir = AppDomain.CurrentDomain.BaseDirectory; try { var fpath = moduleDir + filename; var str1 = Newtonsoft.Json.JsonConvert.SerializeObject(configdata); FileData data = new FileData(fpath); data.SaveData(str1); } catch (Exception ex) { throw ex; } } /// <summary> /// 载入面板的调试参数 异常:ArgumentException /// </summary> /// <param name="filename"></param> /// <returns></returns> public void LoadSACMotionDebugConfig(string filename = "ConfigDataFileName") { string moduleDir = AppDomain.CurrentDomain.BaseDirectory; var fpath = moduleDir + filename; if (!File.Exists(fpath)) { SaveSACMotionDebugConfig(); //throw new ArgumentException("配置文件不存在"); } FileData data = new FileData(fpath); var str1 = data.ReadData(); try { if (string.IsNullOrEmpty(str1)) { configdata = new CAxisParam(); } else { configdata = Newtonsoft.Json.JsonConvert.DeserializeObject<CAxisParam>(str1); } } catch (Exception ex) { throw new ArgumentException("读面板的参数配置文件,反序列化时失败,详细信息:" + ex.Message); } } } public class Go { private string _Hi = "hi"; public string Hi { get { return _Hi; } set { _Hi = Hi; } } } class Go2 { private float _TieMu = 5.5f; private string _Rule = "数子法"; [CategoryAttribute("规则"), DescriptionAttribute("贴目")] public float TieMu { get { return _TieMu; } set { _TieMu = TieMu; } } [CategoryAttribute("规则"), DescriptionAttribute("计算法")] public string Rule { get { return _Rule; } set { _Rule = Rule; } } private int _Black = 0; private int _White = 0; [CategoryAttribute("围棋"), DescriptionAttribute("黑")] public int Black { get { return _Black; } set { _Black = Black; } } [CategoryAttribute("围棋"), DescriptionAttribute("白")] public int White { get { return _White; } set { _White = White; } } } public class param2 { public int k1 { get; set; } public string str1 { get; set; } } public class CAxisParam { /// <summary> /// 轴的脉冲输出模式 /// </summary> public enum PlusOutModeEnum { OUT_DIR = 0, OUT_DIR_OUT_NEG, OUT_DIR_DIR_NEG, OUT_DIR_ALL_NEG, O_CW_CCW, CW_CCW_ALL_NEG } /// <summary> /// 最大速度 /// </summary> [DisplayName("轴脉冲输出模式"), Description("轴脉冲输出模式,包括两种类型:脉冲方向和双脉冲,共6种细分类"), Category("轴脉冲输出模式"), Browsable(true)] public PlusOutModeEnum POutMode { get; set; } = PlusOutModeEnum.OUT_DIR; #region 速度参数 /// <summary> /// 最大速度 /// </summary> [DisplayName("最大速度"), Description("设置该轴的最大速度,单位plus/s,缺省值2M"), Category("速度参数"), Browsable(true)] public double MaxVel { get; set; } = 1024 * 1024 * 2; /// <summary> /// 最大停止速度 /// </summary> [DisplayName("最大停止速度"), Description("设置该轴的最大停止速度,单位plus/s,缺省值2M"), Category("速度参数"), Browsable(true)] public double MaxStopVel { get; set; } = 1024 * 1024 * 2; /// <summary> /// 最大加速度时间 /// </summary> [DisplayName("最大加速度时间"), Description("设置该轴的最大加速度时间,单位秒"), Category("速度参数"), Browsable(true)] public double MaxAcc { get; set; } = 1000; /// <summary> /// 最大减速度时间 /// </summary> [DisplayName("最大减速度时间"), Description("设置该轴的最大减速度时间,单位秒"), Category("速度参数"), Browsable(true)] public double MaxDec { get; set; } = 1000; /// <summary> /// 最小加速度时间 /// </summary> [DisplayName("最小加速度时间"), Description("设置该轴的最小加速度时间,单位秒"), Category("速度参数"), Browsable(true)] public double MinAcc { get; set; } = 0.001; /// <summary> /// 最小减速度时间 /// </summary> [DisplayName("最小减速度时间"), Description("设置该轴的最小减速度时间,单位秒"), Category("速度参数"), Browsable(true)] public double MinDec { get; set; } = 0.001; /// <summary> /// 起始速度 /// </summary> [DisplayName("起始速度"), Description("起始速度(初速度)。该值必须小于或者等于运行速度。单位:pulse/s (最大值为 2M) 默认值3000"), Category("速度参数"), Browsable(true)] public double StartVel { get; set; } = 3000.00; /// <summary> /// 运行速度 /// </summary> [DisplayName("运行速度"), Description("起始速度(初速度)。该值必须小于或者等于运行速度。单位:pulse/s (最大值为 2M) 默认值4000"), Category("速度参数"), Browsable(true)] public double RunVel { get; set; } = 4000.00; /// <summary> /// 加速度 /// </summary> [DisplayName("加速度"), Description("设置该轴的加速度(单位:s ,最小值为 0.001s)),默认值1"), Category("速度参数"), Browsable(true)] public double Acc { get; set; } = 1.00; /// <summary> /// 减速度 /// </summary> [DisplayName("减速度"), Description("设置该轴的减速度(单位:s ,最小值为 0.001s),默认值1"), Category("速度参数"), Browsable(true)] public double Dec { get; set; } = 1.00; /// <summary> /// S段速度 /// </summary> [DisplayName("S段速度"), Description("设置该轴的S段速度(单位:s;范围:0~0.5 s)默认值0"), Category("速度参数"), Browsable(true)] public double SPara { get; set; } = 0; /// <summary> /// 速度类型 /// </summary> [DisplayName("速度类型"), Description("设置速度类型:梯形或者S型。取值1为S型,默认值为0(梯形)"), Category("速度参数"), Browsable(true)] public int JK { get; set; } = 0; /// <summary> /// 停止速度 /// </summary> [DisplayName("停止速度"), Description("停止速度。该值必须小于或者等于运行速度。默认值1000"), Category("速度参数"), Browsable(true)] public double StopVel { get; set; } = 1000.00; #endregion } }
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

本帖最后由 勇哥,很想停止 于 2024-05-29 14:23:35 编辑 
