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); 

したがって、リストを循環して、毎回「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
        } 

そして、私がそれをもう少し片付けることができる方法を見ました:)

助けてくれる人たちに乾杯、猫の皮を剥ぐ方法がいくつあるか大好きです:)

4

2 に答える 2

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)
 }

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

于 2011-09-28T22:36:14.197 に答える
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); 

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

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);
于 2011-09-28T22:56:43.300 に答える