DoboWiki
Top
> .NETプログラミング研究/66 をテンプレートにして作成
.NETプログラミング研究/66 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第66号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第66号 [#k8ab7411]
今更ですが、今回から.NET Framework 2.0の新機能を幾つか紹...
**.NET Tips [#qd352259]
***ToolStrip、ToolStripContainerコントロールとは? [#k22c...
#column(注意){{
この記事の最新版は「[[ToolStripとToolStripContainerコント...
}}
ToolStripは、.NET Framework 2.0で新しく追加されたWindows...
ToolStripコントロールは、ToolStripContainerコントロールと...
また、ToolStripから派生したMenuStripとStatusStripコントロ...
使ってみればすぐに分かるようなつまらない説明は省略し、と...
-[[ToolStrip コントロール (Windows フォーム)>http://msdn2...
***ToolStripとToolStripContainerコントロールの基本的な使...
Microsoft Visual Studio 2005のフォームデザイナを使って、T...
+Windowsアプリケーションのプロジェクトを作成し、フォーム...
+ToolStripContainer1のDockプロパティをFillとします。(ま...
+デフォルトでは、ToolStripContainer1の四辺のすべてにToolS...
+ToolStripコントロールを配置するための場所を空けるために...
+配置したToolStripコントロールをクリックして、ボタンやコ...
このように、VS2005のフォームデザイナを使えば、非常に簡単...
これと同じことをコードで行う方法を次に示します。ここでは...
#code(vbnet){{
Private toolStripContainer1 As ToolStripContainer
Private toolStrip1 As ToolStrip
Private toolStripButton1 As ToolStripButton
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripContainerの作成
toolStripContainer1 = New ToolStripContainer()
'フォームいっぱいに広げる
toolStripContainer1.Dock = DockStyle.Fill
'右端だけドッキングできないようにする
toolStripContainer1.RightToolStripPanelVisible = False
'ToolStripの作成
toolStrip1 = New ToolStrip()
'ToolStripButtonの作成
toolStripButton1 = New ToolStripButton()
'画像と文字列を表示する
toolStripButton1.DisplayStyle = _
ToolStripItemDisplayStyle.ImageAndText
'表示する画像の設定
toolStripButton1.Image = New Bitmap("Save.bmp")
toolStripButton1.ImageTransparentColor = _
System.Drawing.Color.Magenta
'表示する文字列の設定
toolStripButton1.Text = "保存"
'クリックされた時のイベントハンドラ
AddHandler toolStripButton1.Click, _
AddressOf toolStripButton1_Click
'toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1)
'toolStripContainer1の上にtoolStrip1を追加
toolStripContainer1.TopToolStripPanel.Join(toolStrip1)
'または、
'toolStripContainer1.TopToolStripPanel.Controls.Add(t...
'フォームにtoolStripContainer1を追加
Me.Controls.Add(toolStripContainer1)
End Sub
Private Sub toolStripButton1_Click(ByVal sender As Object...
ByVal e As EventArgs)
MessageBox.Show("toolStripButton1が押されたよ")
End Sub
}}
#code(csharp){{
private ToolStripContainer toolStripContainer1;
private ToolStrip toolStrip1;
private ToolStripButton toolStripButton1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripContainerの作成
toolStripContainer1 = new ToolStripContainer();
//フォームいっぱいに広げる
toolStripContainer1.Dock = DockStyle.Fill;
//右端だけドッキングできないようにする
toolStripContainer1.RightToolStripPanelVisible = false;
//ToolStripの作成
toolStrip1 = new ToolStrip();
//ToolStripButtonの作成
toolStripButton1 = new ToolStripButton();
//画像と文字列を表示する
toolStripButton1.DisplayStyle = ToolStripItemDisplayS...
//表示する画像の設定
toolStripButton1.Image = new Bitmap("Save.bmp");
toolStripButton1.ImageTransparentColor = System.Drawi...
//表示する文字列の設定
toolStripButton1.Text = "保存";
//クリックされた時のイベントハンドラ
toolStripButton1.Click += new EventHandler(toolStripB...
//toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1);
//toolStripContainer1の上にtoolStrip1を追加
toolStripContainer1.TopToolStripPanel.Join(toolStrip1);
//または、
//toolStripContainer1.TopToolStripPanel.Controls.Add(...
//フォームにtoolStripContainer1を追加
this.Controls.Add(toolStripContainer1);
}
private void toolStripButton1_Click(object sender, EventA...
{
MessageBox.Show("toolStripButton1が押されたよ");
}
}}
***ToolStripContainerの代わりにToolStripPanelを使う [#n3b...
#column(注意){{
この記事の最新版は「[[ToolStripContainerの代わりにToolStr...
}}
ToolStripContainerコントロールは、上下左右に1つずつ計4つ...
さらにMDIの親フォームでは、ToolStripContainerを使用すると...
ToolStripPanelコントロールは、デフォルトでは、VS2005のツ...
もちろんデザイナを使用せずに、自分でコードを書くことによ...
以下にフォームの上部にToolStripPanelを1つだけ配置した例を...
#code(vbnet){{
Private topToolStripPanel As ToolStripPanel
Private toolStrip1 As ToolStrip
Private toolStripButton1 As ToolStripButton
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripPanelの作成
topToolStripPanel = New ToolStripPanel()
'水平方向にToolStripを並べるようにする
topToolStripPanel.Orientation = Orientation.Horizontal
'上部に配置する
topToolStripPanel.Dock = DockStyle.Top
'ToolStripの作成
toolStrip1 = New ToolStrip()
'ToolStripButtonの作成
toolStripButton1 = New ToolStripButton()
'画像と文字列を表示する
toolStripButton1.DisplayStyle = _
ToolStripItemDisplayStyle.ImageAndText
'表示する画像の設定
toolStripButton1.Image = New Bitmap("Save.bmp")
toolStripButton1.ImageTransparentColor = _
System.Drawing.Color.Magenta
'表示する文字列の設定
toolStripButton1.Text = "保存"
'クリックされた時のイベントハンドラ
AddHandler toolStripButton1.Click, _
AddressOf toolStripButton1_Click
'toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1)
'topToolStripPanelの上にtoolStrip1を追加
topToolStripPanel.Join(toolStrip1)
'フォームにtoolStripContainer1を追加
Me.Controls.Add(topToolStripPanel)
End Sub
Private Sub toolStripButton1_Click(ByVal sender As Object...
ByVal e As EventArgs)
MessageBox.Show("toolStripButton1が押されたよ")
End Sub
}}
#code(csharp){{
private ToolStripPanel topToolStripPanel;
private ToolStrip toolStrip1;
private ToolStripButton toolStripButton1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripPanelの作成
topToolStripPanel = new ToolStripPanel();
//水平方向にToolStripを並べるようにする
topToolStripPanel.Orientation = Orientation.Horizontal;
//上部に配置する
topToolStripPanel.Dock = DockStyle.Top;
//ToolStripの作成
toolStrip1 = new ToolStrip();
//ToolStripButtonの作成
toolStripButton1 = new ToolStripButton();
//画像と文字列を表示する
toolStripButton1.DisplayStyle = ToolStripItemDisplayS...
//表示する画像の設定
toolStripButton1.Image = new Bitmap("Save.bmp");
toolStripButton1.ImageTransparentColor = System.Drawi...
//表示する文字列の設定
toolStripButton1.Text = "保存";
//クリックされた時のイベントハンドラ
toolStripButton1.Click += new EventHandler(toolStripB...
//toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1);
//topToolStripPanelの上にtoolStrip1を追加
topToolStripPanel.Join(toolStrip1);
//フォームにtoolStripContainer1を追加
this.Controls.Add(topToolStripPanel);
}
private void toolStripButton1_Click(object sender, EventA...
{
MessageBox.Show("toolStripButton1が押されたよ");
}
}}
-[[方法 : ToolStripPanel を MDI で使用する>http://msdn2.m...
-[[方法 : ToolStripPanel コントロールを持つ MDI フォーム...
***MenuStripやStatusStripを移動できるようにする [#s772e54c]
#column(注意){{
この記事の最新版は「[[MenuStripやStatusStripを移動できる...
}}
デフォルトでは、MenuStripやStatusStripコントロールにはコ...
このグリップを表示するには、GripStyleプロパティをVisible...
***同じ行にToolStripが2つ並ばないようにする [#xf0214ba]
#column(注意){{
この記事の最新版は「[[同じ行にToolStripが2つ並ばないよう...
}}
デフォルトでは、ToolStripPanelの同じ行に複数のToolStripを...
逆にMenuStripやStatusStripはデフォルトでは同じ行に別のToo...
***ToolStripPanelにあるToolStripの位置をプログラムで変更...
#column(注意){{
この記事の最新版は「[[ToolStripPanelにあるToolStripの位置...
}}
ToolStripPanelにあるToolStripの位置は、Locationプロパティ...
ToolStripPanelがどのようにToolStripを整列れるさせるかは、...
ToolStrip.Locationプロパティ以外では、ToolStripPanel.Join...
***ToolStripとToolStripItemの位置を保存、復元する [#j30a7...
#column(注意){{
この記事の最新版は「[[ToolStripとToolStripItemの位置を保...
}}
.NET Framework 2.0では、ToolStripの位置を保存、復元する簡...
ToolStripManager.SaveSettingsメソッドでToolStripの位置を...
ToolStripManager.SaveSettingsで保存される情報は、ToolStri...
下の例では、フォームのOnLoadメソッドでToolStripの位置を復...
#code(vbnet){{
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripの位置を復元
ToolStripManager.LoadSettings(Me)
End Sub
Protected Overrides Sub OnClosed(ByVal e As EventArgs)
MyBase.OnClosed(e)
'ToolStripの位置を保存
ToolStripManager.SaveSettings(Me)
End Sub
}}
#code(csharp){{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripの位置を復元
ToolStripManager.LoadSettings(this);
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
//ToolStripの位置を保存
ToolStripManager.SaveSettings(this);
}
}}
これらのメソッドを使う際には、幾つか注意しなければならな...
上記のようなコードを書いているフォームに新たなToolStripを...
また、VS2005のデザイナを使わずにToolStripを作成し、フォー...
さらには、一番大きく、しかも厄介な問題として、2つ以上のTo...
この問題は、LoadSettingsメソッドが正しい順番でToolStripの...
このコードは、次のような方針に基づいて書かれています。
まず設定の保存では、ToolStripPanelにあるToolStripの位置を...
設定の復元では、まずはじめに現在ToolStripPanel内にあるす...
このコードはToolStripの位置を保存、復元するだけで、サイズ...
また、すべてのToolStripPanelのNameプロパティが設定されて...
使い方は、ToolStripManagerクラスと同じように、ToolStripMa...
もっと良い方法をご存知の方は、ぜひご連絡ください。
#code(csharp){{
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
public class ToolStripManager2
{
internal class ToolStripSettings
: System.Configuration.ApplicationSettingsBase
{
/// <summary>
/// ToolStripPanelにあるToolStripを列に分けて保存...
/// </summary>
[System.Configuration.UserScopedSetting,
System.Configuration.DefaultSettingValue("")]
public List<List<ToolStripInfo>> Rows
{
get
{
return (List<List<ToolStripInfo>>)this["R...
}
set
{
this["Rows"] = value;
}
}
public ToolStripSettings(string settingsKey)
: base(settingsKey)
{
}
}
/// <summary>
/// 保存するToolStripの情報
/// </summary>
public class ToolStripInfo : IComparable<ToolStripInfo>
{
public string Name = "";
public Point Location = Point.Empty;
public ToolStripInfo(ToolStrip ts)
{
this.Name = ts.Name;
this.Location = ts.Location;
}
public ToolStripInfo()
{
}
public int CompareTo(ToolStripInfo other)
{
if (this.Location.X == other.Location.X)
{
return this.Location.Y - other.Location.Y;
}
return this.Location.X - other.Location.X;
}
}
/// <summary>
/// sourceFormに配置されたToolStripPanel内のToolStrip...
/// </summary>
/// <param name="sourceForm"></param>
public static void SaveSettings(Form sourceForm)
{
ToolStripManager.SaveSettings(sourceForm);
ToolStripManager2.InternalSaveSettings(sourceForm);
}
/// <summary>
/// sourceFormに配置されたToolStripPanel内のToolStrip...
/// </summary>
/// <param name="sourceForm"></param>
public static void LoadSettings(Form sourceForm)
{
ToolStripManager.LoadSettings(sourceForm);
ToolStripManager2.InternalLoadSettings(sourceForm);
}
internal static void InternalSaveSettings(Control own...
{
//owner内のToolStripPanelを探す
List<Control> toolStripPanels = new List<Control>...
FindControls(typeof(ToolStripPanel), owner.Contro...
ref toolStripPanels);
foreach (ToolStripPanel tsp in toolStripPanels)
{
if (string.IsNullOrEmpty(tsp.Name)) continue;
List<List<ToolStripInfo>> rowsList =
new List<List<ToolStripInfo>>();
foreach (ToolStripPanelRow r in tsp.Rows)
{
//ToolStripPanelの列内のToolStripの情報を...
List<ToolStripInfo> toolStripNames =
new List<ToolStripInfo>();
foreach (Control con in r.Controls)
{
if (con is ToolStrip &&
!string.IsNullOrEmpty(con.Name))
{
toolStripNames.Add(
new ToolStripInfo((ToolStrip)...
}
}
//列内の順番を並び替え
toolStripNames.Sort();
rowsList.Add(toolStripNames);
}
//ToolStripPanelごとに保存する
string skey = owner.GetType().FullName + "." ...
ToolStripSettings settings = new ToolStripSet...
settings.Rows = rowsList;
settings.Save();
}
}
internal static void InternalLoadSettings(Control own...
{
//owner内のToolStripPanelを探す
List<Control> toolStripPanels = new List<Control>...
FindControls(typeof(ToolStripPanel), owner.Contro...
ref toolStripPanels);
foreach (ToolStripPanel tsp in toolStripPanels)
{
if (string.IsNullOrEmpty(tsp.Name)) continue;
//ToolStripPanelの情報を読み込む
string skey = owner.GetType().FullName + "." ...
ToolStripSettings settings = new ToolStripSet...
List<List<ToolStripInfo>> rowsList = settings...
//ToolStripPanel内のToolStripを一時的にすべて...
Dictionary<string, ToolStrip> toolstrips =
new Dictionary<string, ToolStrip>();
foreach (Control c in tsp.Controls)
{
toolstrips.Add(c.Name, (ToolStrip)c);
}
tsp.Controls.Clear();
for (int i = 0; i < rowsList.Count; i++)
{
foreach (ToolStripInfo info in rowsList[i])
{
//位置を設定するToolStripを探す
ToolStrip ts = null;
if (toolstrips.ContainsKey(info.Name))
{
ts = toolstrips[info.Name];
}
else
{
Control[] tss =
owner.Controls.Find(info.Name...
if ((tss != null) && (tss.Length ...
&& (tss[0] is ToolStrip))
{
ts = (ToolStrip)tss[0];
}
}
//ToolStripの位置を変更する
if (ts != null)
{
tsp.Join(ts, info.Location);
}
}
}
}
}
internal static void FindControls(Type findType,
Control.ControlCollection conts, ref List<Control...
{
foreach (Control c in conts)
{
if (findType.IsAssignableFrom(c.GetType()))
{
foundList.Add(c);
}
if (c.Controls.Count > 0)
{
FindControls(findType, c.Controls, ref fo...
}
}
}
}
}}
***特定のToolStripを指定したToolStripPanelにドッキングで...
#column(注意){{
この記事の最新版は「[[特定のToolStripを指定したToolStripP...
}}
ToolStripは、同じフォーム内であれば、どこのToolStripPanel...
基本的には、ToolStripPanelのControlAddedイベントで受け入...
しかも、たとえそのようなコードを書いたとしても、正常に動...
ToolStripの移動が終了したことを知るための方法はないかと探...
以上のような方針で、ToolStripがToolStripContainer(toolSt...
#code(vbnet){{
'ToolStripの位置
Private toolStripParent As ToolStripPanel = Nothing
Private toolStripLocation As Point = Point.Empty
'LocationChangedイベントハンドラ
Private Sub toolStrip1_LocationChanged(ByVal sender As Ob...
ByVal e As EventArgs) Handles ToolStrip1.LocationChan...
Dim ts As ToolStrip = CType(sender, ToolStrip)
If ToolStripContainer1.BottomToolStripPanel.Equals(ts...
AndAlso Not (toolStripParent Is Nothing) Then
'BottomToolStripPanelに移動させた時
'ここでToolStripをもとに戻すことができればよいの...
ElseIf Not (ts.Parent Is Nothing) _
AndAlso TypeOf ts.Parent Is ToolStripPanel Then
'ToolStripの位置を記憶する
toolStripParent = CType(ts.Parent, ToolStripPanel)
toolStripLocation = ts.Location
End If
End Sub
'MouseCaptureChangedイベントハンドラ
Private Sub toolStrip1_MouseCaptureChanged(ByVal sender A...
ByVal e As EventArgs) Handles ToolStrip1.MouseCapture...
Dim ts As ToolStrip = CType(sender, ToolStrip)
If ToolStripContainer1.BottomToolStripPanel.Equals(ts...
AndAlso Not (toolStripParent Is Nothing) Then
'BottomToolStripPanelに移動させた時
'ToolStripを元の位置に戻す
toolStripParent.Join(ts, toolStripLocation)
End If
End Sub
}}
#code(csharp){{
//ToolStripの位置
private ToolStripPanel toolStripParent = null;
private Point toolStripLocation = Point.Empty;
//LocationChangedイベントハンドラ
private void toolStrip1_LocationChanged(object sender, Ev...
{
ToolStrip ts = (ToolStrip)sender;
if (toolStripContainer1.BottomToolStripPanel.Equals(t...
&& toolStripParent != null)
{
//BottomToolStripPanelに移動させた時
//ここでToolStripをもとに戻すことができればよいの...
}
else if (ts.Parent != null && ts.Parent is ToolStripP...
{
//ToolStripの位置を記憶する
toolStripParent = (ToolStripPanel)ts.Parent;
toolStripLocation = ts.Location;
}
}
//MouseCaptureChangedイベントハンドラ
private void toolStrip1_MouseCaptureChanged(object sender...
{
ToolStrip ts = (ToolStrip)sender;
if (toolStripContainer1.BottomToolStripPanel.Equals(t...
&& toolStripParent != null)
{
//BottomToolStripPanelに移動させた時
//ToolStripを元の位置に戻す
toolStripParent.Join(ts, toolStripLocation);
}
}
}}
もっと良い方法をご存知の方がいらっしゃれば、ぜひ教えてく...
残念ながら、今回は紹介したいことの3分の1も紹介できません...
**コメント [#yc62e962]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2006-03-14 (火) 06:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第66号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第66号 [#k8ab7411]
今更ですが、今回から.NET Framework 2.0の新機能を幾つか紹...
**.NET Tips [#qd352259]
***ToolStrip、ToolStripContainerコントロールとは? [#k22c...
#column(注意){{
この記事の最新版は「[[ToolStripとToolStripContainerコント...
}}
ToolStripは、.NET Framework 2.0で新しく追加されたWindows...
ToolStripコントロールは、ToolStripContainerコントロールと...
また、ToolStripから派生したMenuStripとStatusStripコントロ...
使ってみればすぐに分かるようなつまらない説明は省略し、と...
-[[ToolStrip コントロール (Windows フォーム)>http://msdn2...
***ToolStripとToolStripContainerコントロールの基本的な使...
Microsoft Visual Studio 2005のフォームデザイナを使って、T...
+Windowsアプリケーションのプロジェクトを作成し、フォーム...
+ToolStripContainer1のDockプロパティをFillとします。(ま...
+デフォルトでは、ToolStripContainer1の四辺のすべてにToolS...
+ToolStripコントロールを配置するための場所を空けるために...
+配置したToolStripコントロールをクリックして、ボタンやコ...
このように、VS2005のフォームデザイナを使えば、非常に簡単...
これと同じことをコードで行う方法を次に示します。ここでは...
#code(vbnet){{
Private toolStripContainer1 As ToolStripContainer
Private toolStrip1 As ToolStrip
Private toolStripButton1 As ToolStripButton
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripContainerの作成
toolStripContainer1 = New ToolStripContainer()
'フォームいっぱいに広げる
toolStripContainer1.Dock = DockStyle.Fill
'右端だけドッキングできないようにする
toolStripContainer1.RightToolStripPanelVisible = False
'ToolStripの作成
toolStrip1 = New ToolStrip()
'ToolStripButtonの作成
toolStripButton1 = New ToolStripButton()
'画像と文字列を表示する
toolStripButton1.DisplayStyle = _
ToolStripItemDisplayStyle.ImageAndText
'表示する画像の設定
toolStripButton1.Image = New Bitmap("Save.bmp")
toolStripButton1.ImageTransparentColor = _
System.Drawing.Color.Magenta
'表示する文字列の設定
toolStripButton1.Text = "保存"
'クリックされた時のイベントハンドラ
AddHandler toolStripButton1.Click, _
AddressOf toolStripButton1_Click
'toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1)
'toolStripContainer1の上にtoolStrip1を追加
toolStripContainer1.TopToolStripPanel.Join(toolStrip1)
'または、
'toolStripContainer1.TopToolStripPanel.Controls.Add(t...
'フォームにtoolStripContainer1を追加
Me.Controls.Add(toolStripContainer1)
End Sub
Private Sub toolStripButton1_Click(ByVal sender As Object...
ByVal e As EventArgs)
MessageBox.Show("toolStripButton1が押されたよ")
End Sub
}}
#code(csharp){{
private ToolStripContainer toolStripContainer1;
private ToolStrip toolStrip1;
private ToolStripButton toolStripButton1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripContainerの作成
toolStripContainer1 = new ToolStripContainer();
//フォームいっぱいに広げる
toolStripContainer1.Dock = DockStyle.Fill;
//右端だけドッキングできないようにする
toolStripContainer1.RightToolStripPanelVisible = false;
//ToolStripの作成
toolStrip1 = new ToolStrip();
//ToolStripButtonの作成
toolStripButton1 = new ToolStripButton();
//画像と文字列を表示する
toolStripButton1.DisplayStyle = ToolStripItemDisplayS...
//表示する画像の設定
toolStripButton1.Image = new Bitmap("Save.bmp");
toolStripButton1.ImageTransparentColor = System.Drawi...
//表示する文字列の設定
toolStripButton1.Text = "保存";
//クリックされた時のイベントハンドラ
toolStripButton1.Click += new EventHandler(toolStripB...
//toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1);
//toolStripContainer1の上にtoolStrip1を追加
toolStripContainer1.TopToolStripPanel.Join(toolStrip1);
//または、
//toolStripContainer1.TopToolStripPanel.Controls.Add(...
//フォームにtoolStripContainer1を追加
this.Controls.Add(toolStripContainer1);
}
private void toolStripButton1_Click(object sender, EventA...
{
MessageBox.Show("toolStripButton1が押されたよ");
}
}}
***ToolStripContainerの代わりにToolStripPanelを使う [#n3b...
#column(注意){{
この記事の最新版は「[[ToolStripContainerの代わりにToolStr...
}}
ToolStripContainerコントロールは、上下左右に1つずつ計4つ...
さらにMDIの親フォームでは、ToolStripContainerを使用すると...
ToolStripPanelコントロールは、デフォルトでは、VS2005のツ...
もちろんデザイナを使用せずに、自分でコードを書くことによ...
以下にフォームの上部にToolStripPanelを1つだけ配置した例を...
#code(vbnet){{
Private topToolStripPanel As ToolStripPanel
Private toolStrip1 As ToolStrip
Private toolStripButton1 As ToolStripButton
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripPanelの作成
topToolStripPanel = New ToolStripPanel()
'水平方向にToolStripを並べるようにする
topToolStripPanel.Orientation = Orientation.Horizontal
'上部に配置する
topToolStripPanel.Dock = DockStyle.Top
'ToolStripの作成
toolStrip1 = New ToolStrip()
'ToolStripButtonの作成
toolStripButton1 = New ToolStripButton()
'画像と文字列を表示する
toolStripButton1.DisplayStyle = _
ToolStripItemDisplayStyle.ImageAndText
'表示する画像の設定
toolStripButton1.Image = New Bitmap("Save.bmp")
toolStripButton1.ImageTransparentColor = _
System.Drawing.Color.Magenta
'表示する文字列の設定
toolStripButton1.Text = "保存"
'クリックされた時のイベントハンドラ
AddHandler toolStripButton1.Click, _
AddressOf toolStripButton1_Click
'toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1)
'topToolStripPanelの上にtoolStrip1を追加
topToolStripPanel.Join(toolStrip1)
'フォームにtoolStripContainer1を追加
Me.Controls.Add(topToolStripPanel)
End Sub
Private Sub toolStripButton1_Click(ByVal sender As Object...
ByVal e As EventArgs)
MessageBox.Show("toolStripButton1が押されたよ")
End Sub
}}
#code(csharp){{
private ToolStripPanel topToolStripPanel;
private ToolStrip toolStrip1;
private ToolStripButton toolStripButton1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripPanelの作成
topToolStripPanel = new ToolStripPanel();
//水平方向にToolStripを並べるようにする
topToolStripPanel.Orientation = Orientation.Horizontal;
//上部に配置する
topToolStripPanel.Dock = DockStyle.Top;
//ToolStripの作成
toolStrip1 = new ToolStrip();
//ToolStripButtonの作成
toolStripButton1 = new ToolStripButton();
//画像と文字列を表示する
toolStripButton1.DisplayStyle = ToolStripItemDisplayS...
//表示する画像の設定
toolStripButton1.Image = new Bitmap("Save.bmp");
toolStripButton1.ImageTransparentColor = System.Drawi...
//表示する文字列の設定
toolStripButton1.Text = "保存";
//クリックされた時のイベントハンドラ
toolStripButton1.Click += new EventHandler(toolStripB...
//toolStrip1にアイテムを追加
toolStrip1.Items.Add(toolStripButton1);
//topToolStripPanelの上にtoolStrip1を追加
topToolStripPanel.Join(toolStrip1);
//フォームにtoolStripContainer1を追加
this.Controls.Add(topToolStripPanel);
}
private void toolStripButton1_Click(object sender, EventA...
{
MessageBox.Show("toolStripButton1が押されたよ");
}
}}
-[[方法 : ToolStripPanel を MDI で使用する>http://msdn2.m...
-[[方法 : ToolStripPanel コントロールを持つ MDI フォーム...
***MenuStripやStatusStripを移動できるようにする [#s772e54c]
#column(注意){{
この記事の最新版は「[[MenuStripやStatusStripを移動できる...
}}
デフォルトでは、MenuStripやStatusStripコントロールにはコ...
このグリップを表示するには、GripStyleプロパティをVisible...
***同じ行にToolStripが2つ並ばないようにする [#xf0214ba]
#column(注意){{
この記事の最新版は「[[同じ行にToolStripが2つ並ばないよう...
}}
デフォルトでは、ToolStripPanelの同じ行に複数のToolStripを...
逆にMenuStripやStatusStripはデフォルトでは同じ行に別のToo...
***ToolStripPanelにあるToolStripの位置をプログラムで変更...
#column(注意){{
この記事の最新版は「[[ToolStripPanelにあるToolStripの位置...
}}
ToolStripPanelにあるToolStripの位置は、Locationプロパティ...
ToolStripPanelがどのようにToolStripを整列れるさせるかは、...
ToolStrip.Locationプロパティ以外では、ToolStripPanel.Join...
***ToolStripとToolStripItemの位置を保存、復元する [#j30a7...
#column(注意){{
この記事の最新版は「[[ToolStripとToolStripItemの位置を保...
}}
.NET Framework 2.0では、ToolStripの位置を保存、復元する簡...
ToolStripManager.SaveSettingsメソッドでToolStripの位置を...
ToolStripManager.SaveSettingsで保存される情報は、ToolStri...
下の例では、フォームのOnLoadメソッドでToolStripの位置を復...
#code(vbnet){{
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripの位置を復元
ToolStripManager.LoadSettings(Me)
End Sub
Protected Overrides Sub OnClosed(ByVal e As EventArgs)
MyBase.OnClosed(e)
'ToolStripの位置を保存
ToolStripManager.SaveSettings(Me)
End Sub
}}
#code(csharp){{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripの位置を復元
ToolStripManager.LoadSettings(this);
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
//ToolStripの位置を保存
ToolStripManager.SaveSettings(this);
}
}}
これらのメソッドを使う際には、幾つか注意しなければならな...
上記のようなコードを書いているフォームに新たなToolStripを...
また、VS2005のデザイナを使わずにToolStripを作成し、フォー...
さらには、一番大きく、しかも厄介な問題として、2つ以上のTo...
この問題は、LoadSettingsメソッドが正しい順番でToolStripの...
このコードは、次のような方針に基づいて書かれています。
まず設定の保存では、ToolStripPanelにあるToolStripの位置を...
設定の復元では、まずはじめに現在ToolStripPanel内にあるす...
このコードはToolStripの位置を保存、復元するだけで、サイズ...
また、すべてのToolStripPanelのNameプロパティが設定されて...
使い方は、ToolStripManagerクラスと同じように、ToolStripMa...
もっと良い方法をご存知の方は、ぜひご連絡ください。
#code(csharp){{
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
public class ToolStripManager2
{
internal class ToolStripSettings
: System.Configuration.ApplicationSettingsBase
{
/// <summary>
/// ToolStripPanelにあるToolStripを列に分けて保存...
/// </summary>
[System.Configuration.UserScopedSetting,
System.Configuration.DefaultSettingValue("")]
public List<List<ToolStripInfo>> Rows
{
get
{
return (List<List<ToolStripInfo>>)this["R...
}
set
{
this["Rows"] = value;
}
}
public ToolStripSettings(string settingsKey)
: base(settingsKey)
{
}
}
/// <summary>
/// 保存するToolStripの情報
/// </summary>
public class ToolStripInfo : IComparable<ToolStripInfo>
{
public string Name = "";
public Point Location = Point.Empty;
public ToolStripInfo(ToolStrip ts)
{
this.Name = ts.Name;
this.Location = ts.Location;
}
public ToolStripInfo()
{
}
public int CompareTo(ToolStripInfo other)
{
if (this.Location.X == other.Location.X)
{
return this.Location.Y - other.Location.Y;
}
return this.Location.X - other.Location.X;
}
}
/// <summary>
/// sourceFormに配置されたToolStripPanel内のToolStrip...
/// </summary>
/// <param name="sourceForm"></param>
public static void SaveSettings(Form sourceForm)
{
ToolStripManager.SaveSettings(sourceForm);
ToolStripManager2.InternalSaveSettings(sourceForm);
}
/// <summary>
/// sourceFormに配置されたToolStripPanel内のToolStrip...
/// </summary>
/// <param name="sourceForm"></param>
public static void LoadSettings(Form sourceForm)
{
ToolStripManager.LoadSettings(sourceForm);
ToolStripManager2.InternalLoadSettings(sourceForm);
}
internal static void InternalSaveSettings(Control own...
{
//owner内のToolStripPanelを探す
List<Control> toolStripPanels = new List<Control>...
FindControls(typeof(ToolStripPanel), owner.Contro...
ref toolStripPanels);
foreach (ToolStripPanel tsp in toolStripPanels)
{
if (string.IsNullOrEmpty(tsp.Name)) continue;
List<List<ToolStripInfo>> rowsList =
new List<List<ToolStripInfo>>();
foreach (ToolStripPanelRow r in tsp.Rows)
{
//ToolStripPanelの列内のToolStripの情報を...
List<ToolStripInfo> toolStripNames =
new List<ToolStripInfo>();
foreach (Control con in r.Controls)
{
if (con is ToolStrip &&
!string.IsNullOrEmpty(con.Name))
{
toolStripNames.Add(
new ToolStripInfo((ToolStrip)...
}
}
//列内の順番を並び替え
toolStripNames.Sort();
rowsList.Add(toolStripNames);
}
//ToolStripPanelごとに保存する
string skey = owner.GetType().FullName + "." ...
ToolStripSettings settings = new ToolStripSet...
settings.Rows = rowsList;
settings.Save();
}
}
internal static void InternalLoadSettings(Control own...
{
//owner内のToolStripPanelを探す
List<Control> toolStripPanels = new List<Control>...
FindControls(typeof(ToolStripPanel), owner.Contro...
ref toolStripPanels);
foreach (ToolStripPanel tsp in toolStripPanels)
{
if (string.IsNullOrEmpty(tsp.Name)) continue;
//ToolStripPanelの情報を読み込む
string skey = owner.GetType().FullName + "." ...
ToolStripSettings settings = new ToolStripSet...
List<List<ToolStripInfo>> rowsList = settings...
//ToolStripPanel内のToolStripを一時的にすべて...
Dictionary<string, ToolStrip> toolstrips =
new Dictionary<string, ToolStrip>();
foreach (Control c in tsp.Controls)
{
toolstrips.Add(c.Name, (ToolStrip)c);
}
tsp.Controls.Clear();
for (int i = 0; i < rowsList.Count; i++)
{
foreach (ToolStripInfo info in rowsList[i])
{
//位置を設定するToolStripを探す
ToolStrip ts = null;
if (toolstrips.ContainsKey(info.Name))
{
ts = toolstrips[info.Name];
}
else
{
Control[] tss =
owner.Controls.Find(info.Name...
if ((tss != null) && (tss.Length ...
&& (tss[0] is ToolStrip))
{
ts = (ToolStrip)tss[0];
}
}
//ToolStripの位置を変更する
if (ts != null)
{
tsp.Join(ts, info.Location);
}
}
}
}
}
internal static void FindControls(Type findType,
Control.ControlCollection conts, ref List<Control...
{
foreach (Control c in conts)
{
if (findType.IsAssignableFrom(c.GetType()))
{
foundList.Add(c);
}
if (c.Controls.Count > 0)
{
FindControls(findType, c.Controls, ref fo...
}
}
}
}
}}
***特定のToolStripを指定したToolStripPanelにドッキングで...
#column(注意){{
この記事の最新版は「[[特定のToolStripを指定したToolStripP...
}}
ToolStripは、同じフォーム内であれば、どこのToolStripPanel...
基本的には、ToolStripPanelのControlAddedイベントで受け入...
しかも、たとえそのようなコードを書いたとしても、正常に動...
ToolStripの移動が終了したことを知るための方法はないかと探...
以上のような方針で、ToolStripがToolStripContainer(toolSt...
#code(vbnet){{
'ToolStripの位置
Private toolStripParent As ToolStripPanel = Nothing
Private toolStripLocation As Point = Point.Empty
'LocationChangedイベントハンドラ
Private Sub toolStrip1_LocationChanged(ByVal sender As Ob...
ByVal e As EventArgs) Handles ToolStrip1.LocationChan...
Dim ts As ToolStrip = CType(sender, ToolStrip)
If ToolStripContainer1.BottomToolStripPanel.Equals(ts...
AndAlso Not (toolStripParent Is Nothing) Then
'BottomToolStripPanelに移動させた時
'ここでToolStripをもとに戻すことができればよいの...
ElseIf Not (ts.Parent Is Nothing) _
AndAlso TypeOf ts.Parent Is ToolStripPanel Then
'ToolStripの位置を記憶する
toolStripParent = CType(ts.Parent, ToolStripPanel)
toolStripLocation = ts.Location
End If
End Sub
'MouseCaptureChangedイベントハンドラ
Private Sub toolStrip1_MouseCaptureChanged(ByVal sender A...
ByVal e As EventArgs) Handles ToolStrip1.MouseCapture...
Dim ts As ToolStrip = CType(sender, ToolStrip)
If ToolStripContainer1.BottomToolStripPanel.Equals(ts...
AndAlso Not (toolStripParent Is Nothing) Then
'BottomToolStripPanelに移動させた時
'ToolStripを元の位置に戻す
toolStripParent.Join(ts, toolStripLocation)
End If
End Sub
}}
#code(csharp){{
//ToolStripの位置
private ToolStripPanel toolStripParent = null;
private Point toolStripLocation = Point.Empty;
//LocationChangedイベントハンドラ
private void toolStrip1_LocationChanged(object sender, Ev...
{
ToolStrip ts = (ToolStrip)sender;
if (toolStripContainer1.BottomToolStripPanel.Equals(t...
&& toolStripParent != null)
{
//BottomToolStripPanelに移動させた時
//ここでToolStripをもとに戻すことができればよいの...
}
else if (ts.Parent != null && ts.Parent is ToolStripP...
{
//ToolStripの位置を記憶する
toolStripParent = (ToolStripPanel)ts.Parent;
toolStripLocation = ts.Location;
}
}
//MouseCaptureChangedイベントハンドラ
private void toolStrip1_MouseCaptureChanged(object sender...
{
ToolStrip ts = (ToolStrip)sender;
if (toolStripContainer1.BottomToolStripPanel.Equals(t...
&& toolStripParent != null)
{
//BottomToolStripPanelに移動させた時
//ToolStripを元の位置に戻す
toolStripParent.Join(ts, toolStripLocation);
}
}
}}
もっと良い方法をご存知の方がいらっしゃれば、ぜひ教えてく...
残念ながら、今回は紹介したいことの3分の1も紹介できません...
**コメント [#yc62e962]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2006-03-14 (火) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]