C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: ファイルをポップアップメニュー


(過去ログ 86 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■51122 / inTopicNo.1)  ファイルをポップアップメニュー
  
□投稿者/ abeP (1回)-(2010/06/25(Fri) 15:06:37)

分類:[C#] 

特定のフォルダのファイルをポップアップメニューallfilesの子メニューから呼び出したいです。

string[] files = Directory.GetFiles(@"C:\tmp", "*");
ToolStripitem[] item = new ToolStripitem[files.Length];

for (int i = 1; i < files.Length; i++)	{
string menutitle = Path.GetFileNameWithoutExtension(files[i]);
this.allfilesToolStripitem.DropDownItems.AddRange(
new ToolStripItem[] {item[i]});
item[i].Name = menutitle;
item[i].Text = menutitle;
item[i].Click += new System.EventHandler(item_Click);
}
でよいかと思ったのですが、
allfilesメニューに、登録されません(右向き三角が出ません)。

どう書き換えたらよいでしょう?
添削&アドバイスお願いします。

引用返信 編集キー/
■51127 / inTopicNo.2)  Re[1]: ファイルをポップアップメニュー
□投稿者/ Hongliang (657回)-(2010/06/25(Fri) 16:13:30)
> ToolStripitem[] item = new ToolStripitem[files.Length];
>
> this.allfilesToolStripitem.DropDownItems.AddRange(
> new ToolStripItem[] {item[i]});
何故一つだけしか追加しないのに AddRange なんでしょう? というか事前に ToolStripItem[] item を作ってるんだから、ループで各要素の初期化だけして、最後に一回 item を AddRange すればいいんでは?
あと、item[i] の中身が new された様子がありませんが、大丈夫でしょうか?

> for (int i = 1; i < files.Length; i++) {
本題からは外れますが、0 番目の要素は追加しなくていいんでしょうか?

最後に、そもそもこのコードは実行されていますか? ブレイクポイントとかで確認して下さい。
引用返信 編集キー/
■51133 / inTopicNo.3)  Re[2]: ファイルをポップアップメニュー
□投稿者/ abeP (2回)-(2010/06/25(Fri) 17:03:31)
No51127 (Hongliang さん) に返信

なにぶん初心者なので…。
string[] files = Directory.GetFiles(@"C:\tmp", "*");
ToolStripitem[] item = new ToolStripitem[files.Length];

for (int i = 0; i < files.Length-1; i++)	{
string menutitle = Path.GetFileNameWithoutExtension(files[i]);
item[i].Name = menutitle;
item[i].Text = menutitle;
item[i].Click += new System.EventHandler(item_Click);
}
this.allfilesToolStripitem.DropDownItems.AddRange(
new ToolStripItem[] {item});

最後に1回でよいということで、まずこうしてみました。
これで実行すると、
item[i].Name = menutitle;
の行でエラーになります。

item[i]のnewというところでしょうか?

string[] files = Directory.GetFiles(@"C:\tmp", "*");
ToolStripitem[] item = new ToolStripitem[files.Length];

for (int i = 0; i < files.Length-1; i++)	{
string menutitle = Path.GetFileNameWithoutExtension(files[i]);
ToolStripitem item[i] = new ToolStripitem();
item[i].Name = menutitle;
item[i].Text = menutitle;
item[i].Click += new System.EventHandler(item_Click);
}
this.allfilesToolStripitem.DropDownItems.AddRange(
new ToolStripItem[] {item});

としたところ、
角かっこ [] 付きインデックスを 'System.Windows.Forms.ToolStripMenuItem' 型の式に適用することはできません。
とエラーになっています。
ひとつずつじっさいのコードを教えていただけると助かります。

引用返信 編集キー/
■51146 / inTopicNo.4)  Re[3]: ファイルをポップアップメニュー
□投稿者/ abeP (3回)-(2010/06/25(Fri) 18:03:20)
ぜんぜん違っていたことがわかりました。
string[] files = Directory.GetFiles(@"C:\tmp", "*");

foreach (string file in files){
string menutitle = Path.GetFileNameWithoutExtension(file);
allfilesToolStripMenuItem.DropDownItems.Add(menutitle);
}

でできました。
が、イベントハンドラの登録だけできずにいます。
これをアドバイスお願いします。

引用返信 編集キー/
■51203 / inTopicNo.5)  Re[4]: ファイルをポップアップメニュー
□投稿者/ みきぬ (931回)-(2010/06/27(Sun) 15:35:02)
No51146 (abeP さん) に返信
> string menutitle = Path.GetFileNameWithoutExtension(file);
> allfilesToolStripMenuItem.DropDownItems.Add(menutitle);

string を Add するかわりに ToolStripItem オブジェクトをこしらえて、
そいつの Click イベントハンドラを登録してから Add すればいいんじゃないかな。

引用返信 編集キー/
■51213 / inTopicNo.6)  Re[5]: ファイルをポップアップメニュー
□投稿者/ Azulean (573回)-(2010/06/28(Mon) 00:28:41)
参考までにリンクしておきます。
http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/716ecb6a-ab9e-4ff1-9735-ee9782ef0acd
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -