2

皆さんが私が求めていることを理解しやすくするために、完全なプロセスを書きます。

1) アプリ起動

2) Button1 が押されます:

-TreeView1 にニュース記事のタイトルを入力します

-最初のノードを変数 1 に追加

3) Button1 が押されます:

- TreeView1 に新しい記事のタイトルを入力します

-最初のノードを変数 2 に追加

- 変数 1 と 2 を比較し、異なる場合はメッセージ ボックスを表示します。それらが同じ場合は、何もしません。

4) Button1 が押されます:

- TreeView1 に新しい記事のタイトルを入力します

-最初のノードを変数 3 に追加

- 変数 2 と 3 を比較し、異なる場合はメッセージ ボックスを表示します。それらが同じ場合は、何もしません。

などなど……。

基本的に、button1 が押されるたびに、最初のノードが新しい変数に格納され、前の変数と比較されます。

だから私の質問は次のとおりです:ボタン1が押されるたびに「最初のノード」を別の変数に保存するにはどうすればよいですか?

よろしくお願いします!

4

2 に答える 2

0

既存のノードをクリアする前。以下に示すように、最初のノードをリストにプッシュします。

private List<TreeNode> previousNodes;

public Form1()
{
    InitializeComponent();

    previousNodes = new List<TreeNode>();

}

private void button1_Click(object sender, EventArgs e)
{
    previousNodes.Add(treeView1.Nodes[0]);
    //Clear out nodes, add new ones
    //Compare by treeView1.Nodes[0].Text == previousNodes.Last().Text
}
于 2013-09-04T22:05:30.993 に答える
0

TreeNode.Tag プロパティを使用することをお勧めします。それがその目的のためです。TreeView にノードを設定するときに、各ノードの Tag プロパティを、それに関連付けられたニュース記事を一意に識別するものに設定します。私は通常、Node が表現しようとしているオブジェクト (この場合はニュース記事) に設定します。

private void LoadNewsArticles()
{
    List<MyNewsArticle> newsArticles = GetNewsArticles();

    foreach(MyNewsArticle a in newsArticles)
    {
        TreeNode node = new TreeNode(a.Title)
        node.Tag = a;
        treeView1.Nodes.Add(node);
    }
}

次に、ノードの値を比較する必要がある場合は、タグを確認するだけです。

private MyNewsArticle _currentTopArticle;

private void button1_Click(object sender EventArgs e)
{
    LoadNewsArticles();

    TreeNode topNode = treeView1.Nodes[0];
    MyNewsArticle topArticle = topNode.Tag as MyNewsArticle;
    if(topArticle.Equals(_currentTopArticle))
    {
        // Do something
    }

    _currentTopArticle = topArticle;
}

あなたの問題はそれ以上の必要性を示していないため、この例は前のトップ記事を追跡しているだけであることに注意してください. 上位の記事の完全な履歴を維持する必要がある場合は、記事のリストを作成し、ロードするたびに最新のトップ ストーリーをプッシュし続ける必要があります。

于 2013-09-04T22:17:27.780 に答える