private void DrawReversibleFrame(IntPtr handle, Rectangle rectangle, Color backColor) { //Bug # 71547 <subhag> to make drag rect visible if any the dimensions of the control are 0 if (rectangle.Width == 0) { rectangle.Width = 5; } if (rectangle.Height == 0) { rectangle.Height = 5; } // Copy of ControlPaint.DrawReversibleFrame, see VSWhidbey 581670 // If ControlPaint ever gets overrloaded, we should replace the code below by calling it: // ControlPaint.DrawReversibleFrame(handle, rectangle, backColor, FrameStyle.Thick); // ------ Duplicate code---------------------------------------------------------- Gdi32.R2 rop2; Color graphicsColor; if (backColor.GetBrightness() < .5) { rop2 = Gdi32.R2.NOTXORPEN; graphicsColor = Color.White; } else { rop2 = Gdi32.R2.XORPEN; graphicsColor = Color.Black; } using var dc = new User32.GetDcScope(handle); using var pen = new Gdi32.ObjectScope(Gdi32.CreatePen(Gdi32.PS.SOLID, 2, ColorTranslator.ToWin32(backColor))); using var rop2Scope = new Gdi32.SetRop2Scope(dc, rop2); using var brushSelection = new Gdi32.SelectObjectScope(dc, Gdi32.GetStockObject(Gdi32.StockObject.NULL_BRUSH)); using var penSelection = new Gdi32.SelectObjectScope(dc, pen); Gdi32.SetBkColor(dc, ColorTranslator.ToWin32(graphicsColor)); Gdi32.Rectangle(dc, rectangle.X, rectangle.Y, rectangle.Right, rectangle.Bottom); // ------ Duplicate code---------------------------------------------------------- }
private void ActivateDropDown() { if (_editor != null) { try { object newValue = _editor.EditValue(TypeDescriptorContext, this, Value); SetValue(newValue); } catch (Exception ex) { ActionPanel.ShowError(string.Format(SR.DesignerActionPanel_ErrorActivatingDropDown, ex.Message)); } } else { ListBox listBox = new ListBox { BorderStyle = BorderStyle.None, IntegralHeight = false, Font = ActionPanel.Font }; listBox.SelectedIndexChanged += new EventHandler(OnListBoxSelectedIndexChanged); listBox.KeyDown += new KeyEventHandler(OnListBoxKeyDown); TypeConverter.StandardValuesCollection standardValues = GetStandardValues(); if (standardValues != null) { foreach (object o in standardValues) { string newItem = PropertyDescriptor.Converter.ConvertToString(TypeDescriptorContext, CultureInfo.CurrentCulture, o); listBox.Items.Add(newItem); if ((o != null) && o.Equals(Value)) { listBox.SelectedItem = newItem; } } } // All measurement code borrowed from WinForms PropertyGridView.cs int maxWidth = 0; // The listbox draws with GDI, not GDI+. So, we use a normal DC here. using (var hdc = new User32.GetDcScope(listBox.Handle)) { using var hFont = new Gdi32.ObjectScope(listBox.Font.ToHFONT()); using var fontSelection = new Gdi32.SelectObjectScope(hdc, hFont); var tm = new Gdi32.TEXTMETRICW(); if (listBox.Items.Count > 0) { foreach (string s in listBox.Items) { var textSize = new Size(); Gdi32.GetTextExtentPoint32W(hdc, s, s.Length, ref textSize); maxWidth = Math.Max(textSize.Width, maxWidth); } } Gdi32.GetTextMetricsW(hdc, ref tm); // border + padding + scrollbar maxWidth += 2 + tm.tmMaxCharWidth + SystemInformation.VerticalScrollBarWidth; listBox.Height = Math.Max(tm.tmHeight + 2, Math.Min(ListBoxMaximumHeight, listBox.PreferredHeight)); listBox.Width = Math.Max(maxWidth, EditRegionSize.Width); _ignoreDropDownValue = false; } try { ShowDropDown(listBox, SystemColors.ControlDark); } finally { listBox.SelectedIndexChanged -= new EventHandler(OnListBoxSelectedIndexChanged); listBox.KeyDown -= new KeyEventHandler(OnListBoxKeyDown); } if (!_ignoreDropDownValue) { if (listBox.SelectedItem != null) { SetValue(listBox.SelectedItem); } } } }