title: Change combobox drop down list border color in C#
body: <p>Is it possible to change the border color of a combobox dropdown list in c#?</p>
  
  <p><img src="https://i.stack.imgur.com/TaMDr.jpg" alt="enter image description here"></p>
  
  <p>I want to change the white border to a darker shade to match the dark scheme. I searched through the .net documentation and found the <code>DropDownList.BorderStyle</code> property. However, I'm not sure if this will work. I am using WinForms.</p>
  
  <p>Here is the class I'm using for the combobox:</p>
  
  <pre><code>public class FlattenCombo : ComboBox
  {
      private Brush BorderBrush = new SolidBrush(SystemColors.WindowFrame);
      private Brush ArrowBrush = new SolidBrush(SystemColors.ControlText);
      private Brush DropButtonBrush = new SolidBrush(SystemColors.Control);
  
      private Color _borderColor = Color.Black;
      private ButtonBorderStyle _borderStyle = ButtonBorderStyle.Solid;
      private static int WM_PAINT = 0x000F; 
  
      private Color _ButtonColor = SystemColors.Control;
  
      public Color ButtonColor
      {
          get { return _ButtonColor; }
          set
          {
              _ButtonColor = value;
              DropButtonBrush = new SolidBrush(this.ButtonColor);
              this.Invalidate();
          }
      }
  
      protected override void WndProc(ref Message m)
      {
          base.WndProc(ref m);
  
          switch (m.Msg)
          {
              case 0xf:
                  Graphics g = this.CreateGraphics();
                  Pen p = new Pen(Color.Black);
                  g.FillRectangle(BorderBrush, this.ClientRectangle);
  
                  //Draw the background of the dropdown button
                  Rectangle rect = new Rectangle(this.Width - 17, 0, 17, this.Height);
                  g.FillRectangle(DropButtonBrush, rect);
  
                  //Create the path for the arrow
                  System.Drawing.Drawing2D.GraphicsPath pth = new System.Drawing.Drawing2D.GraphicsPath();
                  PointF TopLeft = new PointF(this.Width - 13, (this.Height - 5) / 2);
                  PointF TopRight = new PointF(this.Width - 6, (this.Height - 5) / 2);
                  PointF Bottom = new PointF(this.Width - 9, (this.Height + 2) / 2);
                  pth.AddLine(TopLeft, TopRight);
                  pth.AddLine(TopRight, Bottom);
  
                  g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  
                  //Determine the arrow's color.
                  if (this.DroppedDown)
                  {
                      ArrowBrush = new SolidBrush(SystemColors.HighlightText);
                  }
                  else
                  {
                      ArrowBrush = new SolidBrush(SystemColors.ControlText);
                  }
  
                  //Draw the arrow
                  g.FillPath(ArrowBrush, pth);
  
                  break;
              default:
                  break;
          }
      }
  
      [Category("Appearance")]
      public Color BorderColor
      {
          get { return _borderColor; }
          set
          {
              _borderColor = value;
              Invalidate(); // causes control to be redrawn
          }
      }
  
      [Category("Appearance")]
      public ButtonBorderStyle BorderStyle
      {
          get { return _borderStyle; }
          set
          {
              _borderStyle = value;
              Invalidate();
          }
      }
  
      protected override void OnLostFocus(System.EventArgs e)
      {
          base.OnLostFocus(e);
          this.Invalidate();
      }
  
      protected override void OnGotFocus(System.EventArgs e)
      {
          base.OnGotFocus(e);
          this.Invalidate();
      }
      protected override void OnResize(EventArgs e)
      {
          base.OnResize(e);
          this.Invalidate();
      }
  }
  </code></pre>