8

私はMDI Windows Formsアプリケーションに取り組んでいます。私の親フォームにはToolStripメニューといくつかがありますToolStripDropDownButtonsVisibleユーザーの許可に応じて、またはのプロパティToolStripDropDownButtonをいくつかのToolStripItems(サブボタン)に変更したいと思います。

これを管理するために私が書いたメソッドの一部を次に示します。

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)tempItemVisible プロパティが false としてマークされます。ただし、デザイナーでは、このプロパティは true に設定されています。明示的に値を true に変更しようとしていることがわかりますがtempItem.Visible = true;、この行は何もしていないように見えます。の価値はVisibleそのままfalseで、変えることはできません。

ToolStripこれはメソッドの始まりにすぎず、アイテムを台無しにする可能性のある他のコードは考えられません。の値mainBtn.Visibleを true または false に変更しようとしましたが、関係があるのではないかと考えましたが、これは問題ではないようです。なぜこれが起こっているのか、なぜVisible値を変更できないのか、そしてもちろんそれを行う方法はありません。

4

2 に答える 2

23

解決策は簡単ですが、明らかではありません。通常のボタンで解決するために使用した方法で可視性の問題を解決し、解決する必要がある場合は、プロパティを使用する必要がToolStripItemsあります。これはまさにこの目的のために設計されています。これを読んで、誰かがこの問題に対処する時間を減らしてくれることを願っています!ToolSTripDropDownButtonAvailable

于 2013-04-01T11:22:51.253 に答える
1

toolstripitems以下は、内ですべて通過しますmenuStrip1

           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

于 2013-03-28T14:02:10.373 に答える