public FillProps(Fill fill) { InitializeComponent(); // ------------------------------------------------------------------- cbColor.Items.Clear(); cbColor.Items.AddRange(DrawUtils.GetAllColorNames()); // получение всех имён доступных цветов cbColor.Items.Add("Выбор цвета..."); // добавление пункта выбора цвета cbColor.Text = DrawUtils.GetColorNameFromIndex(_lastColorIndex); // ------------------------------------------------------------------- _fill = (Fill)fill.Clone(); // ------------------------------- var index = DrawUtils.ColorToIndex(fill.Color); if (index < 0) { DrawUtils.AddCustomColor(fill.Color); cbColor.Items.Insert(cbColor.Items.Count - 1, "Мой цвет"); index = cbColor.Items.Count - 2; } if (index >= 0) { cbColor.SelectedIndex = index; } // ------------------------------- tbTrasparent.Value = 255 - fill.Alpha; lbTrasparent.Text = String.Format(CultureInfo.InvariantCulture, "{0}", (int)(tbTrasparent.Value / 255.0 * 100.0)) + @" %"; }
private void cbColor_DrawItem(object sender, DrawItemEventArgs e) { var cb = (ComboBox)sender; var g = e.Graphics; var brushColor = DrawUtils.ColorFromIndex(e.Index); // Draw the background of the item. e.DrawBackground(); var largerect = new Rectangle(e.Bounds.X, e.Bounds.Top, e.Bounds.Width - 1, e.Bounds.Height - 1); var colorrect = new Rectangle(4, e.Bounds.Top + 2, e.Bounds.Height - 2, e.Bounds.Height - 5); if (DrawUtils.IsNamedColorIndex(e.Index)) // отрисовка рамки цвета пунктов основеых цветов { using (var brush = new SolidBrush(brushColor)) { g.FillRectangle(brush, colorrect); } g.DrawRectangle(Pens.Black, colorrect); } var textRect = new RectangleF(e.Bounds.X + colorrect.Width + 5, e.Bounds.Y + 1, e.Bounds.Width, e.Bounds.Height); using (var textColor = new SolidBrush(e.ForeColor)) { if (DrawUtils.IsNamedColorIndex(e.Index)) {// отрисовка пунктов основных цветов g.DrawString(DrawUtils.GetColorNameFromIndex(e.Index), cb.Font, textColor, textRect); } else if (DrawUtils.IsCustomColorIndex(e.Index)) // отрисовка пунктов дополнительных цветов { using (var brush = new SolidBrush(brushColor)) { g.FillRectangle(brush, largerect); } using (var pen = new Pen(cb.BackColor)) { g.DrawRectangle(pen, largerect); } } else // отрисовка последнего пункта: Выбор цвета... { g.DrawString(cb.Items[e.Index].ToString(), cb.Font, textColor, largerect); } } // Draw the focus rectangle if the mouse hovers over an item. e.DrawFocusRectangle(); }