作成日: 2020/11/25 最終更新日: 2020/11/25
文書種別
使用方法
詳細
FlexGridには、自身のマウスホイールの操作を親のマウスホイールイベントとして処理させる機能は備わっていません。
代替策として、C1FlexGridのBeforeScrollやMouseWheelイベントを使用して、独自の実装を行う方法が考えられます。以下に、サンプルコードを記載します。
※この手法ではコントロールのEnabledプロパティを切り替えているため、フォーカスが自動的に移動する現象が発生しますが、本動作を変更することはできませんので、あらかじめご了承ください
◎サンプルコード(VB)
代替策として、C1FlexGridのBeforeScrollやMouseWheelイベントを使用して、独自の実装を行う方法が考えられます。以下に、サンプルコードを記載します。
※この手法ではコントロールのEnabledプロパティを切り替えているため、フォーカスが自動的に移動する現象が発生しますが、本動作を変更することはできませんので、あらかじめご了承ください
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub C1FlexGrid1_MouseWheel(sender As Object, e As MouseEventArgs) Handles C1FlexGrid1.MouseWheel
' CtrlキーやShiftキーが押下されていない場合
If Control.ModifierKeys = Keys.None Then
' FlexGridを不活性化
C1FlexGrid1.Enabled = False
End If
End Sub
Private Sub C1FlexGrid1_BeforeScroll(sender As Object, e As RangeEventArgs) Handles C1FlexGrid1.BeforeScroll
' マウスボタンが押下されていない場合
If Control.MouseButtons = MouseButtons.None Then
' スクロール操作をキャンセル
e.Cancel = True
End If
End Sub
Private Sub Panel1_Click(sender As Object, e As EventArgs) Handles Panel1.Click
' FlexGrid上でクリックされた場合
Dim rect As New Rectangle(C1FlexGrid1.Location, C1FlexGrid1.Size)
If rect.Contains(Panel1.PointToClient(Control.MousePosition)) Then
' FlexGridを活性化してフォーカスを設定
C1FlexGrid1.Enabled = True
C1FlexGrid1.Select()
' クリックされた位置のセルをアクティブセルに設定
Dim htInfo = C1FlexGrid1.HitTest()
If htInfo.Type = C1.Win.C1FlexGrid.HitTestTypeEnum.Cell Then
C1FlexGrid1.Col = htInfo.Column
C1FlexGrid1.Row = htInfo.Row
End If
End If
End Sub
End Class
◎サンプルコード(C#)using System.Windows.Forms;
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid_Scroll
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
panel1.AutoScroll = true;
c1FlexGrid1.BeforeScroll += C1FlexGrid1_BeforeScroll;
c1FlexGrid1.MouseWheel += C1FlexGrid1_MouseWheel;
}
private void C1FlexGrid1_BeforeScroll(object sender, RangeEventArgs e)
{
// マウスボタンが押下されていない場合
if ((Control.MouseButtons == MouseButtons.None))
{
e.Cancel = true; // スクロール操作をキャンセル
}
}
private void C1FlexGrid1_MouseWheel(object sender, MouseEventArgs e)
{
// CtrlキーやShiftキーが押下されていない場合
if ((Control.ModifierKeys == Keys.None))
{
c1FlexGrid1.Enabled = false; // FlexGridを不活性化
}
}
private void c1FlexGrid1_AfterScroll(object sender, RangeEventArgs e)
{
// マウスボタンが押下されていない場合
if ((Control.MouseButtons == MouseButtons.None))
{
Console.WriteLine("if内 : MouseButtons = " + Control.MouseButtons.ToString());
e.Cancel = true;
}
}
private void panel1_Click(object sender, EventArgs e)
{
// FlexGrid上でクリックされた場合
Rectangle rect = new Rectangle(c1FlexGrid1.Location, c1FlexGrid1.Size);
if (rect.Contains(panel1.PointToClient(Control.MousePosition)))
{
// FlexGridを活性化してフォーカスを設定
c1FlexGrid1.Enabled = true;
c1FlexGrid1.Select();
// クリックされた位置のセルをアクティブセルに設定
HitTestInfo htInfo = c1FlexGrid1.HitTest();
if ((htInfo.Type == C1.Win.C1FlexGrid.HitTestTypeEnum.Cell))
{
c1FlexGrid1.Col = htInfo.Column;
c1FlexGrid1.Row = htInfo.Row;
}
}
}
}
}
旧文書番号
86220