Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 901
  • Last Modified:

creating custom highlight/selection colors with windows from controls in C# and .NET

I am trying to create custom highlight colors for menus and listboxes.  So as the selection movs my colors are used to highlight instead of the system colors.

Thank you for any help you can provide.

I tried this but it all it does is over cover up the highlighted element with th enew color, cannot ready the text anymore:

   private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i = listBox1.SelectedIndex;
            Rectangle rc = listBox1.GetItemRectangle(i);
            SolidBrush myBrush = new SolidBrush(Color.Beige);
            Graphics g = Graphics.FromHwnd(listBox1.Handle);
            g.FillRectangle(myBrush, rc);
        }
0
jongund
Asked:
jongund
  • 5
1 Solution
 
kaylanreilorCommented:
Did you have a look to the Graphics class and its methods to understand what is going on ?... or don't you think that using something else than a SolidBrush could solve the issue ?
0
 
kaylanreilorCommented:
It is probably because the default behavior of the listbox is to draw the text in white when selected.
Perhaps you have to redraw the text as well depending on the colors you choose.
For example if you write the following code to make the color transparent you'll see something:
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i = listBox1.SelectedIndex;
            Rectangle rc = listBox1.GetItemRectangle(i);
            Color customColor = Color.FromArgb(90, Color.Red);
            SolidBrush myBrush = new SolidBrush(customColor);
            Graphics g = Graphics.FromHwnd(listBox1.Handle);
            g.FillRectangle(myBrush, rc);
        }

Open in new window

0
 
kaylanreilorCommented:
OK, I've checked, I was right : depending on the color you choose you have to redraw the string accordingly. The following code gives you an example.
The previous code I posted give you the possibility to add some transparency.
The following MSDN link give you the oportunity to go deeper and create your custom listbox if you want to have more controle on drawing stuffs but it seems that you don't want to go so deep:
http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.objectcollection.aspx
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    int i = listBox1.SelectedIndex;
    Rectangle rc = listBox1.GetItemRectangle(i);
    SolidBrush myBrush = new SolidBrush(Color.Beige);
    Graphics g = Graphics.FromHwnd(listBox1.Handle);
    g.FillRectangle(myBrush, rc);
    g.DrawString(listBox1.Items[i].ToString(), this.Font, Brushes.Black, rc);
}

Open in new window

0
 
kaylanreilorCommented:
Hey, 4 days ago I told you that you just have to add this line of code:
g.DrawString(listBox1.Items[i].ToString(), this.Font, Brushes.Black, rc);
May you at least tell us if you agree with this solution so that other people who may be interested by this issue could know if this working ?
0
 
kaylanreilorCommented:
Dispite my solution works (ID#24346966), jongund didn't take the time to answer. I re-ask him to confirm that. Nevertheless he didn't care.
Since my solution works, I should get the points. After all he got what he needed.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now