MESCIUS CalendarGrid for Windows Forms 4.0J
値の変更を検出する

GcCalendarGrid.CellEditingValueChangedイベントを使用すると、ComboBox型セルで選択されている値の変更を簡単に検出できます。

Imports GrapeCity.Win.CalendarGrid

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim today As DateTime = DateTime.Today
    Dim comboBoxCellType As New CalendarComboBoxCellType()
    comboBoxCellType.Items.Add("項目A")
    comboBoxCellType.Items.Add("項目B")
    GcCalendarGrid1.Content(today).Rows(1).Cells(0).Value = True
    GcCalendarGrid1.Content(today).Rows(1).Cells(0).CellType = comboBoxCellType.Clone()
    GcCalendarGrid1.ScrollIntoView(today)

    AddHandler GcCalendarGrid1.CellEditingValueChanged, AddressOf GcCalendarGrid1_CellEditingValueChanged
End Sub

Private Sub GcCalendarGrid1_CellEditingValueChanged(sender As Object, e As GrapeCity.Win.CalendarGrid.CalendarCellEditingValueChangedEventArgs)
    Dim today As DateTime = DateTime.Today
    Dim gcCalendarGrid As GcCalendarGrid = DirectCast(sender, GcCalendarGrid)
    Dim targetCellPosition As New CalendarCellPosition(today, 1, 0)
    If e.CellPosition = targetCellPosition Then
        Dim currentCell As CalendarCell = gcCalendarGrid.Content(e.CellPosition.Date).Rows(e.CellPosition.RowIndex).Cells(e.CellPosition.ColumnIndex)
        Console.WriteLine("編集中のセルの値:{0}", e.Value)
        Console.WriteLine("セルの値:{0}", currentCell.Value)
    End If
End Sub
using GrapeCity.Win.CalendarGrid;

private void Form1_Load(object sender, EventArgs e)
{
    var today = DateTime.Today;
    var comboBoxCellType = new CalendarComboBoxCellType();
    comboBoxCellType.Items.Add("項目A");
    comboBoxCellType.Items.Add("項目B");
    gcCalendarGrid1.Content[today].Rows[1].Cells[0].Value = true;
    gcCalendarGrid1.Content[today].Rows[1].Cells[0].CellType = comboBoxCellType.Clone();
    gcCalendarGrid1.ScrollIntoView(today);

    gcCalendarGrid1.CellEditingValueChanged += gcCalendarGrid1_CellEditingValueChanged;
}

private void gcCalendarGrid1_CellEditingValueChanged(object sender, CalendarCellEditingValueChangedEventArgs e)
{
    var today = DateTime.Today;
    var gcCalendarGrid = sender as GcCalendarGrid;
    var targetCellPosition = new CalendarCellPosition(today, 1, 0);
    if (e.CellPosition == targetCellPosition)
    {
        CalendarCell currentCell = gcCalendarGrid.Content[e.CellPosition.Date].Rows[e.CellPosition.RowIndex].Cells[e.CellPosition.ColumnIndex];
        Console.WriteLine("編集中のセルの値:{0}", e.Value);
        Console.WriteLine("セルの値:{0}", currentCell.Value);
    }
}

次のように、ComboBox.SelectedIndexChangedイベントを使って検出する方法も利用可能です。

Imports GrapeCity.Win.CalendarGrid

Public Class Form1
    Private _comboBox As ComboBox = Nothing
    Private _gcCalendarGrid As GcCalendarGrid = Nothing
    Private _cellPosition As CalendarCellPosition = CalendarCellPosition.Empty

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim today As DateTime = DateTime.Today
        Dim comboBoxCellType As New CalendarComboBoxCellType()
        comboBoxCellType.Items.Add("項目A")
        comboBoxCellType.Items.Add("項目B")
        GcCalendarGrid1.Content(today).Rows(1).Cells(0).CellType = comboBoxCellType.Clone()

        AddHandler GcCalendarGrid1.EditingControlShowing, AddressOf GcCalendarGrid1_EditingControlShowing
    End Sub

    Private Sub GcCalendarGrid1_EditingControlShowing(sender As Object, e As GrapeCity.Win.CalendarGrid.CalendarEditingControlShowingEventArgs)
        If TypeOf e.Control Is ComboBox Then
            _comboBox = DirectCast(e.Control, ComboBox)
            AddHandler _comboBox.SelectedIndexChanged, AddressOf comboBox_SelectedIndexChanged
            _gcCalendarGrid = DirectCast(sender, GcCalendarGrid)
            _cellPosition = _gcCalendarGrid.CurrentCellPosition
        End If
    End Sub

    Private Sub comboBox_SelectedIndexChanged(sender As Object, e As EventArgs)
        Dim comboBox As ComboBox = DirectCast(sender, ComboBox)
        Console.WriteLine("Selected index:{0}", comboBox.SelectedIndex)
        _gcCalendarGrid.Content(_cellPosition.Date).Rows(_cellPosition.RowIndex + 1).Cells(_cellPosition.ColumnIndex).Value = comboBox.SelectedIndex.ToString()
    End Sub

    Private Sub GcCalendarGrid1_CellEndEdit(sender As Object, e As CalendarCellEndEditEventArgs) Handles GcCalendarGrid1.CellEndEdit
        If TypeOf _comboBox Is ComboBox Then
            RemoveHandler _comboBox.SelectedIndexChanged, AddressOf comboBox_SelectedIndexChanged
            _comboBox = Nothing
            _gcCalendarGrid = Nothing
            _cellPosition = CalendarCellPosition.Empty
        End If
    End Sub
End Class
using GrapeCity.Win.CalendarGrid;

private ComboBox _comboBox = null;
private GcCalendarGrid _gcCalendarGrid = null;
private CalendarCellPosition _cellPosition = CalendarCellPosition.Empty;

private void Form1_Load(object sender, EventArgs e)
{
    var today = DateTime.Today;
    var comboBoxCellType = new CalendarComboBoxCellType();
    comboBoxCellType.Items.Add("項目A");
    comboBoxCellType.Items.Add("項目B");

    gcCalendarGrid1.Content[today].Rows[1].Cells[0].CellType = comboBoxCellType.Clone();

    gcCalendarGrid1.EditingControlShowing += gcCalendarGrid1_EditingControlShowing;
    gcCalendarGrid1.CellEndEdit += gcCalendarGrid1_CellEndEdit;
}

private void gcCalendarGrid1_EditingControlShowing(object sender, CalendarEditingControlShowingEventArgs e)
{
    if (e.Control is ComboBox)
    {
        _comboBox = e.Control as ComboBox;
        _comboBox.SelectedIndexChanged += comboBox_SelectedIndexChanged;
        _gcCalendarGrid = sender as GcCalendarGrid;
        _cellPosition = _gcCalendarGrid.CurrentCellPosition;
    }
}

private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    var comboBox = sender as ComboBox;
    Console.WriteLine("Selected index:{0}", comboBox.SelectedIndex);
    _gcCalendarGrid.Content[_cellPosition.Date].Rows[_cellPosition.RowIndex + 1].Cells[_cellPosition.ColumnIndex].Value = comboBox.SelectedIndex.ToString();
}

private void gcCalendarGrid1_CellEndEdit(object sender, CalendarCellEndEditEventArgs e)
{
    if (_comboBox is ComboBox)
    {
        _comboBox.SelectedIndexChanged -= comboBox_SelectedIndexChanged;
        _comboBox = null;
        _gcCalendarGrid = null;
        _cellPosition = CalendarCellPosition.Empty;
    }
}
関連トピック

 

 


© MESCIUS inc. All rights reserved.