首页 \ 问答 \ 在listBox中着色重复的项目(Tinting repeated items in listBox)

在listBox中着色重复的项目(Tinting repeated items in listBox)

假设我有一个填充了项目的listBox,但其中一些是重复的。 但是,我不想简单地删除它们,而是想用颜色突出显示它们。

这是我到目前为止的代码:

void btnAddSelectedItem_Click(object sender, EventArgs e)
{
    List<ListItem> itemsToAdd= new List<ListItem>();

    foreach (ListItem listItem in lstbxFromUserProjects.Items)
    {
        if (listItem.Selected)
            itemsToAdd.Add(listItem);
    }

    foreach (ListItem listItem in itemsToAdd)
    {

        if (!lstBoxToUserProjects.Items.Contains(listItem)) 
        {
            lstBoxToUserProjects.Items.Add(listItem);
        }
    }
}

我怎样才能改进这个以添加项目,但为它们着色? 所有相同的颜色,但所有重复必须着色,其他一切都不需要着色。

如果我不够清楚,我很抱歉,如果有人觉得有必要,我可以更好地解释。

伙计们,提前谢谢。


Let's say I have a listBox filled with items, but some of them are duplicate. I DO NOT want, however, to simply delete them, instead I want to highlight them with a color.

Here's the code I have so far:

void btnAddSelectedItem_Click(object sender, EventArgs e)
{
    List<ListItem> itemsToAdd= new List<ListItem>();

    foreach (ListItem listItem in lstbxFromUserProjects.Items)
    {
        if (listItem.Selected)
            itemsToAdd.Add(listItem);
    }

    foreach (ListItem listItem in itemsToAdd)
    {

        if (!lstBoxToUserProjects.Items.Contains(listItem)) 
        {
            lstBoxToUserProjects.Items.Add(listItem);
        }
    }
}

How could I improve this to add the items, but color them? All the same color, but all duplicates must be colored, everything else needs no coloring.

I'm sorry if I'm not being clear enough, I can explain it better if anyone feels the need to.

Thanks in advance, folks.


原文:https://stackoverflow.com/questions/21358758
更新时间:2019-06-21 03:06

最满意答案

您可以尝试以这种方式实现:

首先,在ListItem类中添加属性以指示项是否重复:

public class ListItem
{
    ....
    public bool IsDuplicate { get; set; }
    ....
}

其次,在buttonAddSelectedItem中单击,标记重复项:

....
foreach (ListItem listItem in itemsToAdd)
{
    if (lstBoxToUserProjects.Items.Contains(listItem)) listItem.IsDuplicate = true;
    lstBoxToUserProjects.Items.Add(listItem);
}
....

然后,您可以根据IsDuplcate属性正确设置背景颜色。 例如使用样式触发器:

<ListBox>
    ....
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Style.Triggers>
                <Trigger Property="IsDuplicate" Value="True" >
                    <Setter Property="Background" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
    ....
</ListBox>

You can try to achieve that this way :

First, add property in ListItem class to indicate whether an item is duplicate :

public class ListItem
{
    ....
    public bool IsDuplicate { get; set; }
    ....
}

Second, in buttonAddSelectedItem click, mark duplicate item :

....
foreach (ListItem listItem in itemsToAdd)
{
    if (lstBoxToUserProjects.Items.Contains(listItem)) listItem.IsDuplicate = true;
    lstBoxToUserProjects.Items.Add(listItem);
}
....

Then you can set background color properly based on IsDuplcate property. For example using style trigger :

<ListBox>
    ....
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Style.Triggers>
                <Trigger Property="IsDuplicate" Value="True" >
                    <Setter Property="Background" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
    ....
</ListBox>
2014-01-26

相关问答

更多

想要在listbox.items.clear()上执行代码(Want to execute code on listbox.items.clear())

据我所知,没有任何事件是由ListBox.Items.Clear的直接结果引发的。 您可以实现自己的行为: public class CustomListBox : ListBox { public event EventHandler ItemsCleared; public void ClearItems() { Items.Clear(); if(this.ItemsCleared != null) { ...

vb.net中listbox单击事件的问题

Private Sub ListBox1MouseDown(sender As Object, e As MouseEventArgs) _ Handles ListBox1.MouseDown If e.Button = MouseButtons.Right Then Dim h As Integer = ListBox1.ItemHeight Dim rect As New Rectangle(0, 0, ListBox1.ClientSize.Width, h) For i As Integ ...

在WPF自定义控件中ListBox而不是ItemsPresenter?(ListBox instead of ItemsPresenter in WPF Custom Control?)

我想你可以添加一些测试来查看模板中的ItemsControl是否是ListBox。 例如: var itemsControl = this.Template.FindName("PART_Items", this); if(itemsControl is ListBox) { // wire additional event handler here } I think you could add some test to see if the ItemsControl in the tem ...

Xamly确定一个ListBox.Items.Count> 0(Xamly determine if a ListBox.Items.Count > 0)

ListBox包含一个可以绑定到的HasItems属性。 所以你可以这样做: <BooleanToVisibilityConverter x:Key="BooleanToVisibility" /> ... <ListBox Visibility="{Binding HasItems, RelativeSource={RelativeSource Self}, Converter=BooleanToVisibility}" /> 或者作为触发器,所以你不需要 ...

WPF ListBox虚拟化将显示的项目拧紧(WPF ListBox virtualization screws up displayed items)

我花了更多的时间尝试这个比我应该有的,并且无法实现它的工作。 我理解这里发生了什么,但在纯XAML中,我很难找出如何解决问题。 我想我看到如何解决这个问题,但它涉及到一个转换器。 警告:当我解释我的结论时,事情会变得复杂。 根本的问题来自这样一个事实,即控件的宽度伸展到其容器的宽度。 虚拟化启用时,宽度不会更改。 在ListBox的底层ScrollViewer中, ViewportWidth属性对应于您看到的宽度。 当另一个控件进一步伸展(选择它)时, ViewportWidth仍然相同,但Ext ...

如何在C#WinForms中刷新ListBox的DataSource(How to refresh DataSource of a ListBox)

listbox1.DataSource属性查找值更改,但通过始终分配相同的列表,值不会真正改变。 您可以使用BindingList<T>而不是List<T>来自动识别添加的新项目。 您的ShowData()方法在启动时必须调用一次。 public partial class MyForm:Form { public MyForm(){ InitializeComponent(); ShowData(); } BindingList<MyD ...

String [] - ListBox中的数组(String[]-Array in ListBox)

随着提供的文本文件,这是你需要的。 只需使用文本文件对其进行测试即可运行,完整代码为: private void button1_Click(object sender, EventArgs e) { OpenFileDialog op = new OpenFileDialog(); if (op.ShowDialog() == DialogResult.OK) { textBox1.Text = op.Fil ...

当滚动到达Windows手机的末尾时,向ListBox添加项目?(Add Items to ListBox when scroll reaches the end in Windows phone?)

我想通过“实现这个”你的意思是检测ListBox是否在最后的可能性。 在这种情况下,这应该有所帮助。 您首先需要访问ScrollViewer控件才能查看用户是否滚动,以及当前位置是什么。 如果我的页面被称为ListContent,那么这段代码应该给你一个良好的开端: public partial class ListContent { private ScrollViewer scrollViewer; public ListContent() { Ini ...

相关文章

更多

最新问答

更多
  • Android宽度:100%修复(网站接管问题)(Android width:100% fix (website takeover issue))
  • C ++函数/方法设计的良好实践(Good practice in C++ function/method design)
  • 计算其他表中不存在的所有记录 - SQL查询(Count all records that does not exist to other table - SQL Query)
  • 为什么我要用JPA共享ID?(Why do I get shared Ids with JPA?)
  • asp.net - 如何显示来自html格式的数据行的字段(asp.net - how to display a field from data row that is in html format)
  • 我们如何使用ActiveRecord从连接表中删除行?(How can we delete rows from a join table by using ActiveRecord?)
  • ng-class搞乱了类的顺序(ng-class messing with the order of classes)
  • oracle 12g无效数字错误(oracle 12g invalid number error)
  • 更改ng-src值onclick(Change ng-src value onclick)
  • 如何在android中自动添加自定义依赖项以创建新项目?(How to add custom dependencies automatically in android for ever a new project is created?)
  • datetime函数在PHP中(datetime function in php)
  • 在javascript中获取会话数组的值(in javascript get the value of a session array)
  • 如何在UTF8中编译LaTeX?(How can I compile LaTeX in UTF8? [closed])
  • Rspec:“array.should == another_array”,但不用担心订单(Rspec: “array.should == another_array” but without concern for order)
  • Logcat错误:无法在android片段中加载视图(Logcat error: unable to load view in android fragments)
  • JavaFX的。(JavaFX. Adding items to the list in different threads is not working)
  • 从GDATA日历资源迁移到Google Calendar Resource api(Migrate from GDATA calendar resource to Google Calendar Resource api)
  • SSRS 2008 - 以零情景处理分割(SSRS 2008 - Dealing with division by zero scenarios)
  • 我如何以编程方式添加一个listView列标题的点击事件(How can I add a listView column header a click event programmatically)
  • Wxpython:无法检索有关列表控件项XXX的信息(Wxpython: Couldn't retrieve information about list control item XXX)
  • 使用Tortoise SVN在SVN存储库中移动目录(Move Directory across SVN repository using Tortoise SVN)
  • 天蓝色服务结构集群中的web api无状态服务是否在一段时间不活动后进入休眠状态?(Do web api stateless services in azure service fabric cluster go to sleep after a period of inactivity?)
  • 我可以设置intelliJ来突出显示PHP编码风格吗?(Can I set intelliJ to highlight php coding style?)
  • 用javafx创建一个Truetype字体文件(Creating a Truetype Font file with javafx)
  • Spring ftp配置错误(Spring ftp configuration is wrong)
  • 使用gsub去除多个字符(Using gsub to strip multiple characters)
  • 续订推送证书并保持当前的App Store App正常工作(Renew Push certificate and keep current App Store App working)
  • js:ES5和ES6之间关于'this'关键字用法的一个令人困惑的观点(js: one confusing point about 'this' keyword usage between ES5 and ES6)
  • window.onload vs $(document).ready()(window.onload vs $(document).ready())
  • 在Swift中,如何声明一个符合一个或多个协议的特定类型的变量?(In Swift, how can I declare a variable of a specific type that conforms to one or more protocols?)