シートがスクロールされない場合の対処方法

文書番号 : 16856     文書種別 : 使用方法     最終更新日 : 2005/02/03
文書を印刷する
対象製品
El Tabelle for .NET
詳細
WorkBook/Sheet コントロールは、マウスのホイールを使用したスクロールに対応しています。しかし、OS の標準機能以外の拡張機能やドライバ、ユーティリティを使用している場合、スクロールが動作しない場合があります。

この場合、次のコーディングによって現象を改善できる場合があります。

・フォームの MouseWheel イベントを使用してアクティブなシートをコードでスクロールする。

[Visual Basic]
Imports GrapeCity.Views.ElTabelle
Imports GrapeCity.Win.ElTabelle
Imports GrapeCity.Win.Editors

Private Sub Form1_MouseWheel(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseWheel
  Dim intScrollCount As Integer = -(e.Delta / 40)

  If TypeOf Me.ActiveControl Is Sheet Then
    Dim objActiveSheet As Sheet = CType(Me.ActiveControl, Sheet)

    If intScrollCount > 0 Then
      '下方向のスクロールの場合
      If objActiveSheet.ActivePosition.Row + intScrollCount < _
        objActiveSheet.MaxRows Then
        objActiveSheet.ActivePosition = New Position( _
          objActiveSheet.ActivePosition.Column, _
          objActiveSheet.ActivePosition.Row _
          + intScrollCount)
      End If
    Else
      '上方向のスクロールの場合
      If objActiveSheet.ActivePosition.Row + intScrollCount > -1 Then
        objActiveSheet.ActivePosition = New Position( _
          objActiveSheet.ActivePosition.Column, _
          objActiveSheet.ActivePosition.Row _
          + intScrollCount)
      End If
    End If
  End If
End Sub


[C#]
using GrapeCity.Views.ElTabelle;
using GrapeCity.Win.ElTabelle;
using GrapeCity.Win.Editors;

private void Form1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
  //Dim intScrollCount As Integer = -(e.Delta / 40)
  int intScrollCount = -(e.Delta / 40);
  if((this.ActiveControl as Sheet) != null)
  {
    Sheet objActiveSheet = (Sheet)this.ActiveControl;
    if(intScrollCount > 0)
    {
      //下方向のスクロールの場合
      if(objActiveSheet.ActivePosition.Row + intScrollCount <
        objActiveSheet.MaxRows)
      {
        
        objActiveSheet.ActivePosition = new Position(
          objActiveSheet.ActivePosition.Column,
          objActiveSheet.ActivePosition.Row +
          intScrollCount);
      }
    }
    else
    {
      //上方向のスクロールの場合
      if(objActiveSheet.ActivePosition.Row + intScrollCount > -1)
      {
        objActiveSheet.ActivePosition = new Position(
          objActiveSheet.ActivePosition.Column,
          objActiveSheet.ActivePosition.Row +
          intScrollCount);
      }
    }
  }
}


・フォームの垂直スクロール、水平スクロールのメッセージを処理する。

[Visual Basic]
Imports GrapeCity.Views.ElTabelle
Imports GrapeCity.Win.ElTabelle
Imports GrapeCity.Win.Editors

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
  Const WM_HSCROLL As Integer = &H114
  Const WM_VSCROLL As Integer = &H115
  Const WM_MOUSEWHEEL As Integer = &H20A

  Select Case m.Msg
    Case WM_HSCROLL
      '水平スクロールの場合の処理
      Debug.WriteLine("WM_HSCROLL")
    Case WM_VSCROLL
      '垂直スクロールの場合の処理

      '対策(1): 垂直スクロールバーのメッセージをホイールマウスのメッセージに変換する
      m.Msg = WM_MOUSEWHEEL

       '対策(2): 垂直スクロールバーのスクロール数分だけ、シートをスクロールする
       'If m.WParam.ToInt32() > 0 Then
       '  '下方向のスクロールの場合
       '  If Sheet1.ActivePosition.Row + m.WParam.ToInt32() < _
       '    Sheet1.MaxRows Then
       '    Sheet1.ActivePosition = New Position( _
       '      Sheet1.ActivePosition.Column, _
       '      Sheet1.ActivePosition.Row + _
       '      m.WParam.ToInt32())
       '  End If
       'Else
       '  '上方向のスクロールの場合
       '  If Sheet1.ActivePosition.Row + m.WParam.ToInt32() > -1 Then
       '    Sheet1.ActivePosition = New Position( _
       '      Sheet1.ActivePosition.Column, _
       '      Sheet1.ActivePosition.Row + m.WParam.ToInt32())
       '  End If
       'End If
       Debug.WriteLine("WM_VSCROLL")
     Case WM_MOUSEWHEEL
      'ホイールスクロールの場合の処理
      'Debug.WriteLine("WM_MOUSEWHEEL")
  End Select

  MyBase.WndProc(m)
End Sub


[C#]
using GrapeCity.Views.ElTabelle;
using GrapeCity.Win.ElTabelle;
using GrapeCity.Win.Editors;

protected override void WndProc(ref Message m)
{
  const int WM_HSCROLL = 0x114;
  const int WM_VSCROLL = 0x115;
  const int WM_MOUSEWHEEL = 0x20A;

  switch (m.Msg)
  {
    case WM_HSCROLL:
      //水平スクロールの場合の処理
      System.Diagnostics.Debug.WriteLine("WM_HSCROLL");
      break;
    case WM_VSCROLL:
      //垂直スクロールの場合の処理

      //対策(1): 垂直スクロールバーのメッセージをホイールマウスのメッセージに変換する
      m.Msg = WM_MOUSEWHEEL;

      //対策(2): 垂直スクロールバーのスクロール数分だけ、シートをスクロールする
//          if(m.WParam.ToInt32() > 0)
//          {
//            //下方向のスクロールの場合
//            if(this.sheet1.ActivePosition.Row + m.WParam.ToInt32() < this.sheet1.MaxRows)
//            {
//              this.sheet1.ActivePosition = new Position(
//                this.sheet1.ActivePosition.Column,
//                this.sheet1.ActivePosition.Row + m.WParam.ToInt32());
//            }
//          }
//          else
//          {
//            //上方向のスクロールの場合
//            if(this.sheet1.ActivePosition.Row + m.WParam.ToInt32() > -1)
//            {
//              this.sheet1.ActivePosition = new Position(
//                this.sheet1.ActivePosition.Column,
//                this.sheet1.ActivePosition.Row + m.WParam.ToInt32());
//            }
//          }

      System.Diagnostics.Debug.WriteLine("WM_VSCROLL");
      break;
    case WM_MOUSEWHEEL:
      //ホイールスクロールの場合の処理
      System.Diagnostics.Debug.WriteLine("WM_MOUSEWHEEL");
      break;
  }

  base.WndProc (ref m);
}
キーワード
問題

この文書は、以前は次のFAQ IDで公開されていました : 6637