DOBON.NET DOBON.NETプログラミング掲示板過去ログ

連続DropDownItems.Addで上書きされる

環境/言語:[win7 visual studio 2008 c#]
分類:[.NET]

メニューツールストリップに動的に項目を追加しようとしています。
DropDownItems.Add(アイテム);で複数の項目を追加しようとしますが、
どうやらAddしたものが上書きされているようで、最後の項目しか追加されません。

既にデザインで2つの項目の下に追加していくのですが、この登録済みの2つのアイテムには影響はありません。

なぜ上書きになってしまうのか判らずにいます。

原因がわかりましたらご教授お願いします。


●コード
if (System.IO.File.Exists(ggヒストリーファイル))
{
    XDocument xdロードヒストリー = new XDocument();
    xdロードヒストリー = XDocument.Load(ggヒストリーファイル);
    if (xdロードヒストリー.Element("root").Elements("file").Count() > 0)
    {
        ToolStripMenuItem アイテム = new ToolStripMenuItem();
        int i = 0;
        foreach (XElement xファイル in xdロードヒストリー.Element("root").Elements("file"))
        {
            if (i > INTヒストリーMax - 1) break;

            アイテム.Name = "history" + i;
            アイテム.Text = xファイル.Value;
            tsmiサイト.DropDownItems.Add(アイテム);  
            i++;
        }
    }
}

●読み込んでいるデータ
<?xml version="1.0" encoding="utf-8"?>
<root>
  <file>C:\Users\myname\Desktop\test01</file>
  <file>C:\Users\myname\Desktop\test02</file>
  <file>C:\Users\myname\Desktop\test03</file>
  <file>C:\Users\myname\Desktop\test04</file>
  <file>C:\Users\myname\Desktop\test05</file>
</root>
■No27626に返信(muuuuさんの記事)
> なぜ上書きになってしまうのか判らずにいます。

同じものを書き換えて再度 Add しようとしているからです。
違うものとして作っていきたいのであれば、毎回 new ToolStripMenuItem で新しい ToolStripMenuItem を作り出してください。

今のコードは 1 番目だけ Add し、2 番目以降は Add がすでに実行されているので何もしません。
また、2 番目以降は 1 番目のアイテムの文字列などを書き換えているに過ぎず、結局 1 個しか追加されません。
Azuleanさん、ありがとうございます。

foreach内に ToolStripMenuItem アイテム = new ToolStripMenuItem(); を
設置したらうまくいきました。

ここら辺の動きがまだよくわかっていなくて、良く混乱します。
とっても勉強になりました。

ありがとうございます!!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板