シートがスクロールされない場合の対処方法
対象製品
El Tabelle for .NET
詳細
WorkBook/Sheet コントロールは、マウスのホイールを使用したスクロールに対応しています。しかし、OS の標準機能以外の拡張機能やドライバ、ユーティリティを使用している場合、スクロールが動作しない場合があります。
この場合、次のコーディングによって現象を改善できる場合があります。
・フォームの MouseWheel イベントを使用してアクティブなシートをコードでスクロールする。
[Visual Basic]
[C#]
・フォームの垂直スクロール、水平スクロールのメッセージを処理する。
[Visual Basic]
[C#]
この場合、次のコーディングによって現象を改善できる場合があります。
・フォームの 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
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);
}
}
}
}
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
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);
}
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