作成日: 2017/07/26 最終更新日: 2017/07/26
文書種別
使用方法
詳細
MultiRow for Windows Forms 10.0Jでは、実行時にはセルの罫線部分が行の領域として扱われます。このため、セルの罫線をクリックしても現在のセルが移動したり、隣接するセルが選択されることはありません。この動作は、表示モード(GcMultiRow.ViewMode)やコンテキストメニューにも影響します。
セルの罫線のクリックをセル自体のクリックとして処理するには、次のようにコーディングします。
[Visual Basic]
[C#]
この例ではマウスクリックの操作と同時に現在のセルや行を移動しますが、セルの値を検証など、他の処理で移動を禁止している場合には例外が発生します。この場合、必要に応じてこの例外を破棄するコードを追加してください。
セルの罫線のクリックをセル自体のクリックとして処理するには、次のようにコーディングします。
[Visual Basic]
Imports GrapeCity.Win.MultiRow Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load GcMultiRow1.Template = Template.CreateGridTemplate(5, 50, 20) GcMultiRow1.RowCount = 5 GcMultiRow1.DefaultCellStyle.Border = New Border(LineStyle.Thick, Color.DarkGray) GcMultiRow1.ViewMode = ViewMode.ListBox End Sub Private Sub GcMultiRow1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles GcMultiRow1.MouseDown Dim gcMultiRow As GcMultiRow = TryCast(sender, GcMultiRow) Dim hitTestInfo1 As HitTestInfo = gcMultiRow.HitTest(e.Location) If gcMultiRow.ViewMode = ViewMode.Default Then Const maxWidth As Integer = 3 If hitTestInfo1.Type = HitTestType.Row AndAlso hitTestInfo1.CellIndex = -1 Then Dim hitTestInfo2 As HitTestInfo = gcMultiRow.HitTest(e.X - maxWidth, e.Y - maxWidth) gcMultiRow.CurrentCellPosition = New CellPosition(hitTestInfo2.SectionIndex, hitTestInfo2.CellIndex) End If ElseIf gcMultiRow.ViewMode = ViewMode.Row Then If hitTestInfo1.Type = HitTestType.Row AndAlso hitTestInfo1.CellIndex = -1 Then gcMultiRow.CurrentCellPosition = New CellPosition(hitTestInfo1.SectionIndex, hitTestInfo1.CellIndex) End If ElseIf gcMultiRow.ViewMode = ViewMode.ListBox Then If hitTestInfo1.Type = HitTestType.Row AndAlso hitTestInfo1.CellIndex = -1 Then gcMultiRow.Rows(hitTestInfo1.SectionIndex).Selected = Not gcMultiRow.Rows(hitTestInfo1.SectionIndex).Selected End If End If End Sub
[C#]
using GrapeCity.Win.MultiRow;
private void Form1_Load(object sender, EventArgs e)
{
gcMultiRow1.Template = Template.CreateGridTemplate(5, 50, 20);
gcMultiRow1.RowCount = 5;
gcMultiRow1.DefaultCellStyle.Border = new Border(LineStyle.Thick, Color.DarkGray);
}
private void gcMultiRow1_MouseDown(object sender, MouseEventArgs e)
{
GcMultiRow gcMultiRow = sender as GcMultiRow;
HitTestInfo hitTestInfo1 = gcMultiRow.HitTest(e.Location);
if (!checkBox1.Checked) return;
if (gcMultiRow.ViewMode == ViewMode.Default)
{
const int maxWidth = 3;
if (hitTestInfo1.Type == HitTestType.Row && hitTestInfo1.CellIndex == -1)
{
HitTestInfo hitTestInfo2 = gcMultiRow.HitTest(e.X - maxWidth, e.Y - maxWidth);
gcMultiRow.CurrentCellPosition = new CellPosition(hitTestInfo2.SectionIndex, hitTestInfo2.CellIndex);
}
}
else if (gcMultiRow.ViewMode == ViewMode.Row)
{
if (hitTestInfo1.Type == HitTestType.Row && hitTestInfo1.CellIndex == -1)
{
gcMultiRow.CurrentCellPosition = new CellPosition(hitTestInfo1.SectionIndex, gcMultiRow.CurrentCellPosition.CellIndex);
}
}
else if (gcMultiRow.ViewMode == ViewMode.ListBox)
{
if (hitTestInfo1.Type == HitTestType.Row && hitTestInfo1.CellIndex == -1)
{
gcMultiRow.Rows[hitTestInfo1.SectionIndex].Selected = !gcMultiRow.Rows[hitTestInfo1.SectionIndex].Selected;
}
}
}
この例ではマウスクリックの操作と同時に現在のセルや行を移動しますが、セルの値を検証など、他の処理で移動を禁止している場合には例外が発生します。この場合、必要に応じてこの例外を破棄するコードを追加してください。
旧文書番号
40567