1 // Permission is hereby granted, free of charge, to any person obtaining
\r
2 // a copy of this software and associated documentation files (the
\r
3 // "Software"), to deal in the Software without restriction, including
\r
4 // without limitation the rights to use, copy, modify, merge, publish,
\r
5 // distribute, sublicense, and/or sell copies of the Software, and to
\r
6 // permit persons to whom the Software is furnished to do so, subject to
\r
7 // the following conditions:
\r
9 // The above copyright notice and this permission notice shall be
\r
10 // included in all copies or substantial portions of the Software.
\r
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
20 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
\r
23 // Jonathan Chambers (jonathan.chambers@ansys.com)
\r
30 using System.Collections;
\r
31 using System.Drawing;
\r
32 using System.Drawing.Design;
\r
33 using System.ComponentModel;
\r
34 using System.Windows.Forms.Design;
\r
36 namespace System.Windows.Forms.PropertyGridInternal
\r
38 internal class PropertyGridView : System.Windows.Forms.ScrollableControl, IWindowsFormsEditorService
\r
41 #region Private Members
\r
42 private const int V_INDENT = 16;
\r
43 private const int ROW_HEIGHT = 16;
\r
44 private const int RESIZE_WIDTH = 3;
\r
45 private const int BUTTON_WIDTH = 25;
\r
46 private PropertyGridTextBox grid_textbox;
\r
47 private PropertyGrid property_grid;
\r
48 private bool resizing_grid;
\r
49 private int splitter_location;
50 private int open_grid_item_count = -1;
51 private int skipped_grid_items;
\r
52 private PropertyGridDropDown dropdown_form;
\r
53 private bool dropdown_form_showing;
\r
54 private Form dialog_form;
\r
55 private VScrollBar vbar;
\r
59 public PropertyGridView (PropertyGrid propertyGrid)
\r
61 property_grid = propertyGrid;
\r
63 property_grid.SelectedGridItemChanged+=new SelectedGridItemChangedEventHandler(HandleSelectedGridItemChanged);
\r
64 property_grid.PropertyValueChanged+=new PropertyValueChangedEventHandler(HandlePropertyValueChanged);
\r
66 this.BackColor = Color.Beige;
\r
67 grid_textbox = new PropertyGridTextBox();
\r
68 grid_textbox.DropDownButtonClicked +=new EventHandler(DropDownButtonClicked);
\r
69 grid_textbox.DialogButtonClicked +=new EventHandler(DialogButtonClicked);
\r
72 dropdown_form = new PropertyGridDropDown();
\r
73 dropdown_form.FormBorderStyle = FormBorderStyle.None;
74 dropdown_form.ShowInTaskbar = false;
76 dialog_form = new Form();
\r
77 //dialog_form.FormBorderStyle = FormBorderStyle.None;
\r
81 grid_textbox.Visible = true;
\r
82 grid_textbox.Font = this.Font;//new Font(this.Font,FontStyle.Bold);
\r
83 grid_textbox.BackColor = this.BackColor;
\r
84 // Not working at all, used to??
\r
85 grid_textbox.Validating += new CancelEventHandler(TextBoxValidating);
\r
87 vbar = new VScrollBar();
\r
88 vbar.Visible = false;
\r
89 vbar.Scroll+=new ScrollEventHandler(HandleScroll);
\r
90 vbar.Dock = DockStyle.Right;
\r
91 this.Controls.Add(vbar);
\r
93 splitter_location = 65;
\r
94 resizing_grid = false;
\r
96 ForeColorChanged+=new EventHandler(RedrawEvent);
\r
97 BackColorChanged+=new System.EventHandler(RedrawEvent);
\r
98 FontChanged+=new EventHandler(RedrawEvent);
\r
99 SizeChanged+=new EventHandler(RedrawEvent);
\r
101 SetStyle(ControlStyles.DoubleBuffer, true);
\r
102 SetStyle(ControlStyles.UserPaint, true);
\r
103 SetStyle(ControlStyles.AllPaintingInWmPaint, true);
\r
104 SetStyle(ControlStyles.ResizeRedraw, false);
\r
105 SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, false);
\r
110 #region Protected Instance Methods
\r
112 protected override void OnPaint(PaintEventArgs e)
\r
114 if (property_grid.SelectedGridItem != null && property_grid.SelectedGridItem.GridItemType == GridItemType.Property)
\r
116 this.Controls.Add(grid_textbox);
\r
117 if (!grid_textbox.Focused)
\r
118 grid_textbox.Focus();
\r
122 this.Controls.Remove(grid_textbox);
\r
125 // Decide if we need a scrollbar
126 open_grid_item_count = 0;
\r
129 //DrawBackground(e);
\r
131 e.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (BackColor), ClientRectangle);
\r
134 // can we use the transform
135 //pevent.Graphics.TranslateTransform(0, -vbar.Value*ROW_HEIGHT);
136 int yLoc = -vbar.Value*ROW_HEIGHT;
137 DrawGridItems(property_grid.grid_items, e, 1, ref yLoc);
\r
140 e.Graphics.DrawRectangle(SystemPens.ControlDark, 0,0,Width-1,Height-1 );
\r
150 protected override void OnMouseMove (MouseEventArgs e)
\r
152 if (resizing_grid)
\r
154 splitter_location = Math.Max(e.X,V_INDENT);
\r
157 base.OnMouseMove (e);
\r
160 private GridItem GetSelectedGridItem (GridItemCollection grid_items, int y)
\r
162 foreach (GridItem child_grid_item in grid_items)
\r
164 if (y > child_grid_item.Top && y < child_grid_item.Top + ROW_HEIGHT)
\r
166 return child_grid_item;
\r
168 GridItem foundItem = GetSelectedGridItem(child_grid_item.GridItems, y);
\r
169 if (foundItem != null)
\r
175 protected override void OnMouseDown (MouseEventArgs e)
\r
177 if (e.X > splitter_location - RESIZE_WIDTH && e.X < splitter_location + RESIZE_WIDTH)
\r
179 resizing_grid = true;
\r
183 GridItem foundItem = GetSelectedGridItem(property_grid.grid_items, e.Y);
\r
185 if (foundItem != null)
\r
187 if (foundItem.Expandable)
\r
189 if (foundItem.PlusMinusBounds.Contains(e.X,e.Y))
\r
191 foundItem.Expanded = !foundItem.Expanded;
\r
194 this.property_grid.SelectedGridItem = foundItem;
\r
197 base.OnMouseDown (e);
\r
201 protected override void OnMouseUp (MouseEventArgs e)
\r
203 resizing_grid = false;
\r
204 base.OnMouseUp (e);
\r
207 protected override void OnKeyDown (KeyEventArgs e)
\r
209 base.OnKeyDown (e);
\r
214 #region Private Helper Methods
\r
216 private void UpdateScrollBar()
\r
218 int visible_rows = this.ClientRectangle.Height/ROW_HEIGHT;
\r
219 if (open_grid_item_count > visible_rows)
\r
221 vbar.Visible = true;
\r
222 vbar.SmallChange = 1;
\r
224 vbar.Maximum = open_grid_item_count-1;
\r
225 vbar.LargeChange = visible_rows;
\r
229 vbar.Visible = false;
\r
234 private GridItem GetGridItemAt (int y)
\r
239 #region Drawing Code
\r
241 private void DrawGrid(PaintEventArgs pevent, int yLoc)
\r
243 Pen pen = ThemeEngine.Current.ResPool.GetPen(property_grid.LineColor);
\r
244 // vertical divider line
\r
245 pevent.Graphics.DrawLine(pen, splitter_location, 0, splitter_location, yLoc);
\r
249 // horizontal lines
\r
250 pevent.Graphics.DrawLine(pen, 0, yLoc, ClientRectangle.Width, yLoc);
\r
251 yLoc -= ROW_HEIGHT;
\r
255 private void DrawGridItems(GridItemCollection grid_items, PaintEventArgs pevent, int depth, ref int yLoc)
\r
257 foreach (GridItem grid_item in grid_items)
\r
259 DrawGridItem (grid_item, pevent, depth, ref yLoc);
260 if (grid_item.Expanded)
261 DrawGridItems(grid_item.GridItems, pevent, depth, ref yLoc);
265 private void DrawGridItemLabel(GridItem grid_item, PaintEventArgs pevent, Rectangle rect)
\r
268 if (grid_item.Parent != null && grid_item.Parent.GridItemType != GridItemType.Category)
\r
271 Font font = this.Font;
\r
272 Brush brush = SystemBrushes.WindowText;
\r
273 if (grid_item.GridItemType == GridItemType.Category)
\r
275 font = new Font(font, FontStyle.Bold);
\r
276 brush = SystemBrushes.ControlDark;
\r
279 if (grid_item == property_grid.SelectedGridItem && grid_item.GridItemType != GridItemType.Category)
\r
281 pevent.Graphics.FillRectangle (SystemBrushes.Highlight, rect);
\r
283 brush = SystemBrushes.HighlightText;
\r
287 pevent.Graphics.DrawString(grid_item.Label,font,brush,new Rectangle(x, rect.Y + 2,x-rect.X+rect.Width,rect.Height-2));
\r
290 private void DrawGridItemValue(GridItem grid_item, PaintEventArgs pevent, Rectangle rect)
\r
293 if (grid_item.PropertyDescriptor != null)
\r
296 bool paintsValue = false;
\r
297 UITypeEditor editor = null;
\r
298 object temp = grid_item.PropertyDescriptor.GetEditor(typeof(UITypeEditor));
\r
299 editor = (UITypeEditor)temp;//grid_item.PropertyDescriptor.GetEditor(typeof(UITypeEditor));
\r
300 if (editor != null)
\r
302 paintsValue = editor.GetPaintValueSupported();
\r
305 if (grid_item == property_grid.SelectedGridItem)
\r
307 grid_textbox.DropDownButtonVisible = false;
\r
308 grid_textbox.DialogButtonVisible = false;
\r
309 if (editor != null)
\r
311 UITypeEditorEditStyle style = editor.GetEditStyle();
\r
315 case UITypeEditorEditStyle.DropDown:
\r
316 grid_textbox.DropDownButtonVisible = true;
\r
318 case UITypeEditorEditStyle.Modal:
\r
319 grid_textbox.DialogButtonVisible = true;
\r
327 if (grid_item.PropertyDescriptor.Converter != null)
\r
329 if (grid_item.PropertyDescriptor.Converter.GetStandardValuesSupported())
\r
332 grid_textbox.DropDownButtonVisible = true;
\r
333 grid_textbox.ReadOnly = true;
338 System.Console.WriteLine("Converter not available for type {0}",grid_item.PropertyDescriptor.PropertyType);
\r
350 int xLoc = splitter_location+1;
\r
353 pevent.Graphics.DrawRectangle(ThemeEngine.Current.ResPool.GetPen(Color.Black), splitter_location+2,rect.Y+2, 20, ROW_HEIGHT-4);
\r
356 editor.PaintValue(grid_item.Value, pevent.Graphics, new Rectangle(splitter_location+3,rect.Y+3, 19, ROW_HEIGHT-5));
\r
358 catch (Exception ex)
\r
360 System.Console.WriteLine(ex.Message);
\r
361 System.Console.WriteLine("Paint Value failed for type {0}",grid_item.PropertyDescriptor.PropertyType);
\r
362 // design time stuff is not playing nice
\r
367 Font font = this.Font;
\r
370 if (grid_item.PropertyDescriptor.Converter != null)
372 string value = grid_item.PropertyDescriptor.Converter.ConvertToString(grid_item.Value);
\r
373 if (grid_item.PropertyDescriptor.CanResetValue(property_grid.SelectedObject))
\r
374 font = new Font(font, FontStyle.Bold);
\r
376 pevent.Graphics.DrawString(value,font,SystemBrushes.WindowText,new RectangleF(xLoc,rect.Y+2, ClientRectangle.Width-(xLoc), ROW_HEIGHT));
\r
380 System.Console.WriteLine("No converter for type {0}",grid_item.PropertyDescriptor.PropertyType);
\r
387 if (grid_item == property_grid.SelectedGridItem && grid_item.GridItemType != GridItemType.Category)
\r
389 grid_textbox.Location = new Point(xLoc, rect.Top);
\r
390 grid_textbox.Size = new Size(ClientRectangle.Width-xLoc,ROW_HEIGHT);
\r
395 private void DrawGridItem (GridItem grid_item, PaintEventArgs pevent, int depth, ref int yLoc)
\r
397 if (yLoc > -ROW_HEIGHT && yLoc < ClientRectangle.Height)
\r
401 pevent.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (property_grid.LineColor), 0,yLoc,V_INDENT, ROW_HEIGHT);
\r
403 if (grid_item.Expandable)
\r
405 grid_item.PlusMinusBounds = DrawPlusMinus(pevent, 3, yLoc+3, grid_item.Expanded, grid_item.GridItemType == GridItemType.Category);
\r
408 if (grid_item.GridItemType == GridItemType.Category)
\r
410 pevent.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (property_grid.LineColor), depth*V_INDENT,yLoc,ClientRectangle.Width-(depth*V_INDENT), ROW_HEIGHT);
\r
413 DrawGridItemLabel(grid_item, pevent, new Rectangle(V_INDENT,yLoc, splitter_location-V_INDENT, ROW_HEIGHT));
\r
414 DrawGridItemValue(grid_item, pevent, new Rectangle(splitter_location+2,yLoc, ClientRectangle.Width-splitter_location-2, ROW_HEIGHT));
\r
419 grid_item.Top = yLoc;
421 open_grid_item_count++;
\r
424 private Rectangle DrawPlusMinus (PaintEventArgs pevent, int x, int y, bool expanded, bool category)
426 Rectangle bounds = new Rectangle(x, y, 8, 8);
427 if (!category) pevent.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush(Color.White), bounds);
428 pevent.Graphics.DrawRectangle (SystemPens.ControlDark, bounds);
429 pevent.Graphics.DrawLine (SystemPens.ControlDark, x+2, y+4, x + 6, y+4);
431 pevent.Graphics.DrawLine (SystemPens.ControlDark, x+4, y+2, x+4, y+6);
438 #region Event Handling
\r
439 private void RedrawEvent (object sender, System.EventArgs e)
\r
444 private void TextBoxValidating (object sender, CancelEventArgs e)
\r
446 if (this.property_grid.SelectedGridItem != null)
\r
448 PropertyDescriptor desc = property_grid.SelectedGridItem.PropertyDescriptor;
\r
453 if (desc.Converter != null)
\r
455 SetPropertyValue(desc.Converter.ConvertFromString(grid_textbox.Text));
\r
459 System.Console.WriteLine("No converter for type {0}",desc.PropertyType);
\r
462 catch (Exception ex)
\r
464 Console.WriteLine("Error converting string");
\r
475 private void dropdown_form_Deactivate (object sender, EventArgs e)
\r
477 dropdown_form_showing = false;
\r
478 dropdown_form.Hide();
\r
479 //dropdown_form = new Form();
\r
482 private void listBox_SelectedIndexChanged (object sender, EventArgs e)
\r
484 if (this.property_grid.SelectedGridItem != null)
\r
486 PropertyDescriptor desc = property_grid.SelectedGridItem.PropertyDescriptor;
\r
489 SetPropertyValue(((ListBox)sender).SelectedItem);
\r
492 dropdown_form.Hide();
\r
493 //dropdown_form = new Form();
\r
497 private void SetPropertyValue(object newVal)
\r
499 if (this.property_grid.SelectedGridItem != null)
\r
501 PropertyDescriptor desc = property_grid.SelectedGridItem.PropertyDescriptor;
\r
504 desc.SetValue(property_grid.SelectedObject, newVal);
\r
509 private void DropDownButtonClicked (object sender, EventArgs e)
\r
511 if (property_grid.SelectedGridItem.PropertyDescriptor.GetEditor(typeof(UITypeEditor)) == null)
\r
513 //dropdown_form.FormBorderStyle = FormBorderStyle.None;
\r
514 dropdown_form.Deactivate +=new EventHandler(dropdown_form_Deactivate);
\r
515 ListBox listBox = new ListBox();
\r
516 listBox.Dock = DockStyle.Fill;
\r
517 listBox.SelectedIndexChanged +=new EventHandler(listBox_SelectedIndexChanged);
\r
518 foreach (object obj in property_grid.SelectedGridItem.PropertyDescriptor.Converter.GetStandardValues())
\r
519 listBox.Items.Add(obj);
\r
520 dropdown_form.Controls.Clear();
\r
521 dropdown_form.Controls.Add(listBox);
\r
522 dropdown_form.Location = PointToScreen(new Point(grid_textbox.Location.X,grid_textbox.Location.Y+ROW_HEIGHT));
\r
523 dropdown_form.Width = grid_textbox.Width;
\r
524 dropdown_form.Show();
\r
528 UITypeEditor editor = (UITypeEditor)property_grid.SelectedGridItem.PropertyDescriptor.GetEditor(typeof(UITypeEditor));
\r
529 System.ComponentModel.Design.ServiceContainer service_container = new System.ComponentModel.Design.ServiceContainer();
\r
530 service_container.AddService(typeof(System.Windows.Forms.Design.IWindowsFormsEditorService), this);
\r
531 SetPropertyValue(editor.EditValue(new ITypeDescriptorContextImpl(this.property_grid), service_container,property_grid.SelectedGridItem.Value));
\r
535 private void DialogButtonClicked(object sender, EventArgs e)
\r
537 //dialog_form.Location = PointToScreen(new Point(grid_textbox.Location.X,grid_textbox.Location.Y+ROW_HEIGHT));
\r
538 //dropdown_form.Width = grid_textbox.Width;
\r
539 dialog_form.Show();
\r
542 private void HandleScroll(object sender, ScrollEventArgs e)
\r
544 if (e.NewValue <= 0)
\r
547 if (e.NewValue == vbar.Value)return;
\r
549 if (e.NewValue > vbar.Maximum-ClientRectangle.Height/ROW_HEIGHT)
\r
551 e.NewValue = vbar.Maximum-ClientRectangle.Height/ROW_HEIGHT+1;
\r
552 if (e.NewValue == vbar.Value)return;
\r
557 case ScrollEventType.SmallDecrement:
\r
558 XplatUI.ScrollWindow(Handle, 0, ROW_HEIGHT, false);
\r
559 grid_textbox.Top += ROW_HEIGHT;
\r
560 Invalidate(ClientRectangle);
\r
561 //Invalidate(new Rectangle(0,0,ClientRectangle.Width,ROW_HEIGHT));
\r
563 case ScrollEventType.SmallIncrement:
\r
564 XplatUI.ScrollWindow(Handle, 0, -ROW_HEIGHT, false);
\r
565 grid_textbox.Top -= ROW_HEIGHT;
\r
566 Invalidate(ClientRectangle);
\r
567 //Invalidate(new Rectangle(0,ClientRectangle.Bottom-ROW_HEIGHT,ClientRectangle.Width,ROW_HEIGHT));
\r
569 case ScrollEventType.LargeDecrement:
\r
570 XplatUI.ScrollWindow(Handle, 0, ROW_HEIGHT, false);
\r
571 Invalidate(ClientRectangle);
\r
573 case ScrollEventType.LargeIncrement:
\r
574 XplatUI.ScrollWindow(Handle, 0, -ROW_HEIGHT, false);
\r
575 Invalidate(ClientRectangle);
\r
577 case ScrollEventType.ThumbTrack:
\r
578 XplatUI.ScrollWindow(Handle, 0, -(vbar.Value-e.NewValue), false);
\r
579 Invalidate(ClientRectangle);
\r
581 case ScrollEventType.ThumbPosition:
\r
582 Invalidate(ClientRectangle);
\r
588 private void HandleSelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e)
\r
590 // Region not working correctly
\r
591 //Region clip = new Region();
\r
592 //if (property_grid.SelectedGridItem != null)
\r
593 // clip.Union(new Rectangle(0,property_grid.SelectedGridItem.Top, ClientRectangle.Width, ROW_HEIGHT));
\r
594 // clip.Union(new Rectangle(0,property_grid.SelectedGridItem.Top, ClientRectangle.Width, ROW_HEIGHT));
\r
596 if (e.NewSelection.PropertyDescriptor != null)
\r
598 grid_textbox.Text = e.NewSelection.PropertyDescriptor.Converter.ConvertToString(e.NewSelection.Value);
\r
599 if (e.NewSelection.PropertyDescriptor.CanResetValue(property_grid.SelectedObject))
\r
600 grid_textbox.Font = new Font(this.Font, FontStyle.Bold);
\r
602 grid_textbox.Font = this.Font;
\r
605 Invalidate(/*clip*/this.ClientRectangle);
\r
609 private void HandlePropertyValueChanged(object s, PropertyValueChangedEventArgs e)
\r
611 if (e.ChangedItem.PropertyDescriptor != null)
\r
613 grid_textbox.Text = e.ChangedItem.PropertyDescriptor.Converter.ConvertToString(e.ChangedItem.Value);
\r
614 if (e.ChangedItem.PropertyDescriptor.CanResetValue(property_grid.SelectedObject))
\r
615 grid_textbox.Font = new Font(this.Font, FontStyle.Bold);
\r
617 grid_textbox.Font = this.Font;
\r
621 #region IWindowsFormsEditorService Members
\r
623 public void CloseDropDown()
\r
625 dropdown_form_showing = false;
\r
626 dropdown_form.Hide();
\r
629 public void DropDownControl(Control control)
\r
631 //dropdown_form.FormBorderStyle = FormBorderStyle.None;
\r
632 dropdown_form.Deactivate +=new EventHandler(dropdown_form_Deactivate);
\r
633 dropdown_form.Size = control.Size;
\r
634 control.Dock = DockStyle.Fill;
\r
635 dropdown_form.Controls.Clear();
\r
636 dropdown_form.Controls.Add(control);
\r
637 dropdown_form.Location = PointToScreen(new Point(grid_textbox.Location.X,grid_textbox.Location.Y+ROW_HEIGHT));
\r
638 dropdown_form.Width = grid_textbox.Width;
\r
640 dropdown_form_showing = true;
\r
641 dropdown_form.Show();
\r
642 System.Windows.Forms.MSG msg = new MSG();
\r
643 while (XplatUI.GetMessage(ref msg, IntPtr.Zero, 0, 0) && dropdown_form_showing)
\r
645 XplatUI.TranslateMessage(ref msg);
\r
646 XplatUI.DispatchMessage(ref msg);
\r
650 public System.Windows.Forms.DialogResult ShowDialog(Form dialog)
\r
652 return dialog.ShowDialog(this);
\r
657 #region DropDownForm Class
\r
658 #endregion DropDownForm Class
\r
660 #region Internal Classes
\r
661 internal class ITypeDescriptorContextImpl : System.ComponentModel.ITypeDescriptorContext
\r
663 private PropertyGrid property_grid;
\r
664 public ITypeDescriptorContextImpl(PropertyGrid propertyGrid)
\r
666 property_grid = propertyGrid;
\r
668 #region ITypeDescriptorContext Members
\r
670 public void OnComponentChanged()
\r
672 // TODO: Add SystemComp.OnComponentChanged implementation
\r
675 public IContainer Container
\r
679 return property_grid as IContainer;
\r
683 public bool OnComponentChanging()
\r
685 // TODO: Add SystemComp.OnComponentChanging implementation
\r
689 public object Instance
\r
693 return property_grid.SelectedGridItem.Value;
\r
697 public PropertyDescriptor PropertyDescriptor
\r
701 return property_grid.SelectedGridItem.PropertyDescriptor;
\r
707 #region IServiceProvider Members
\r
709 public object GetService(Type serviceType)
\r
711 // TODO: Add SystemComp.GetService implementation
\r
724 internal class PropertyGridDropDown : Form
726 protected override CreateParams CreateParams
730 CreateParams cp = base.CreateParams;
731 cp.Style = unchecked ((int)(WindowStyles.WS_POPUP | WindowStyles.WS_VISIBLE | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_CLIPCHILDREN));
732 cp.ExStyle |= (int)(WindowStyles.WS_EX_TOOLWINDOW | WindowStyles.WS_EX_TOPMOST);