えムナウのプログラミングのページ

えムナウ の とどけもの

 Logo えムナウBlog@AILight
えムナウBlog@Wankuma

目次

利用状況

イメージ ギャラリー

カテゴリ

Links
 

inetaj

MSMVPロゴ
MSMVP Visual C# 2005/01-2007/12

ToolStripで作るMenuToolBar

ToolStripは高機能なコントロールですがメニュー代わりに使うには不便です。
そこで一階層ですがメニュー代わりに使えるMenuToolStripを作成しました。

プログラム圧縮ファイル
MdiForm.zip


起動時はこんな画面です。


メニュー1をクリックするとこうなります。

              

 

デザイナでの使い方はToolStripContainer内や単独で配置されたToolStripPanelに、MenuToolStripを配置します。
MenuToolStripにはタイトル部にはMenuToolStripTitleを配置し、各メニューには、ToolStripButtonを配置します。

 

どうやって実現させたかを説明します。

まず、ToolStripを継承したMenuToolStripカスタムコントロールを用意します。
ToolStripButtonを継承したMenuToolStripTitleカスタムコントロールも用意します。

MenuToolStripTitleはToolStripButtonを単に継承してクリックイベントを入れただけです。

MenuToolStripカスタムコントロールにShowSubMenuというメソッドを作成して、
ToolStripItem(ToolStripButtonを想定しています)のVisibleを操作します。
全て閉じた状態にするにはmenuをnullで呼びます。
ひとつのMenuToolStripTitleを有効にして開くにはMenuToolStripTitleを指定します。
あとは、MenuToolStripTitleクリックイベントやMenuToolStripの初回の描画で、
ShowSubMenuを呼んでやるだけです

public void ShowSubMenu(MenuToolStripTitle menu)
{
	bool buttonvisible = (menu != null);
	foreach (ToolStripItem item in this.Items)
	{
		MenuToolStripTitle menutitle = item as MenuToolStripTitle;
		if (menutitle != null)
		{
			if (menu != null )
			{
				if (item.Name == menu.Name)
				{
					buttonvisible = true;
				}
				else
				{
					if (menutitle.Checked)
					{
						menutitle.Checked = false;
					}
					buttonvisible = false;
				}
			}
			else
			{
				buttonvisible = false;
			}
			continue;
		}
		ToolStripButton button = item as ToolStripButton;
		if (button != null)
		{
			button.Visible = buttonvisible;
		}
	}
}