2011-09-28 18 views
0

OKファイルメニューの動的フォームを作成する文字列(実際にはファイル名)のリストがあります。実行時にストリップメニューに追加

だから、(どのように私は2つの1までの行を削除ラップすることができますか?ボーナス質問に対して)

List<string> test_ = populate.Directorylist(); 

     foreach (var file_ in test_) 
     { 
      int len_ = file_.Length; 
      string filename_ = file_.Remove(0, 8); 
      filename_ = filename_.Remove(filename_.Length - 4).Trim(); 


      ToolStripItem subItem = new ToolStripMenuItem(filename_); 
      subItem.Click += new EventHandler(populate.openconfig(file_)); //this is my problem line 
      templatesToolStripMenuItem.DropDownItems.Add(subItem); 

だから、単にサイクルを、ファイル名、ディレクトリ文字列やファイルsufixの最初のコードストリップの私のリストを取って

リストを介して "templatesToolStripMenuItem"にアイテムを追加します。

しかし、ユーザーがアイテムをクリックすると、file_ varibleがpopulate.openconfigメソッドに送信されるというイベントを追加する必要があります。

アイテムを追加すると問題なく動作しますが、どうすればイベント処理を追加できますか?

私は元の配列の完全なファイル名を検索し、その方法でそれをフォローするデフォルトの方法に送信することができたと思います。しかし、確かに私はメニューバーに項目を追加するとこれを行うことができます。

アーロン

はそうです、最後に私は

subItem.tag = File_ 
.... 

then have the event handle to 

void subItem_Click (object sender, EventArgs e) //open files from menu 
     { 
      ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender; 
      string filename_ = toolstripItem.Tag.ToString(); //use the tag field 
      populate.openconfig(filename_); 
      populate.Split(_arrayLists); //pass read varible dictonary to populate class to further splitting in to sections. 
      Populatetitle();//Next we need to populate the Titles fields and datagrid view that users will enter in the Values 
     } 

を追加し、ちょうど私がもう少しそれを整理することができますどのように見ていただき、ありがとうございます:)ため

乾杯みんな助けて、あなたが猫を肌にすることができる方法を愛してください:)

+0

ホープPathクラスはOK、あなたのボーナスの質問http://msdn.microsoft.com/en-us/library/system.io.path_methods.aspx – CharithJ

答えて

1
List<string> test_ = populate.Directorylist(); 

     foreach (var file_ in test_) 
     { 
      int len_ = file_.Length; 
      string FullFilename_ = file_.Remove(0, 8); 
      string filename_ = FullFilename_.Remove(filename_.Length - 4).Trim();  

      ToolStripItem subItem = new ToolStripMenuItem(filename_); 
      subItem.Tag = FullFilename; 
      subItem.Click += new EventHandler(populate.openconfig(file_)); //this is my problem line 
      templatesToolStripMenuItem.DropDownItems.Add(subItem); 

次に、イベントハンドラからタグプロパティにアクセスできます。

void subItem_Click (object sender, EventArgs e) 
{ 
     ToolStripMenuItem toolstripItem = sender as ToolStripMenuItem; 

     if (toolstripItem != null && toolstripItem.Tag != null) 
     { 
      yourObject.openconfig(toolstripItem.Tag.ToString)) 
     } 
} 

もう1つのことは、ファイルパス操作のためにPathクラスを使用することです。 GetFileName、GetFileNameWithoutExtensionなどへのメソッドの束...

string filePath = "C:\diectory\name.txt"; 
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath); 
+0

あなたの担当者と一緒に私がtogather hased持っていた同じソリューションsugestesいくつかを見てうれしい:)そして、パスのクラスは、そのヒントのために完全に感謝します。 – DevilWAH

1

もし私がアンダーソこれを正しく実行するには、おそらくこのopenconfigメソッドを使用して、テキストが何であってもそれに応答できるようにする必要があります。

イベントハンドラとして渡すメソッドは、void MethodName(オブジェクト送信者、EventArgs e)の形式である必要があります。したがって、文字列を直接渡すことはできません。

ただし、イベントハンドラのメッセージが表示されたら、関連するメッセージを呼び出すことができます。例えば。

subItem.Click += new EventHandler(subItem_Click) 
... 
void subItem_Click (object sender, EventArgs e) 
{ 
     ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender; 
     yourObject.openconfig(toolstripItem.Text) 
} 

オブジェクトがそのスコープで使用できない場合は、オブジェクトにイベントハンドラを配置して同じことを行うことができます。

+0

に答えるがあります。だから私はどのように私はfile_ = "diectory \ name.txt" filename_ = "名前"中にコードで行う必要があると思っていたと思っていた。現在の項目のテキストは「名前」なので、このメソッドでは、一度イベントハンドルで呼び出すと、メソッドのフルファイル名を検索する必要があります。私の好みのためにちょっと複製するように見えました。私はイベントから直接完全なファイル名を渡すことができるかどうか、ちょうど不思議に思った。 – DevilWAH

+0

ラムダ式を使うことはできますが、基本的には同じことをしています: 'item.Click + =(o、e)=> { ToolStripMenuItem a =(ToolStripMenuItem)o; A.openconfig(a.Text); }; ' –

+0

OK単純なタグフィールドを使用し、そのための完全なファイル名を使用します;)。だから答えはありがたいです。ちょうどいいでしょう:) – DevilWAH

関連する問題