c# - 在 propertygrid 中使用 datetimepicker 选择时间

标签 c# datetime controls propertygrid

我正在尝试使用 propertygriddatetimepicker 仅选择一个时间(小时和分钟)。
我已经创建了自己的编辑器。
问题是它没有在文本中显示值,并且该值也可以有日历:

这里有代码:

public class Tests
    {
        private DateTimePicker time = new DateTimePicker();

        [Editor(typeof(MyEditor), typeof(UITypeEditor))]
        public DateTimePicker Time
        {
            get { return time; }
            set { time = value; }

        }

        public Tests()
        {
            time.Format = DateTimePickerFormat.Time;
            time.CustomFormat = "hh:mm";
            time.Value = DateTime.Now;
            DateTime t = new DateTime();

        }

    }

    class MyEditor : UITypeEditor
    {

        IWindowsFormsEditorService editorService;
        DateTimePicker picker = new DateTimePicker();

        public MyEditor()
        {

            picker.Format = DateTimePickerFormat.Custom;
            picker.CustomFormat = "hh:mm";
            picker.ShowUpDown = true;
            picker.ValueChanged += new EventHandler(picker_ValueChanged);
        }

        void picker_ValueChanged(object sender, EventArgs e)
        {
            this.editorService.CloseDropDown();
        }

        public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
        {

            if (provider != null)
            {
                this.editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
            }

            if (this.editorService != null)
            {

                DateTimePicker tmp = (DateTimePicker)value;
                tmp.CustomFormat = "hh:mm";
                tmp.Text = tmp.Value.ToString();
                picker = tmp;

                this.editorService.DropDownControl(picker);

            }

            return value;

        }

        public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.DropDown;
        }

    }

最佳答案

我终于用字符串做到了

public class Tests {
  private string time;

  [Editor(typeof(TimePickerEditor), typeof(UITypeEditor))]
  public string Time {
    get { return time; }
    set { time = value; }
  }

  internal class TimePickerEditor : UITypeEditor {
    IWindowsFormsEditorService editorService;
    DateTimePicker picker = new DateTimePicker();
    string time;

    public TimePickerEditor() {
      picker.Format = DateTimePickerFormat.Custom;
      picker.CustomFormat = "mm:HH";
      picker.ShowUpDown = true;
    }

    public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) {
      if (provider != null) {
        this.editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
      }
      if (this.editorService != null) {
        if (value == null) {
          time = DateTime.Now.ToString("HH:mm");
        }
        this.editorService.DropDownControl(picker);
        value = picker.Value.ToString("HH:mm");
      }
      return value;
    }

    public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context) {
      return UITypeEditorEditStyle.DropDown;
    }
  }
}

关于c# - 在 propertygrid 中使用 datetimepicker 选择时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460489/

相关文章:

javascript - 样式为切换按钮的 HTML 单选按钮

c# - 动态循环控件没有效果

c# - 如何在C#中标准化WAV文件量?

c# - 如何使用 Youtube api 查找直播视频列表?

c# - 如何取消 PIPE 操作?

c# - 将 float 转换为时间跨度

c# - 比较一年中的月份与日期时间的月份

c# - 选择字符串列表的第一个单词并连接 linq 列表中其余项目的最后一个字符

javascript - 带有 JavaScript 的日期时间范围分隔符适用于除少数范围之外的所有范围

c# - 列出 C# ASP.NET 项目中的所有控件