Link to home
Start Free TrialLog in
Avatar of esemmoc
esemmoc

asked on

Change listbox row thickness

Is there a way to change the thickness of the lines that show in a listbox control?  I want to make them lighter.

Thanks.
Avatar of Naman Goel
Naman Goel
Flag of India image

You can use drawitem event for this, set DrawMode property to OwnerDrawFixed and handle DrawItem event.

using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        private ListBox listBox1;
    
        public Form1()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // listBox1
            // 
            this.listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Items.AddRange(new object[] {
            "abcd",
            "XYZL",
            "LMNO",
            "IPQR"});
            this.listBox1.Location = new System.Drawing.Point(42, 12);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(173, 199);
            this.listBox1.TabIndex = 0;
            this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);
            // 
            // Form1
            // 
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.listBox1);
            this.Name = "Form1";
            this.ResumeLayout(false);

        }

        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), listBox1.Font, new SolidBrush(listBox1.ForeColor), new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width -2 , e.Bounds.Height - 2));
            e.DrawFocusRectangle();
        }
    }
}

Open in new window

try it out whether this inline css helps u

<select style="width: 100px;"></select>

Open in new window

Avatar of esemmoc
esemmoc

ASKER

I am using vb.net and tried the below solution but it doesn't seem to change the display.

by: Medo3337Posted on 2013-01-26 at 05:48:08ID: 38822094
Check out this link:
http://stackoverflow.com/questions/5663735/draw-listbox-item-properly-vb-net-2005

e.Graphics.DrawRectangle(myPen, e.Bounds.X, e.Bounds.Y, e.Bounds.Width-1,e.Bounds.Height)

My code:

e.Graphics.DrawRectangle(myPen, e.Bounds.X, e.Bounds.Y, e.Bounds.Width-1,e.Bounds.Height)

 e.Graphics.DrawString(lstShipping.Items(e.Index).ToString, txtfnt, txtBrush, R)

On further thought, is it possible to remove the lines completely, e.g. go from a "ruled" listbox to an "unruled" listbox?
ASKER CERTIFIED SOLUTION
Avatar of Naman Goel
Naman Goel
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of esemmoc

ASKER

Great.  I used e.Graphics.DrawRectangle(Pens.LightGray, e.Bounds) to "soften" the lines displayed.   To completely remove the lines (an affect I tried but didn't like) just make the "Pens.xxxx" the same color as the color in the e.Graphics.FillRectangle statement.

Thanks.