为啥PropertyGrid控件的SelectedObject赋值后没有效果,控件无任何显示


这个问题看下面的代码就知道了。

启用注释的那句”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 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864