0

おい!

私はここで私の質問と私の状況をよりよく説明しようとします:)

私はListView私のアプリケーションにを持っています、これListViewは出力エラーに使用されるので、それはちょっとエラーログに使用されます。

私のプログラムは主にタイマーで、int値の変化をチェックしています。

エラーが発生したときは、リストに表示したいと思います。問題は、エラーが3〜4回、場合によってはそれ以上追加されることです。

if(exist.in.listbox)をチェックすると、同じエラーを2回追加することはできません。私がやりたいのは、特定のメッセージ/エラーを削除し、それが「修正された」とき、またはシステムへの脅威がなくなったときに削除することです。コードスニペットは次のとおりです。

                if (Convert.ToInt32(x) == 1 && Convert.ToInt32(y) == 1)
                {

                    found = false;
                    ListViewItem item = new ListViewItem(message);
                    foreach (ListViewItem z in listView1.Items)
                    {
                        if (z.Text == message)
                        { found = true; }
                    }

                    if (found == false)
                    {
                        item.SubItems.Add(now.ToString());
                        listView1.Items.Add(item);
                        listView1.EnsureVisible(item.Index);
                    }
                }
                else
                {
                    foreach (ListViewItem z in listView1.Items)
                    {
                        if (z.Text == message)
                        {
                           //no longer a threat, delete the message added aboue
                        }
                    }
                }

これについては何も見つかりません。「選択した場合->行を削除」のみ

これは視覚的なエラーウィンドウのように考えることができます。赤いエラーが発生すると、コードを修正できます。

4

1 に答える 1

2

アイテムを追加するときと同じアプローチに従う必要があります。まず、削除を実行するかどうかを確認してから、アイテムを削除します。

これがうまくいかない場合 (タイマーの反復ごとにリストを 2 回反復する)、「追加/削除」ロジックを ListView から移動することもできます (つまり、検索を高速化するために Dictionary を保持することもできます)。

void DeleteIfNecessary(string message)
{
    ListViewItem listViewItem = FindListViewItemForMessage(message);
    if (listViewItem == null)
    {
        // item doesn't exist
        return;
    }

    this.listView1.Items.Remove(listViewItem);
}

private ListViewItem FindListViewItemForMessage(string s)
{
    foreach (ListViewItem lvi in this.listView1.Items)
    {
        if (StringComparer.OrdinalIgnoreCase.Compare(lvi.Text, s) == 0)
        {
            return lvi;
        }
    }

    return null;
}
于 2012-04-17T12:23:25.793 に答える