winform控件中的文本中有一个单词粗体

时间:2010-02-17 11:55:16

标签: c# .net winforms formatting listbox

我想要一些方法来使一个给定的单词变为粗体(列表框中每个项目的前两个字符),而不是其他任何东西,如下所示:

01 汽车
02 房子
03 市场

至于这三个,作为列表框控件中的项目,总是前两个字符,其余的不应该是粗体。

有没有可行的方法呢?

数据:

  • Visual Studio 2008
  • .NET 3.5

请求:

    private void lstMaster_DrawItem(object sender, DrawItemEventArgs e)
    {
//TEST
        e.DrawBackground();
        Brush myBrush = Brushes.Black;
        Pen pen = new Pen(myBrush);
        e.Graphics.DrawRectangle(pen, 0, 0, 10, 10); //BREAKPOINT HERE

        e.Graphics.DrawString("aaa" + lstMaster.Items[e.Index].ToString(),
e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);

        e.DrawFocusRectangle();

    }

它只是保持相同,没有矩形,没有“AAA”,或方形没有断点到达...

2 个答案:

答案 0 :(得分:6)

有可能,您需要使用列表框的DrawItem事件,然后您可以在那里绘制您想要的项目:

MSDN上的

DrawItem event

以下是使用不同颜色绘制每个项目的示例:

private void ListBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
  // Draw the background of the ListBox control for each item.
  e.DrawBackground();
  // Define the default color of the brush as black.
  Brush myBrush = Brushes.Black;

  // Determine the color of the brush to draw each item based 
  // on the index of the item to draw.
  switch (e.Index)
  {
      case 0:
          myBrush = Brushes.Red;
          break;
      case 1:
          myBrush = Brushes.Orange;
          break;
      case 2:
          myBrush = Brushes.Purple;
          break;
  }

  // Draw the current item text based on the current Font 
  // and the custom brush settings.
  e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(), 
    e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
  // If the ListBox has focus, draw a focus rectangle around the selected item.
  e.DrawFocusRectangle();
 }

根据文档,您还需要更改列表框的DrawMode属性,以便激活事件:

  

此事件由所有者绘制的ListBox使用。仅当DrawMode属性设置为DrawMode.OwnerDrawFixed或DrawMode.OwnerDrawVariable时才会引发该事件。您可以使用此事件来执行在ListBox中绘制项目所需的任务。

答案 1 :(得分:0)

我认为您可以使用VS 2008中的HTML标记,例如对于 01 汽车的<b>01</b> car,对于某些文字。我必须检查这是否适用于列表框。