2016-04-08 12 views
1

文字列を介してコントロールを検索し、そのコントロールをクリックするカスタム拡張メソッドがあります。私はブレークポイントを設定しており、それはif (c is ToolStripMenuItem)に行き着いています誰が私が間違っているのか分かりませんか?これはWinFormsにあります。文字列からコントロールを見つけることができません

private void PerformClickfromString() 
    { 
     string item = File.ReadAllText(@"C:\controltest.txt"); 

     foreach (var c in this.Controls) 
     { 
      if (c is ToolStripMenuItem) 
      { 
       var x = (ToolStripMenuItem)c; 

       if (x.Name == item) 
       { 
        x.PerformClick(); 
       } 
      } 
     } 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     PerformClickfromString(); 
    } 

助けていただければ幸いです。

+0

内部チェックの前にすべてのx.Namesを印刷し、どのコントロールに到達したかを確認します。 – TaW

答えて

1

を使用する必要があります。ここに例があります。 List<ToolStripMenuItem>のすべてのアイテムと検索された名前のチェックを収集します。電話の署名にその文字列を追加しました。:

+0

説明と例をありがとう!完璧に動作します。 – EyeSeeSharp

1

ToolStripMenuItemが制御みなされていない、あなたの代わりにあなたが再帰的な検索を必要とするすべてのネストされたアイテムを見つけるにはそのコンテナ

if(c is MenuStrip) 
{ 
    foreach(ToolStripMenuItem tsItem in ((MenuStrip)c).Items) 
    { 
     if (tsItem.Name == item) 
     { 
      tsItem.PerformClick(); 
     } 
    } 
} 
+0

これを試してみると、このエラーが表示されます:foreach文がタイプの変数で動作できません... 'GetEnumerator'のパブリック定義が含まれていません – EyeSeeSharp

+0

新しい編集を試してください –

+0

'foreach文はSystem.Windows型の変数では動作しません。 'System.Windows.Forms.MenuStrip'に 'GetEnumerator'のパブリック定義が含まれていないため、Forms.MenuStrip 'が表示されます – EyeSeeSharp

関連する問題