2013-03-28 13 views
7

私はMDI Windows Formsアプリケーションで作業しています。私の親のフォームはToolStripのメニューといくつかのToolStripDropDownButtonsです。 ToolStripDropDownButtonVisibleプロパティまたはそれに応じてユーザの許可に応じてToolStripItems(サブボタン)のプロパティを変更したいとします。Windowsフォーム - ToolStripItem Visibleプロパティは常にfalseに設定されています

private void SetToolStripDropDownVisibility(ToolStripDropDownButton mainBtn, params ToolStripItem[] item) 
{ 
    mainBtn.Visible = false; 
    foreach (ToolStripItem tempItem in item) 
    { 
     tempItem.Visible = true; 
    } 
} 

私は最初の引数ToolStripDropDownButtonとのparamsリストなど、他のすべての「サブボタン」と渡している:ここで

は、私がこれを管理するために書いてきた方法の一部です。しかし、 foreach (ToolStripItem tempItem in item)の部分でデバッグモードに入ると、 tempItem Visibleプロパティはfalseとマークされます。ただし、デザイナではこのプロパティはtrueに設定されています。あなたは、値を実際に tempItem.Visible = true;に変更しようと明示的に試みることさえわかりますが、この行が何もしていないかのようです。 Visibleの値は falseのままで、変更できません。

これはメソッドのほんの始まりであり、ToolStripの項目で混乱する可能性のある他のコードについては考えられません。 mainBtn.Visibleの値をtrueまたはfalseに変更しようとしましたが、おそらく接続がありますが、これは問題ではないようです。なぜこのようなことが起こっているのか、どうして私はVisibleの価値を変更できないのですか?

  List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>(); 
      foreach (ToolStripMenuItem toolItem in menuStrip1.Items) 
      { 
       allItems.Add(toolItem); 
       //add sub items 
       allItems.AddRange(GetItems(toolItem)); 
      } 
      foreach (ToolStripMenuItem item in allItems) 
      { 
       //make your toolstripMenuItem invisible or whatever you want to do with it. 
      } 
      allItems.Clear(); 

変更menuStrip1あなたtoolstripを呼ぶものは何でも:

+0

"item"を "items"に変更しても害はなく、可読性が向上します。 – David

答えて

17

解決策は簡単ですが、それほど明白ではありません。我々はToolSTripDropDownButtonの一部であるToolStripItemsと一緒に作業しなければならないとき、私たちは通常のボタンでそれを解決するために使用した方法で可視性の問題を解決するには、Availableプロパティを使用する必要があります。この目的のために設計されています。誰かがこれを読んでこの問題に対処する時間を節約してくれることを願っています!

+5

それはどのように動作しません。 AvailableとVisibleは*ほとんど*同一のプロパティであり、設定すると他のプロパティを変更します。しかし、1つの違いがある場合、Visibleプロパティはユーザーがアイテムを見ることができるときにのみtrueを返します。フォームのコンストラクタやLoadイベントの中で決して実行されないフォームはまだ表示されません。だからこそ、本当に大きな問題はなく、デバッガがあなたに語ったことで混乱しただけです。 –

+0

問題は、実行時に、表示されているものとその権限のために特定のユーザーでないものを判断する方法でした。 'ToolStripItem'が利用可能である場合、' DropDownButton'はユーザにとって利用可能な 'ToolStripItem'が存在しない場合にも見えるはずです。 'Visible'プロパティを使用しても、ここでは役に立ちません。なぜなら、常にfalseを返し、私の' DropDownButton'は常に隠されているからです。しかし、もし私が 'Available'プロパティを設定すると、すべてがOKです。 – Leron

+1

あなたの解決策が私の問題を解決した – Henry

1

以下はすべてtoolstripitemsmenuStrip1内の谷行きます。

+0

問題は、 'ToolStrip'アイテムのリストを作ることができないということではありません。問題は、' Visible'がfalseに設定されているため、trueに変更する方法が見つからないということです。 'item.Visible = true'はアイテムを非表示にし、デバッグモードでは、この行の後にvisibleの値をtrueに設定していてもfalseになります。 – Leron

+0

それは奇妙です、コードは私のために働いています... – Max

関連する問題