MultiRowでは、選択したセルのコピーや貼り付けなどをタッチ操作で行うための「タッチツールバー」を提供します。ここでは、タッチツールバーの操作方法やカスタマイズ方法について解説します。
タッチツールバーは、
MultiRowTouchToolBarオブジェクトに、
TouchToolBarButtonオブジェクトを配置した構成になっており、TouchToolBarButtonにはアクションを割り当てることができます。タッチツールバーはカスタマイズすることができるので、MultiRowコントロール上でタッチツールバーを使用することで、さまざまな操作を行うことができます。

また、MultiRowでは、貼り付け、切り取り、コピーおよび削除の操作ができるタッチツールバーが、既定の状態で設定されているので、何も設定しなくてもタッチツールバーを使用することができます。

GcMultiRowコントロールは、
GcMultiRow.TouchToolBarプロパティに既定のタッチツールバーが設定されているため、何も設定をしない場合には既定のタッチツールバーを表示します。
既定のタッチツールバーを表示させたくない場合には、TouchToolBarプロパティにNullを設定します。
GcMultiRow1.TouchToolBar = Nothing
gcMultiRow1.TouchToolBar = null;
既定のタッチツールバーは、4つの項目(貼り付け/切り取り/コピー/削除)が設定されていますが、これらの項目を非表示にしたり、他の項目を追加することができます。
次のコードは、既定のタッチツールバーのインスタンスを作成し、「切り取り」を非表示にしたタッチツールバーをGcMultiRowコントロールに割り当てています。
Dim DefaultTouchToolBar1 = New DefaultTouchToolBar(GcMultiRow1)
' 既定のツールバーの「切り取り」を非表示に設定する
DefaultTouchToolBar1.Items(1).Visible = False
' GcMultiRowコントロールにタッチツールバーを設定する
GcMultiRow1.TouchToolBar = DefaultTouchToolBar1
DefaultTouchToolBar defaultTouchToolBar1 = new DefaultTouchToolBar(gcMultiRow1);
// 既定のツールバーの「切り取り」を非表示に設定する
defaultTouchToolBar1.Items[1].Visible = false;
// GcMultiRowコントロールにタッチツールバーを設定する
gcMultiRow1.TouchToolBar = defaultTouchToolBar1;
既定のタッチツールバーの項目を削除するには、RemoveAt メソッドを使用します。
Dim DefaultTouchToolBar1 = New DefaultTouchToolBar(GcMultiRow1)
' 既定のツールバーの「コピー」を削除する
DefaultTouchToolBar1.Items.RemoveAt(2)
' GcMultiRowコントロールにタッチツールバーを設定する
GcMultiRow1.TouchToolBar = DefaultTouchToolBar1
DefaultTouchToolBar defaultTouchToolBar1 = new DefaultTouchToolBar(gcMultiRow1);
// 既定のツールバーの「コピー」を削除する
defaultTouchToolBar1.Items.RemoveAt(2);
// GcMultiRowコントロールにタッチツールバーを設定する
gcMultiRow1.TouchToolBar = defaultTouchToolBar1;
また、Insertメソッドを使用して、既定のタッチツールバーに新しい項目を追加することができます。
Dim DefaultTouchToolBar1 = New DefaultTouchToolBar(GcMultiRow1)
' 既定のツールバーに項目を追加する
Dim selectallBtn As New TouchToolBarButton(SelectionActions.SelectAll) With {.Text = "すべて選択", .Name = "AllSelect", .Image = New Bitmap("test.png")}
DefaultTouchToolBar1.Items.Add(selectallBtn)
' GcMultiRowコントロールにタッチツールバーを設定する
GcMultiRow1.TouchToolBar = DefaultTouchToolBar1
DefaultTouchToolBar defaultTouchToolBar1 = new DefaultTouchToolBar(gcMultiRow1);
// 既定のツールバーに項目を追加する
TouchToolBarButton selectallBtn = new TouchToolBarButton(SelectionActions.SelectAll) { Text = "すべて選択", Name = "AllSelect", Image = new Bitmap(@"test.png") };
defaultTouchToolBar1.Items.Add(selectallBtn);
// GcMultiRowコントロールにタッチツールバーを設定する
gcMultiRow1.TouchToolBar = defaultTouchToolBar1;
MultiRowTouchToolBarクラスを使用すると、既定のツールバーを使用せずに、新しくタッチツールバーを作成することができます。
次のコードは、コピーと貼り付けを配置したタッチツールバーを作成します。
Imports GrapeCity.Win.MultiRow
GcMultiRow1.Template = Template.CreateGridTemplate(5)
GcMultiRow1.RowCount = 6
Dim touchToolBar As MultiRowTouchToolBar = New MultiRowTouchToolBar(GcMultiRow1)
Dim copyBtn = New TouchToolBarButton(EditingActions.Copy) With {.Text = "コピー", .Name = "CopyItem", .Image = New Bitmap("Touch_Copy.png")}
Dim pasteBtn = New TouchToolBarButton(EditingActions.Paste) With {.Text = "貼り付け", .Name = "PasteItem", .Image = New Bitmap("Touch_Paste.png")}
touchToolBar.Items.AddRange(New ToolStripItem() {copyBtn, pasteBtn})
GcMultiRow1.TouchToolBar = touchToolBar
using GrapeCity.Win.MultiRow;
gcMultiRow1.Template = Template.CreateGridTemplate(5);
gcMultiRow1.RowCount = 6;
MultiRowTouchToolBar touchToolBar = new MultiRowTouchToolBar(gcMultiRow1);
TouchToolBarButton copyBtn = new TouchToolBarButton(EditingActions.Copy) { Text = "コピー", Name = "CopyItem", Image = new Bitmap(@"Touch_Copy.png") };
TouchToolBarButton pasteBtn = new TouchToolBarButton(EditingActions.Paste) { Text = "貼り付け", Name = "PasteItem", Image = new Bitmap(@"Touch_Paste.png") };
touchToolBar.Items.AddRange(new ToolStripItem[] { copyBtn, pasteBtn });
gcMultiRow1.TouchToolBar = touchToolBar;
また、TouchToolBarButtonのClickイベントを使用することで、独自の動作を処理することができます。
次のコードは、タッチツールバーでソートを実行します。
Imports GrapeCity.Win.MultiRow
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GcMultiRow1.Template = Template.CreateGridTemplate(3)
GcMultiRow1.AllowUserToAddRows = False
GcMultiRow1.RowCount = 5
' サンプルデータを設定する
GcMultiRow1.Rows(0).SetValues(New String(2) {"E", "1", "VB"})
GcMultiRow1.Rows(1).SetValues(New String(2) {"D", "2", "VB"})
GcMultiRow1.Rows(2).SetValues(New String(2) {"C", "3", "CS"})
GcMultiRow1.Rows(3).SetValues(New String(2) {"B", "4", "VB"})
GcMultiRow1.Rows(4).SetValues(New String(2) {"A", "5", "CS"})
' タッチツールバーを設定する
Dim touchToolBar = New MultiRowTouchToolBar(GcMultiRow1)
Dim ascSortBtn = New TouchToolBarButton() With {.Text = "昇順ソート", .Name = "Sort", .Image = New Bitmap("Touch_AscSort.png")}
Dim desSortBtn = New TouchToolBarButton() With {.Text = "降順ソート", .Name = "CopyItem", .Image = New Bitmap("Touch_DesSort.png")}
' タッチツールバーのボタンクリックイベントを設定する
AddHandler ascSortBtn.Click, AddressOf ascSortBtn_Click
AddHandler desSortBtn.Click, AddressOf desSortBtn_Click
touchToolBar.Items.AddRange(New ToolStripItem() {ascSortBtn, desSortBtn})
GcMultiRow1.TouchToolBar = touchToolBar
End Sub
Private Sub ascSortBtn_Click(sender As Object, e As EventArgs)
' 現在のセルを基準に昇順で並び替える
GcMultiRow1.Sort(GcMultiRow1.CurrentCell.CellIndex, SortOrder.Ascending)
End Sub
Private Sub desSortBtn_Click(sender As Object, e As EventArgs)
' 現在のセルを基準に降順で並び替える
GcMultiRow1.Sort(GcMultiRow1.CurrentCell.CellIndex, SortOrder.Descending)
End Sub
using GrapeCity.Win.MultiRow;
private void Form1_Load(object sender, EventArgs e)
{
gcMultiRow1.Template = Template.CreateGridTemplate(3);
gcMultiRow1.AllowUserToAddRows = false;
gcMultiRow1.RowCount = 5;
// サンプルデータを設定する
gcMultiRow1.Rows[0].SetValues(new string[3] { "E", "1", "VB" });
gcMultiRow1.Rows[1].SetValues(new string[3] { "D", "2", "VB" });
gcMultiRow1.Rows[2].SetValues(new string[3] { "C", "3", "CS" });
gcMultiRow1.Rows[3].SetValues(new string[3] { "B", "4", "VB" });
gcMultiRow1.Rows[4].SetValues(new string[3] { "A", "5", "CS" });
// タッチツールバーを設定する
MultiRowTouchToolBar touchToolBar = new MultiRowTouchToolBar(gcMultiRow1);
TouchToolBarButton ascSortBtn = new TouchToolBarButton() { Text = "昇順ソート", Name = "Sort", Image = new Bitmap(@"Touch_AscSort.png") };
TouchToolBarButton desSortBtn = new TouchToolBarButton() { Text = "降順ソート", Name = "CopyItem", Image = new Bitmap(@"Touch_DesSort.png") };
// タッチツールバーのボタンクリックイベントを設定する
ascSortBtn.Click += ascSortBtn_Click;
desSortBtn.Click += desSortBtn_Click;
touchToolBar.Items.AddRange(new ToolStripItem[] { ascSortBtn, desSortBtn });
gcMultiRow1.TouchToolBar = touchToolBar;
}
private void ascSortBtn_Click(object sender, EventArgs e)
{
// 現在のセルを基準に昇順で並び替える
gcMultiRow1.Sort(gcMultiRow1.CurrentCell.CellIndex, SortOrder.Ascending);
}
private void desSortBtn_Click(object sender, EventArgs e)
{
// 現在のセルを基準に降順で並び替える
gcMultiRow1.Sort(gcMultiRow1.CurrentCell.CellIndex, SortOrder.Descending);
}
.NET Frameworkの
ToolStripDropDownButtonクラスと
ContextMenuStripクラスを利用することで、タッチツールバーでコンテキストメニューを使用することができます。
次のコードは、タッチツールバーでコンテキストメニューを使用できます。
Imports GrapeCity.Win.MultiRow
Dim touchToolBar = New MultiRowTouchToolBar(GcMultiRow1)
Dim dropDownMenu = New ToolStripDropDownButton()
dropDownMenu.Image = New Bitmap("Touch_dropdown.png")
dropDownMenu.ShowDropDownArrow = False
dropDownMenu.ImageScaling = ToolStripItemImageScaling.None
' コンテキストメニューを設定する
Dim menu = New System.Windows.Forms.ContextMenuStrip()
menu.Items.Add("行の追加")
menu.Items.Add("行の削除")
menu.Items.Add("すべて選択")
dropDownMenu.DropDown = menu
touchToolBar.Items.AddRange(New ToolStripItem() {dropDownMenu})
GcMultiRow1.TouchToolBar = touchToolBar
using GrapeCity.Win.MultiRow;
MultiRowTouchToolBar touchToolBar = new MultiRowTouchToolBar(gcMultiRow1);
ToolStripDropDownButton dropDownMenu = new ToolStripDropDownButton();
dropDownMenu.Image = new Bitmap(@"Touch_dropdown.png");
dropDownMenu.ShowDropDownArrow = false;
dropDownMenu.ImageScaling = ToolStripItemImageScaling.None;
// コンテキストメニューを設定する
ContextMenuStrip menu = new System.Windows.Forms.ContextMenuStrip();
menu.Items.Add("行の追加");
menu.Items.Add("行の削除");
menu.Items.Add("すべて選択");
dropDownMenu.DropDown = menu;
touchToolBar.Items.AddRange(new ToolStripItem[] { dropDownMenu });
gcMultiRow1.TouchToolBar = touchToolBar;
また、ContextMenuStrip.Items.AutoSizeプロパティにFalseを設定し、Heightプロパティを設定することで、タッチでも操作しやすいように、コンテキストメニューの項目間のスペースを設定することができます。
' コンテキストメニューを設定する
Dim menu = New System.Windows.Forms.ContextMenuStrip()
menu.Items.Add("行の追加")
menu.Items.Add("行の削除")
menu.Items.Add("すべて選択")
' コンテキストメニューの項目間のスペースを設定する
menu.Items(0).AutoSize = False
menu.Items(0).Height = 50
menu.Items(1).AutoSize = False
menu.Items(1).Height = 50
menu.Items(2).AutoSize = False
menu.Items(2).Height = 50
dropDownMenu.DropDown = menu
// コンテキストメニューを設定する
ContextMenuStrip menu = new System.Windows.Forms.ContextMenuStrip();
menu.Items.Add("行の追加");
menu.Items.Add("行の削除");
menu.Items.Add("すべて選択");
// コンテキストメニューの項目間のスペースを設定する
menu.Items[0].AutoSize = false;
menu.Items[0].Height = 50;
menu.Items[1].AutoSize = false;
menu.Items[1].Height = 50;
menu.Items[2].AutoSize = false;
menu.Items[2].Height = 50;
dropDownMenu.DropDown = menu;
 |
- タッチツールバーで使用するコンテキストメニューは、.NET FrameworkのToolStripDropDownButtonとContextMenuStripの機能を使用しているので、MultiRowが提供する機能ではありません。
|
タッチツールバーは、
セルノートでも使用することができます。
セルノートでは、次のいずれかの操作によってタッチツールバーを表示することができます。
- 非編集状態の選択されたセルノートを長押しする。
- 非選択状態のセルノートを長押しする。
すべてのセルノートで、同じタッチツールバーを使用する場合には、
GcMultiRow.DefaultCellNoteStyleプロパティの
TouchToolBarプロパティを使用します。
Imports GrapeCity.Win.MultiRow
Dim touchToolBar = New MultiRowTouchToolBar(GcMultiRow1)
' タッチツールバーのボタンを設定する
Dim noteDeleteBtn = New TouchToolBarButton() With {.Text = "削除", .Name = "NoteDelete", .Image = New Bitmap("Touch_NoteDel.png")}
' タッチツールバーにボタンを追加する
touchToolBar.Items.AddRange(New ToolStripItem() {noteDeleteBtn})
GcMultiRow1.DefaultCellNoteStyle.TouchToolBar = touchToolBar
using GrapeCity.Win.MultiRow;
MultiRowTouchToolBar touchToolBar = new MultiRowTouchToolBar(gcMultiRow1);
// タッチツールバーのボタンを設定する
TouchToolBarButton noteDeleteBtn = new TouchToolBarButton() { Text = "削除", Name = "NoteDelete", Image = new Bitmap(@"Touch_NoteDel.png") };
// タッチツールバーにボタンを追加する
touchToolBar.Items.AddRange(new ToolStripItem[]{noteDeleteBtn});
gcMultiRow1.DefaultCellNoteStyle.TouchToolBar = touchToolBar;
特定のセルノートでタッチツールバーを使用する場合には、
CellNote.Styleプロパティの
TouchToolBarプロパティを使用します。
Imports GrapeCity.Win.MultiRow
Dim touchToolBar = New MultiRowTouchToolBar(GcMultiRow1)
' タッチツールバーのボタンを設定する
Dim notestyleBtn = New TouchToolBarButton() With {.Text = "編集", .Name = "NoteEdit", .Image = New Bitmap("Touch_NoteEdit.png")}
' タッチツールバーにボタンを追加する
touchToolBar.Items.AddRange(New ToolStripItem() {notestyleBtn})
' 特定のセルノートにタッチツールバーを割り当てる
GcMultiRow1(5, 0).Note.Style.TouchToolBar = touchToolBar
using GrapeCity.Win.MultiRow;
MultiRowTouchToolBar touchToolBar = new MultiRowTouchToolBar(gcMultiRow1);
// タッチツールバーのボタンを設定する
TouchToolBarButton notestyleBtn = new TouchToolBarButton() { Text = "編集", Name = "NoteEdit", Image = new Bitmap(@"Touch_NoteEdit.png") };
// タッチツールバーにボタンを追加する
touchToolBar.Items.AddRange(new ToolStripItem[] { notestyleBtn });
// 特定のセルノートにタッチツールバーを割り当てる
gcMultiRow1[5, 0].Note.Style.TouchToolBar = touchToolBar;