如何更改列表框中单词的颜色

我创建了一个带有TextBox的表单,它接受一个单词并搜索一堆句子,看看是否有任何单词包含该单词。之后我必须出现那些句子并突出显示单词。我的计划是创建一个ListBox并添加里面的句子。 我的问题是如何突出这个词(通过改变我想的颜色),以便可以区分。

有更好的方法吗? 我选择了ListBox,所以我可以选择我正在寻找的句子。

编辑

根据@Thorsten Dittmar的指示,创建一个所有者绘制的列表框。

public partial class Form1 : Form { private List _items; public Form1() { InitializeComponent(); _items = new List(); _items.Add("One"); _items.Add("Two"); _items.Add("Three"); listBox1.DataSource = _items; } private void listBox1_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); e.DrawFocusRectangle(); e.Graphics.DrawString(_items[e.Index], new Font(FontFamily.GenericSansSerif, 8, FontStyle.Bold), new SolidBrush(Color.Red), e.Bounds); } } 

我怎么分裂句子才能画出一个单词?

EDIT2

我最终做的方式是制作两个单独的组件,以便完善我的选择。 一个是ListBox其中所有句子都是彩色的,并且可以选择其中一个,另一个是具有单独颜色单词的RichBox ,因为很难用ListBox实现(对我来说至少)。

我完成的方法是使用一个布尔数组,指出每个句子应该着色哪个单词。

 for (int i = 0; i < words.Length; i++) { if (segments[i]) //<-boolean array { rich.SelectionColor = Color.Red; rich.AppendText(words[i] + " "); rich.SelectionColor = Color.Black; } else { rich.AppendText(words[i] + " "); } } 

在Windows窗体中没有标准的方法。 您必须手动呈现列表项(创建所有者绘制的列表框)。 在WPF中,这将是一项简单的任务。

编辑
仅绘制不同字体的字符串的一部分并不是一件容易的事。 我要尝试的是以下内容:

引入告诉你“大胆开始”和“大胆结束”的标记 – 有点像HTML。 我们称它们与HTML中的相同。 所以你的字符串看起来像这样:

 Hello, I am bold text! 

现在我将我的字符串标记为非粗体文本和粗体文本。 我会得到以下部分:

 Hello, I am bold text ! 

现在我使用以下算法绘制每个部分:

  1. 在当前位置x以当前格式绘制字符串
  2. 在步骤1中绘制的字符串的宽度增加位置x
  3. 根据即将到来的字符串更改格式
  4. 转到1

在第2步中,将调用Graphics.MeasureString方法以获取字符串的宽度。

对上述4个样本部分执行此操作将导致:

你好,我是
你好,我很大胆
你好,我是粗体文字
你好,我是大胆的文字

一个简单的TextBox可以设置其Foreground属性,但它适用于TextBox中的整个文本。

如果您希望特定单词“突出显示”,您需要将句子拆分为多个TextBox(脏),或者使用RichTextBox

Giannosfor,为了回应你的评论,你必须使用事件处理程序的参数e来选择你想要高亮的项目( 链接在这里 )。

查看Shadow Wizard的响应,特别是使用e.Index。

 Graphics g = e.Graphics; ... g.FillRectangle(new SolidBrush(color), e.Bounds); 

变量g代表当前项目e的图形部分。 方法FillRectangle允许您更改项目背景的颜色。

编辑1:

我试着像你在下面的评论中所说的那样做,但似乎没有办法只使用ListBox高亮显示字符串的一部分。 对我而言,似乎唯一能够支持RichTextBox的控件。 解决方案可能是以RichTextBoxes列表的forms实现您自己的用户控件。

在@Thorsten Dittmar回答的基础上,我在一个ListBox中开发了你正在寻找的东西。 您可以在https://advancedlistbox.codeplex.com/找到它。