77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Windows.Forms.Design;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Drawing.Design;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Design
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents editor for Time-Zone ID selection.
 | 
						|
    /// </summary>
 | 
						|
    public class TimeZoneSelectionEditor : System.Drawing.Design.UITypeEditor
 | 
						|
    {
 | 
						|
        #region Constructor
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Implementation
 | 
						|
        private IWindowsFormsEditorService _EditorService = null;
 | 
						|
 | 
						|
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
 | 
						|
        {
 | 
						|
            if (context != null
 | 
						|
                && context.Instance != null
 | 
						|
                && provider != null)
 | 
						|
            {
 | 
						|
                ElementStyle es = value as ElementStyle;
 | 
						|
 | 
						|
                _EditorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
 | 
						|
 | 
						|
                if (_EditorService != null)
 | 
						|
                {
 | 
						|
                    ListBox lb = new ListBox();
 | 
						|
                    List<DevComponents.Schedule.TimeZoneInfo> timeZonesList = DevComponents.Schedule.TimeZoneInfo.GetSystemTimeZones();
 | 
						|
                    int selectedIndex = -1;
 | 
						|
                    for (int i = 0; i < timeZonesList.Count; i++)
 | 
						|
                    {
 | 
						|
                        DevComponents.Schedule.TimeZoneInfo timeZoneInfo = timeZonesList[i];
 | 
						|
                        lb.Items.Add(timeZoneInfo.Id);
 | 
						|
                        if (timeZoneInfo.Id.Equals((string)value))
 | 
						|
                            selectedIndex = i;
 | 
						|
                    }
 | 
						|
                    lb.SelectedIndex = selectedIndex;
 | 
						|
                    lb.SelectedIndexChanged += new EventHandler(this.SelectedChanged);
 | 
						|
                    _EditorService.DropDownControl(lb);
 | 
						|
                    return lb.SelectedItem;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return value;
 | 
						|
        }
 | 
						|
 | 
						|
        private void SelectedChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (_EditorService != null)
 | 
						|
                _EditorService.CloseDropDown();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the editor style used by the EditValue method.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="context">An ITypeDescriptorContext that can be used to gain additional context information.</param>
 | 
						|
        /// <returns>A UITypeEditorEditStyle value that indicates the style of editor used by EditValue. If the UITypeEditor does not support this method, then GetEditStyle will return None</returns>
 | 
						|
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
 | 
						|
        {
 | 
						|
            if (context != null && context.Instance != null)
 | 
						|
            {
 | 
						|
                return UITypeEditorEditStyle.DropDown;
 | 
						|
            }
 | 
						|
            return base.GetEditStyle(context);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |