DoboWiki
Top
> .NETプログラミング研究/68 をテンプレートにして作成
.NETプログラミング研究/68 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第68号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第68号 [#sb481a58]
**.NET Tips [#a47c97cf]
今回も前回に引き続き、ToolStripに関するTipsを紹介します。...
***ToolStripに任意のコントロールを配置する [#h3c438e3]
#column(注意){{
この記事の最新版は「[[ToolStripに任意のコントロールを配置...
}}
ToolStrip(MenuStrip、ContextMenuStrip、StatusStripなどTo...
|コントロール|説明|h
|ToolStripButton|ツールバーの普通のボタン。画像とテキスト...
|ToolStripDropDownButton|押すとドロップダウンリストが表示...
|ToolStripSplitButton|ToolStripDropDownButtonと似ているが...
|ToolStripLabel|テキストや画像を表示する。コメントやタイ...
|ToolStripSeparator|グループ分けするセパレータ。主に、Too...
|ToolStripMenuItem|メニューで使われる項目。画像も表示可能...
|ToolStripStatusLabel|StatusStripで使われるパネル。テキス...
|ToolStripComboBox|コンボボックスを表示する。主に、ToolSt...
|ToolStripTextBox|テキストボックスを表示する。主に、ToolS...
|ToolStripProgressBar|ProgressBarを表示する。主に、ToolSt...
注意:「主に...で使用される。」というのは、そのToolStripI...
このように、以前のToolBarとは違い、ToolStripには多くのコ...
これだけでも十分かもしれませんが、さらに、任意のコントロ...
まず、次のようなクラスを作成します。あまりに簡単ですが、...
#code(vbnet){{
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
}}
#code(csharp){{
using System.Windows.Forms;
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown() : base(new NumericUpD...
{
}
}
}}
これを実際にToolStripにのせるには、次のようにします(フォ...
#code(vbnet){{
Private toolStripNumeric1 As ToolStripNumericUpDown
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
toolStripNumeric1 = New ToolStripNumericUpDown()
ToolStrip1.Items.Add(toolStripNumeric1)
End Sub
}}
#code(csharp){{
private ToolStripNumericUpDown toolStripNumeric1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
toolStripNumeric1 = new ToolStripNumericUpDown();
toolStrip1.Items.Add(toolStripNumeric1);
}
}}
NumericUpDownコントロールをToolStripにのせることはできま...
ToolStripControlHostがホストしているコントロールは、Contr...
#code(vbnet){{
Console.WriteLine(CType(toolStripNumeric1.Control, Numeri...
}}
#code(csharp){{
Console.WriteLine(((NumericUpDown)toolStripNumeric1.Contr...
}}
このように、たったこれだけのコードでも十分ですが、ToolStr...
まず、ホストしているNumericUpDownをプロパティで公開します...
さらに、ToolStripNumericUpDownクラス内でNumericUpDownのイ...
以上のように改良したToolStripNumericUpDownクラスは、次の...
#code(vbnet){{
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
'/ <summary>
'/ コンストラクタ
'/ </summary>
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
'/ <summary>
'/ ホストしているNumericUpDownコントロール
'/ </summary>
Public ReadOnly Property NumericUpDown() As NumericUp...
Get
Return CType(Control, NumericUpDown)
End Get
End Property
'/ <summary>
'/ 値の設定と取得
'/ </summary>
Public Property Value() As Decimal
Get
Return NumericUpDown.Value
End Get
Set(ByVal value As Decimal)
NumericUpDown.Value = value
End Set
End Property
'ホストしているNumericUpDownのイベントをサブスクライ...
Protected Overrides Sub OnSubscribeControlEvents( _
ByVal control As Control)
MyBase.OnSubscribeControlEvents(control)
Dim numControl As NumericUpDown = _
CType(control, NumericUpDown)
AddHandler numControl.ValueChanged, _
AddressOf NumericUpDown_OnValueChanged
End Sub
'ホストしているNumericUpDownのイベントをアンサブスク...
Protected Overrides Sub OnUnsubscribeControlEvents( _
ByVal control As Control)
MyBase.OnUnsubscribeControlEvents(control)
Dim numControl As NumericUpDown = _
CType(control, NumericUpDown)
RemoveHandler numControl.ValueChanged, _
AddressOf NumericUpDown_OnValueChanged
End Sub
'/ <summary>
'/ 値が変化した
'/ </summary>
Public Event ValueChanged As EventHandler
'ValueChangedイベントを発生
Private Sub NumericUpDown_OnValueChanged( _
ByVal sender As Object, ByVal e As EventArgs)
RaiseEvent ValueChanged(Me, e)
End Sub
End Class
}}
#code(csharp){{
using System.Windows.Forms;
public class ToolStripNumericUpDown : ToolStripControlHost
{
/// <summary>
/// コンストラクタ
/// </summary>
public ToolStripNumericUpDown() : base(new NumericUpD...
{
}
/// <summary>
/// ホストしているNumericUpDownコントロール
/// </summary>
public NumericUpDown NumericUpDown
{
get
{
return (NumericUpDown)Control;
}
}
/// <summary>
/// 値の設定と取得
/// </summary>
public decimal Value
{
get
{
return NumericUpDown.Value;
}
set
{
NumericUpDown.Value = value;
}
}
//ホストしているNumericUpDownのイベントをサブスクライ...
protected override void OnSubscribeControlEvents(Cont...
{
base.OnSubscribeControlEvents(control);
NumericUpDown numControl = (NumericUpDown)control;
numControl.ValueChanged +=
new EventHandler(NumericUpDown_OnValueChanged);
}
//ホストしているNumericUpDownのイベントをアンサブスク...
protected override void OnUnsubscribeControlEvents(Co...
{
base.OnUnsubscribeControlEvents(control);
NumericUpDown numControl = (NumericUpDown)control;
numControl.ValueChanged -=
new EventHandler(NumericUpDown_OnValueChanged);
}
/// <summary>
/// 値が変化した
/// </summary>
public event EventHandler ValueChanged;
//ValueChangedイベントを発生
private void NumericUpDown_OnValueChanged(object send...
{
if (ValueChanged != null)
{
ValueChanged(this, e);
}
}
}
}}
改良したToolStripNumericUpDownクラスの使い方は、次のよう...
#code(vbnet){{
Private toolStripNumeric1 As ToolStripNumericUpDown
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripNumericUpDownの作成
toolStripNumeric1 = New ToolStripNumericUpDown()
'toolStripNumeric1の値を変更
toolStripNumeric1.Value = 5
'ValueChangedイベントハンドラの追加
AddHandler toolStripNumeric1.ValueChanged, _
AddressOf toolStripNumeric1_ValueChanged
'toolStrip1に追加
ToolStrip1.Items.Add(toolStripNumeric1)
End Sub
Sub toolStripNumeric1_ValueChanged( _
ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("値が変わったよ")
End Sub
}}
#code(csharp){{
private ToolStripNumericUpDown toolStripNumeric1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripNumericUpDownの作成
toolStripNumeric1 = new ToolStripNumericUpDown();
//toolStripNumeric1の値を変更
toolStripNumeric1.Value = 5;
//ValueChangedイベントハンドラの追加
toolStripNumeric1.ValueChanged +=
new EventHandler(toolStripNumeric1_ValueChanged);
//toolStrip1に追加
toolStrip1.Items.Add(toolStripNumeric1);
}
void toolStripNumeric1_ValueChanged(object sender, EventA...
{
Console.WriteLine("値が変わったよ");
}
}}
参考:
-[[ToolStripControlHost クラス>http://msdn2.microsoft.com...
-[[方法 : ToolStripControlHost を使用して Windows フォー...
***自作したToolStripItemをVisual Studioのデザイナで表示す...
#column(注意){{
この記事の最新版は「[[自作したToolStripItemをVisual Studi...
}}
Visual Studioのデザイナでは、ToolStripの端に新しいToolStr...
自作のToolStripItemをデザイナで表示してToolStripに追加で...
#code(vbnet){{
<System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
Or System.Windows.Forms.Design.ToolStripItemDesignerA...
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
}}
#code(csharp){{
[System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown()
: base(new NumericUpDown())
{
}
}
}}
さらに、デザイナでToolStripItemを追加する時のメニューで左...
次の例では、「OpenFolder.bmp」という画像が「埋め込まれた...
#code(vbnet){{
<System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
Or System.Windows.Forms.Design.ToolStripItemDesignerA...
ToolboxBitmap(GetType(ToolStripNumericUpDown), "OpenF...
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
}}
#code(csharp){{
[System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
[ToolboxBitmap(typeof(ToolStripNumericUpDown), "OpenFolde...
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown()
: base(new NumericUpDown())
{
}
}
}}
これとは別に、ToolboxItem属性を使って画像を指定することも...
#code(vbnet){{
<System.ComponentModel.ToolboxItem(GetType(NumericUpDownT...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
Public Class NumericUpDownToolboxItem
Inherits System.Drawing.Design.ToolboxItem
Public Sub New()
End Sub
Public Overrides Sub Initialize(ByVal type As Type)
MyBase.Initialize(type)
'説明
Me.Description = "数字を入力できます。"
'表示名
Me.DisplayName = "数字入力"
'画像
Me.Bitmap = New Bitmap(GetType(NumericUpDownToolb...
"OpenFolder.bmp")
End Sub
End Class
}}
#code(csharp){{
[System.ComponentModel.ToolboxItem(typeof(NumericUpDownTo...
[System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown()
: base(new NumericUpDown())
{
}
}
public class NumericUpDownToolboxItem :
System.Drawing.Design.ToolboxItem
{
public NumericUpDownToolboxItem()
{
}
public override void Initialize(Type type)
{
base.Initialize(type);
//説明
this.Description = "数字を入力できます。";
//表示名
this.DisplayName = "数字入力";
//画像
this.Bitmap = new Bitmap(typeof(NumericUpDownTool...
"OpenFolder.bmp");
}
}
}}
***ToolStripItemの位置をユーザーが変えられるようにする [#...
#column(注意){{
この記事の最新版は「[[ToolStripItemの位置をユーザーが変え...
}}
ToolStripのAllowDropプロパティをFalseとして、AllowItemReo...
なお、AllowDropプロパティとAllowItemReorderプロパティの両...
AllowItemReorderプロパティをTrueとしても移動できないToolS...
ToolStripItemの位置を保存、復元する方法は、前々号で説明し...
このような方法とは別に、ダイアログを表示してToolStripItem...
-[[ToolStrip のカスタマイズ サンプル>http://msdn2.microso...
***あるToolStripItemの右側に指定したToolStripItemが常にあ...
#column(注意){{
この記事の最新版は「[[あるToolStripItemの右側に指定したTo...
}}
例えば、ToolStripにToolStripComboBoxが配置されており、そ...
これを防ぐために、あるToolStripItemの右側に指定したToolSt...
下に示す例では、ToolStripにToolStripLabel(toolStripLabel...
#code(vbnet){{
'toolStripLabel1のLocationChangedイベントハンドラ
Private Sub toolStripLabel1_LocationChanged( _
ByVal sender As Object, ByVal e As EventArgs) _
Handles ToolStripLabel1.LocationChanged
Dim item As ToolStripItem = CType(sender, ToolStripIt...
If item.Equals(ToolStripLabel1) Then
'常に隣にあるべきToolStripItem
Dim nextItem As ToolStripItem = ToolStripComboBox1
If Not (nextItem Is Nothing) And _
Not (nextItem.Owner Is Nothing) Then
If nextItem.Owner.Items.IndexOf(nextItem) <> _
item.Owner.Items.IndexOf(item) + 1 Then
'削除してから挿入する
'削除しないと不具合が生じる可能性あり
nextItem.Owner.Items.Remove(nextItem)
Dim insertIndex As Integer = _
item.Owner.Items.IndexOf(item) + 1
item.Owner.Items.Insert(insertIndex, next...
End If
End If
End If
End Sub
}}
#code(csharp){{
//toolStripLabel1のLocationChangedイベントハンドラ
private void toolStripLabel1_LocationChanged(
object sender, EventArgs e)
{
ToolStripItem item = (ToolStripItem)sender;
if (item.Equals(toolStripLabel1))
{
//常に隣にあるべきToolStripItem
ToolStripItem nextItem = toolStripComboBox1;
if (nextItem != null && nextItem.Owner != null)
{
if (nextItem.Owner.Items.IndexOf(nextItem) !=
item.Owner.Items.IndexOf(item) + 1)
{
//削除してから挿入する
//削除しないと不具合が生じる可能性あり
nextItem.Owner.Items.Remove(nextItem);
int insertIndex = item.Owner.Items.IndexO...
item.Owner.Items.Insert(insertIndex, next...
}
}
}
}
}}
この方法は、ユーザーが移動することのできないToolStripCont...
***ToolStripに関する取るに足らないTip [#p997320c]
最後に、ここで述べるほどでは無いかもしれないつまらないTip...
***ToolStripItemを表示あるいは非表示にする / ToolStripIte...
#column(注意){{
この記事の最新版は「[[ToolStripItemを表示あるいは非表示に...
}}
これは、Visibleプロパティを使えばよさそうですが、そう単純...
両者の違いについてMSDNでは、次のように書かれています(そ...
Available プロパティは、Visible プロパティとは異なります...
-[[ToolStripItem.Available プロパティ>http://msdn2.micros...
つまり、両者は値の設定に関しては全く同じであり、取得に関...
取得される値がどのように異なるのか、具体的な例で説明しま...
MSDNによると設定に関しては両者に違いがないように思われま...
私の確認した範囲では、別のToolStripItemの子となっているTo...
***メニューにToolTipを表示 [#ue1dac8c]
#column(注意){{
この記事の最新版は「[[メニューにToolTipを表示する>https:/...
}}
MenuStripやContextMenuStripでは、今までのメニューと違って...
また、ToolStripItem.AutoToolTipプロパティをTrueとすると、...
なおMSDNには、ToolStrip.ShowItemToolTipsをTrueとしないとT...
-[[方法 : ToolStrip コントロールにツールヒントを使用する>...
***右端にToolStripItemを配置 [#n71260ed]
#column(注意){{
この記事の最新版は「[[右端にToolStripItemを配置する>https...
}}
ToolStripItem.AlignmentプロパティをRightとすることにより...
ただし、ToolStrip.LayoutStyleプロパティがTableまたはFlow...
***ToolStripButtonやToolStripMenuItemをクリックすると自動...
#column(注意){{
この記事の最新版は「[[ToolStripButtonやToolStripMenuItem...
}}
ToolStripButtonとToolStripMenuItemにはCheckOnClickプロパ...
***オーバーフローを有効にする [#u0896008]
#column(注意){{
この記事の最新版は「[[オーバーフローを有効にする>https://...
}}
ToolStripの幅をだんだん狭めていき、ToolStripItemが表示し...
オーバーフロー機能を有効にするには、ToolStripのCanOverflo...
また、ToolStripItemをオーバーフローボタンのメニューに移動...
補足:MSDNではToolStrip.CanOverflowプロパティの説明を、「...
-[[方法 : Windows フォームの ToolStrip オーバーフローを管...
***ToolStripItemがオーバーフロー状態になったことを知る [#...
#column(注意){{
この記事の最新版は「[[ToolStripItemがオーバーフロー状態に...
}}
ToolStripItemがオーバーフロー状態になったことを知るための...
実際のコードは、例えば、次のようになりそうです。ここでは...
#code(vbnet){{
Private toolStripButton1Placement As ToolStripItemPlaceme...
ToolStripItemPlacement.None
'toolStrip1のLayoutCompletedイベントハンドラ
Private Sub toolStrip1_LayoutCompleted( _
ByVal sender As Object, ByVal e As EventArgs) _
Handles ToolStrip1.LayoutCompleted
If ToolStripButton1.Placement <> toolStripButton1Plac...
If ToolStripButton1.Placement = ToolStripItemPlac...
Console.WriteLine( _
"toolStripButton1がオーバーフロー状態にな...
Else
If ToolStripButton1.Placement = ToolStripItem...
Console.WriteLine( _
"toolStripButton1がオーバーフロー状態...
End If
End If
toolStripButton1Placement = ToolStripButton1.Plac...
Console.WriteLine(DateTime.Now)
End If
End Sub
}}
#code(csharp){{
private ToolStripItemPlacement toolStripButton1Placement =
ToolStripItemPlacement.None;
//toolStrip1のLayoutCompletedイベントハンドラ
private void toolStrip1_LayoutCompleted(object sender, Ev...
{
if (toolStripButton1.Placement != toolStripButton1Pla...
{
if (toolStripButton1.Placement == ToolStripItemPl...
{
Console.WriteLine(
"toolStripButton1がオーバーフロー状態にな...
}
else if (toolStripButton1.Placement == ToolStripI...
{
Console.WriteLine(
"toolStripButton1がオーバーフロー状態では...
}
toolStripButton1Placement = toolStripButton1.Plac...
Console.WriteLine(DateTime.Now);
}
}
}}
実際に試してみると分かりますが、toolStripButton1がすでに...
補足:ToolStripのオーバーフローボタンの実体は、ToolStripO...
***ToolStripの幅に応じてToolStripItemのDisplayStyleを変更...
#column(注意){{
この記事の最新版は「[[ToolStripの幅に応じてToolStripItem...
}}
MSDNの「ToolStrip サンプル」には、「DynamicOverflowForm」...
なかなか面白いサンプルですので、一度お試しください。
-[[ToolStrip サンプル>http://msdn2.microsoft.com/ja-JP/li...
**コメント [#rb299ca0]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2006-04-05 (水) 06:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第68号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第68号 [#sb481a58]
**.NET Tips [#a47c97cf]
今回も前回に引き続き、ToolStripに関するTipsを紹介します。...
***ToolStripに任意のコントロールを配置する [#h3c438e3]
#column(注意){{
この記事の最新版は「[[ToolStripに任意のコントロールを配置...
}}
ToolStrip(MenuStrip、ContextMenuStrip、StatusStripなどTo...
|コントロール|説明|h
|ToolStripButton|ツールバーの普通のボタン。画像とテキスト...
|ToolStripDropDownButton|押すとドロップダウンリストが表示...
|ToolStripSplitButton|ToolStripDropDownButtonと似ているが...
|ToolStripLabel|テキストや画像を表示する。コメントやタイ...
|ToolStripSeparator|グループ分けするセパレータ。主に、Too...
|ToolStripMenuItem|メニューで使われる項目。画像も表示可能...
|ToolStripStatusLabel|StatusStripで使われるパネル。テキス...
|ToolStripComboBox|コンボボックスを表示する。主に、ToolSt...
|ToolStripTextBox|テキストボックスを表示する。主に、ToolS...
|ToolStripProgressBar|ProgressBarを表示する。主に、ToolSt...
注意:「主に...で使用される。」というのは、そのToolStripI...
このように、以前のToolBarとは違い、ToolStripには多くのコ...
これだけでも十分かもしれませんが、さらに、任意のコントロ...
まず、次のようなクラスを作成します。あまりに簡単ですが、...
#code(vbnet){{
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
}}
#code(csharp){{
using System.Windows.Forms;
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown() : base(new NumericUpD...
{
}
}
}}
これを実際にToolStripにのせるには、次のようにします(フォ...
#code(vbnet){{
Private toolStripNumeric1 As ToolStripNumericUpDown
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
toolStripNumeric1 = New ToolStripNumericUpDown()
ToolStrip1.Items.Add(toolStripNumeric1)
End Sub
}}
#code(csharp){{
private ToolStripNumericUpDown toolStripNumeric1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
toolStripNumeric1 = new ToolStripNumericUpDown();
toolStrip1.Items.Add(toolStripNumeric1);
}
}}
NumericUpDownコントロールをToolStripにのせることはできま...
ToolStripControlHostがホストしているコントロールは、Contr...
#code(vbnet){{
Console.WriteLine(CType(toolStripNumeric1.Control, Numeri...
}}
#code(csharp){{
Console.WriteLine(((NumericUpDown)toolStripNumeric1.Contr...
}}
このように、たったこれだけのコードでも十分ですが、ToolStr...
まず、ホストしているNumericUpDownをプロパティで公開します...
さらに、ToolStripNumericUpDownクラス内でNumericUpDownのイ...
以上のように改良したToolStripNumericUpDownクラスは、次の...
#code(vbnet){{
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
'/ <summary>
'/ コンストラクタ
'/ </summary>
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
'/ <summary>
'/ ホストしているNumericUpDownコントロール
'/ </summary>
Public ReadOnly Property NumericUpDown() As NumericUp...
Get
Return CType(Control, NumericUpDown)
End Get
End Property
'/ <summary>
'/ 値の設定と取得
'/ </summary>
Public Property Value() As Decimal
Get
Return NumericUpDown.Value
End Get
Set(ByVal value As Decimal)
NumericUpDown.Value = value
End Set
End Property
'ホストしているNumericUpDownのイベントをサブスクライ...
Protected Overrides Sub OnSubscribeControlEvents( _
ByVal control As Control)
MyBase.OnSubscribeControlEvents(control)
Dim numControl As NumericUpDown = _
CType(control, NumericUpDown)
AddHandler numControl.ValueChanged, _
AddressOf NumericUpDown_OnValueChanged
End Sub
'ホストしているNumericUpDownのイベントをアンサブスク...
Protected Overrides Sub OnUnsubscribeControlEvents( _
ByVal control As Control)
MyBase.OnUnsubscribeControlEvents(control)
Dim numControl As NumericUpDown = _
CType(control, NumericUpDown)
RemoveHandler numControl.ValueChanged, _
AddressOf NumericUpDown_OnValueChanged
End Sub
'/ <summary>
'/ 値が変化した
'/ </summary>
Public Event ValueChanged As EventHandler
'ValueChangedイベントを発生
Private Sub NumericUpDown_OnValueChanged( _
ByVal sender As Object, ByVal e As EventArgs)
RaiseEvent ValueChanged(Me, e)
End Sub
End Class
}}
#code(csharp){{
using System.Windows.Forms;
public class ToolStripNumericUpDown : ToolStripControlHost
{
/// <summary>
/// コンストラクタ
/// </summary>
public ToolStripNumericUpDown() : base(new NumericUpD...
{
}
/// <summary>
/// ホストしているNumericUpDownコントロール
/// </summary>
public NumericUpDown NumericUpDown
{
get
{
return (NumericUpDown)Control;
}
}
/// <summary>
/// 値の設定と取得
/// </summary>
public decimal Value
{
get
{
return NumericUpDown.Value;
}
set
{
NumericUpDown.Value = value;
}
}
//ホストしているNumericUpDownのイベントをサブスクライ...
protected override void OnSubscribeControlEvents(Cont...
{
base.OnSubscribeControlEvents(control);
NumericUpDown numControl = (NumericUpDown)control;
numControl.ValueChanged +=
new EventHandler(NumericUpDown_OnValueChanged);
}
//ホストしているNumericUpDownのイベントをアンサブスク...
protected override void OnUnsubscribeControlEvents(Co...
{
base.OnUnsubscribeControlEvents(control);
NumericUpDown numControl = (NumericUpDown)control;
numControl.ValueChanged -=
new EventHandler(NumericUpDown_OnValueChanged);
}
/// <summary>
/// 値が変化した
/// </summary>
public event EventHandler ValueChanged;
//ValueChangedイベントを発生
private void NumericUpDown_OnValueChanged(object send...
{
if (ValueChanged != null)
{
ValueChanged(this, e);
}
}
}
}}
改良したToolStripNumericUpDownクラスの使い方は、次のよう...
#code(vbnet){{
Private toolStripNumeric1 As ToolStripNumericUpDown
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
'ToolStripNumericUpDownの作成
toolStripNumeric1 = New ToolStripNumericUpDown()
'toolStripNumeric1の値を変更
toolStripNumeric1.Value = 5
'ValueChangedイベントハンドラの追加
AddHandler toolStripNumeric1.ValueChanged, _
AddressOf toolStripNumeric1_ValueChanged
'toolStrip1に追加
ToolStrip1.Items.Add(toolStripNumeric1)
End Sub
Sub toolStripNumeric1_ValueChanged( _
ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("値が変わったよ")
End Sub
}}
#code(csharp){{
private ToolStripNumericUpDown toolStripNumeric1;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//ToolStripNumericUpDownの作成
toolStripNumeric1 = new ToolStripNumericUpDown();
//toolStripNumeric1の値を変更
toolStripNumeric1.Value = 5;
//ValueChangedイベントハンドラの追加
toolStripNumeric1.ValueChanged +=
new EventHandler(toolStripNumeric1_ValueChanged);
//toolStrip1に追加
toolStrip1.Items.Add(toolStripNumeric1);
}
void toolStripNumeric1_ValueChanged(object sender, EventA...
{
Console.WriteLine("値が変わったよ");
}
}}
参考:
-[[ToolStripControlHost クラス>http://msdn2.microsoft.com...
-[[方法 : ToolStripControlHost を使用して Windows フォー...
***自作したToolStripItemをVisual Studioのデザイナで表示す...
#column(注意){{
この記事の最新版は「[[自作したToolStripItemをVisual Studi...
}}
Visual Studioのデザイナでは、ToolStripの端に新しいToolStr...
自作のToolStripItemをデザイナで表示してToolStripに追加で...
#code(vbnet){{
<System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
Or System.Windows.Forms.Design.ToolStripItemDesignerA...
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
}}
#code(csharp){{
[System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown()
: base(new NumericUpDown())
{
}
}
}}
さらに、デザイナでToolStripItemを追加する時のメニューで左...
次の例では、「OpenFolder.bmp」という画像が「埋め込まれた...
#code(vbnet){{
<System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
Or System.Windows.Forms.Design.ToolStripItemDesignerA...
ToolboxBitmap(GetType(ToolStripNumericUpDown), "OpenF...
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
}}
#code(csharp){{
[System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
[ToolboxBitmap(typeof(ToolStripNumericUpDown), "OpenFolde...
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown()
: base(new NumericUpDown())
{
}
}
}}
これとは別に、ToolboxItem属性を使って画像を指定することも...
#code(vbnet){{
<System.ComponentModel.ToolboxItem(GetType(NumericUpDownT...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
System.Windows.Forms.Design.ToolStripItemDesignerAvai...
Public Class ToolStripNumericUpDown
Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New NumericUpDown())
End Sub
End Class
Public Class NumericUpDownToolboxItem
Inherits System.Drawing.Design.ToolboxItem
Public Sub New()
End Sub
Public Overrides Sub Initialize(ByVal type As Type)
MyBase.Initialize(type)
'説明
Me.Description = "数字を入力できます。"
'表示名
Me.DisplayName = "数字入力"
'画像
Me.Bitmap = New Bitmap(GetType(NumericUpDownToolb...
"OpenFolder.bmp")
End Sub
End Class
}}
#code(csharp){{
[System.ComponentModel.ToolboxItem(typeof(NumericUpDownTo...
[System.Windows.Forms.Design.ToolStripItemDesignerAvailab...
System.Windows.Forms.Design.ToolStripItemDesignerAvail...
public class ToolStripNumericUpDown : ToolStripControlHost
{
public ToolStripNumericUpDown()
: base(new NumericUpDown())
{
}
}
public class NumericUpDownToolboxItem :
System.Drawing.Design.ToolboxItem
{
public NumericUpDownToolboxItem()
{
}
public override void Initialize(Type type)
{
base.Initialize(type);
//説明
this.Description = "数字を入力できます。";
//表示名
this.DisplayName = "数字入力";
//画像
this.Bitmap = new Bitmap(typeof(NumericUpDownTool...
"OpenFolder.bmp");
}
}
}}
***ToolStripItemの位置をユーザーが変えられるようにする [#...
#column(注意){{
この記事の最新版は「[[ToolStripItemの位置をユーザーが変え...
}}
ToolStripのAllowDropプロパティをFalseとして、AllowItemReo...
なお、AllowDropプロパティとAllowItemReorderプロパティの両...
AllowItemReorderプロパティをTrueとしても移動できないToolS...
ToolStripItemの位置を保存、復元する方法は、前々号で説明し...
このような方法とは別に、ダイアログを表示してToolStripItem...
-[[ToolStrip のカスタマイズ サンプル>http://msdn2.microso...
***あるToolStripItemの右側に指定したToolStripItemが常にあ...
#column(注意){{
この記事の最新版は「[[あるToolStripItemの右側に指定したTo...
}}
例えば、ToolStripにToolStripComboBoxが配置されており、そ...
これを防ぐために、あるToolStripItemの右側に指定したToolSt...
下に示す例では、ToolStripにToolStripLabel(toolStripLabel...
#code(vbnet){{
'toolStripLabel1のLocationChangedイベントハンドラ
Private Sub toolStripLabel1_LocationChanged( _
ByVal sender As Object, ByVal e As EventArgs) _
Handles ToolStripLabel1.LocationChanged
Dim item As ToolStripItem = CType(sender, ToolStripIt...
If item.Equals(ToolStripLabel1) Then
'常に隣にあるべきToolStripItem
Dim nextItem As ToolStripItem = ToolStripComboBox1
If Not (nextItem Is Nothing) And _
Not (nextItem.Owner Is Nothing) Then
If nextItem.Owner.Items.IndexOf(nextItem) <> _
item.Owner.Items.IndexOf(item) + 1 Then
'削除してから挿入する
'削除しないと不具合が生じる可能性あり
nextItem.Owner.Items.Remove(nextItem)
Dim insertIndex As Integer = _
item.Owner.Items.IndexOf(item) + 1
item.Owner.Items.Insert(insertIndex, next...
End If
End If
End If
End Sub
}}
#code(csharp){{
//toolStripLabel1のLocationChangedイベントハンドラ
private void toolStripLabel1_LocationChanged(
object sender, EventArgs e)
{
ToolStripItem item = (ToolStripItem)sender;
if (item.Equals(toolStripLabel1))
{
//常に隣にあるべきToolStripItem
ToolStripItem nextItem = toolStripComboBox1;
if (nextItem != null && nextItem.Owner != null)
{
if (nextItem.Owner.Items.IndexOf(nextItem) !=
item.Owner.Items.IndexOf(item) + 1)
{
//削除してから挿入する
//削除しないと不具合が生じる可能性あり
nextItem.Owner.Items.Remove(nextItem);
int insertIndex = item.Owner.Items.IndexO...
item.Owner.Items.Insert(insertIndex, next...
}
}
}
}
}}
この方法は、ユーザーが移動することのできないToolStripCont...
***ToolStripに関する取るに足らないTip [#p997320c]
最後に、ここで述べるほどでは無いかもしれないつまらないTip...
***ToolStripItemを表示あるいは非表示にする / ToolStripIte...
#column(注意){{
この記事の最新版は「[[ToolStripItemを表示あるいは非表示に...
}}
これは、Visibleプロパティを使えばよさそうですが、そう単純...
両者の違いについてMSDNでは、次のように書かれています(そ...
Available プロパティは、Visible プロパティとは異なります...
-[[ToolStripItem.Available プロパティ>http://msdn2.micros...
つまり、両者は値の設定に関しては全く同じであり、取得に関...
取得される値がどのように異なるのか、具体的な例で説明しま...
MSDNによると設定に関しては両者に違いがないように思われま...
私の確認した範囲では、別のToolStripItemの子となっているTo...
***メニューにToolTipを表示 [#ue1dac8c]
#column(注意){{
この記事の最新版は「[[メニューにToolTipを表示する>https:/...
}}
MenuStripやContextMenuStripでは、今までのメニューと違って...
また、ToolStripItem.AutoToolTipプロパティをTrueとすると、...
なおMSDNには、ToolStrip.ShowItemToolTipsをTrueとしないとT...
-[[方法 : ToolStrip コントロールにツールヒントを使用する>...
***右端にToolStripItemを配置 [#n71260ed]
#column(注意){{
この記事の最新版は「[[右端にToolStripItemを配置する>https...
}}
ToolStripItem.AlignmentプロパティをRightとすることにより...
ただし、ToolStrip.LayoutStyleプロパティがTableまたはFlow...
***ToolStripButtonやToolStripMenuItemをクリックすると自動...
#column(注意){{
この記事の最新版は「[[ToolStripButtonやToolStripMenuItem...
}}
ToolStripButtonとToolStripMenuItemにはCheckOnClickプロパ...
***オーバーフローを有効にする [#u0896008]
#column(注意){{
この記事の最新版は「[[オーバーフローを有効にする>https://...
}}
ToolStripの幅をだんだん狭めていき、ToolStripItemが表示し...
オーバーフロー機能を有効にするには、ToolStripのCanOverflo...
また、ToolStripItemをオーバーフローボタンのメニューに移動...
補足:MSDNではToolStrip.CanOverflowプロパティの説明を、「...
-[[方法 : Windows フォームの ToolStrip オーバーフローを管...
***ToolStripItemがオーバーフロー状態になったことを知る [#...
#column(注意){{
この記事の最新版は「[[ToolStripItemがオーバーフロー状態に...
}}
ToolStripItemがオーバーフロー状態になったことを知るための...
実際のコードは、例えば、次のようになりそうです。ここでは...
#code(vbnet){{
Private toolStripButton1Placement As ToolStripItemPlaceme...
ToolStripItemPlacement.None
'toolStrip1のLayoutCompletedイベントハンドラ
Private Sub toolStrip1_LayoutCompleted( _
ByVal sender As Object, ByVal e As EventArgs) _
Handles ToolStrip1.LayoutCompleted
If ToolStripButton1.Placement <> toolStripButton1Plac...
If ToolStripButton1.Placement = ToolStripItemPlac...
Console.WriteLine( _
"toolStripButton1がオーバーフロー状態にな...
Else
If ToolStripButton1.Placement = ToolStripItem...
Console.WriteLine( _
"toolStripButton1がオーバーフロー状態...
End If
End If
toolStripButton1Placement = ToolStripButton1.Plac...
Console.WriteLine(DateTime.Now)
End If
End Sub
}}
#code(csharp){{
private ToolStripItemPlacement toolStripButton1Placement =
ToolStripItemPlacement.None;
//toolStrip1のLayoutCompletedイベントハンドラ
private void toolStrip1_LayoutCompleted(object sender, Ev...
{
if (toolStripButton1.Placement != toolStripButton1Pla...
{
if (toolStripButton1.Placement == ToolStripItemPl...
{
Console.WriteLine(
"toolStripButton1がオーバーフロー状態にな...
}
else if (toolStripButton1.Placement == ToolStripI...
{
Console.WriteLine(
"toolStripButton1がオーバーフロー状態では...
}
toolStripButton1Placement = toolStripButton1.Plac...
Console.WriteLine(DateTime.Now);
}
}
}}
実際に試してみると分かりますが、toolStripButton1がすでに...
補足:ToolStripのオーバーフローボタンの実体は、ToolStripO...
***ToolStripの幅に応じてToolStripItemのDisplayStyleを変更...
#column(注意){{
この記事の最新版は「[[ToolStripの幅に応じてToolStripItem...
}}
MSDNの「ToolStrip サンプル」には、「DynamicOverflowForm」...
なかなか面白いサンプルですので、一度お試しください。
-[[ToolStrip サンプル>http://msdn2.microsoft.com/ja-JP/li...
**コメント [#rb299ca0]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2006-04-05 (水) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]