public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) { wfes = (IWindowsFormsEditorService) provider.GetService(typeof(IWindowsFormsEditorService)); if((wfes == null) || (context == null)) return null ; ImageList imageList = GetImageList(context.Instance) ; if ((imageList == null) || (imageList.Images.Count==0)) return -1 ; m_imagePanel = new ImageListPanel(); m_imagePanel.BackgroundColor = Color.FromArgb(241,241,241); m_imagePanel.BackgroundOverColor = Color.FromArgb(102,154,204); m_imagePanel.HLinesColor = Color.FromArgb(182,189,210); m_imagePanel.VLinesColor = Color.FromArgb(182,189,210); m_imagePanel.BorderColor = Color.FromArgb(0,0,0); m_imagePanel.EnableDragDrop = true; m_imagePanel.Init(imageList,12,12,6,(int)value); // add listner for event m_imagePanel.ItemClick += new ImageListPanelEventHandler(OnItemClicked); // set m_selectedIndex to -1 in case the dropdown is closed without selection m_selectedIndex = -1; // show the popup as a drop-down wfes.DropDownControl(m_imagePanel) ; // return the selection (or the original value if none selected) return (m_selectedIndex != -1) ? m_selectedIndex : (int) value ; }
public void OnItemClicked(object sender, ImageListPanelEventArgs e) { m_selectedIndex = ((ImageListPanelEventArgs) e).SelectedItem; //remove listner m_imagePanel.ItemClick -= new ImageListPanelEventHandler(OnItemClicked); // close the drop-dwon, we are done wfes.CloseDropDown() ; m_imagePanel.Dispose() ; m_imagePanel = null ; }