- PR -

TextBoxのスクロールバー位置(C#)

1
投稿者投稿内容
bucci
会議室デビュー日: 2005/11/01
投稿数: 18
投稿日時: 2005-12-22 10:01
TextBoxのスクロールバーの位置を取得したいと考えています。
必要とする情報は、スクロールバーが一番下にきているかどうかです。
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-25 18:39
どなたからも回答がないようなので...

引用:

bucciさんの書き込み (2005-12-22 10:01) より:

TextBoxのスクロールバーの位置を取得したいと考えています。
必要とする情報は、スクロールバーが一番下にきているかどうかです。


Win32API の GetScrollPos 関数と、GetScrollRange 関数について調べてみてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-25 18:59
何となくですが、こんなものを投下です。

コード:

using System;
using System.Runtime.InteropServices;

namespace WindowsAPI {

    public sealed class User32 {

      #region ScrollBarKind 列挙体 

        public enum ScrollBarKind {
            Horizonal = 0x0000,
            Vertical  = 0x0001
        }

      #endregion

      #region GetScrollPos 関数 

        [DllImport("USER32.DLL", CharSet=CharSet.Auto)]
        private static extern int GetScrollPos(
            System.IntPtr handle,
            ScrollBarKind kind
        );

      #endregion

      #region GetScrollRange 関数 

        [DllImport("USER32.DLL", CharSet=CharSet.Auto)]
        private static extern bool GetScrollRange(
            System.IntPtr handle,
            ScrollBarKind kind,
            out int iMinimum,
            out int lMaximum
        );

      #endregion

      #region IsScrollBarFirst メソッド 

        public static bool IsScrollBarFirst(System.IntPtr handle, ScrollBarKind kind) {
            int iMinimum = 0;
            int iMaximum = 0;

            // スクロール バーの範囲を取得する
            if (! GetScrollRange(handle, kind, out iMinimum, out iMaximum)) {
                return false;
            }

            // 現在のスクロール位置を取得する
            int iPostion = GetScrollPos(handle, kind);

            // スクロール バーの位置が最小でない
            if (iPostion > iMinimum) {
                return false;
            }

            return true;
        }   

      #endregion

      #region IsScrollBarEnd メソッド 

        public static bool IsScrollBarEnd(System.IntPtr handle, ScrollBarKind kind) {
            int iMinimum = 0;
            int iMaximum = 0;

            // スクロール バーの範囲を取得する
            if (! GetScrollRange(handle, kind, out iMinimum, out iMaximum)) {
                return false;
            }

            // 現在のスクロール位置を取得する
            int iPostion = GetScrollPos(handle, kind);

            // スクロール バーの位置が最大でない
            if (iPostion < iMaximum - 1) {
                return false;
            }

            return true;
        }   

        #endregion

    }
}


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
bucci
会議室デビュー日: 2005/11/01
投稿数: 18
投稿日時: 2005-12-26 06:11
お返事ありがとうございます。
勉強をして、コードを理解しTryしてみます!
少し時間がかかるかもしれませんが、
結果はここに投稿します。

ありがとうございました^^
bucci
会議室デビュー日: 2005/11/01
投稿数: 18
投稿日時: 2005-12-26 08:00
IsScrollBarEndでうまく動いていなかったため、
下記の通りに修正をおこない、スクロールバーの位置が
一番下にあるか判断することができました。ありがとうございました。

---------------------------------------------------
IsScrollBarEnd メソッド


// スクロール バーの位置が最大でない
//if (iPostion < iMaximum - 1) {
if (iPostion + 【TextBoxの表示行数】 -1 < iMaximum) {
    return false;
}


---------------------------------------------------


[ メッセージ編集済み 編集者: bucci 編集日時 2005-12-28 07:48 ]
1

スキルアップ/キャリアアップ(JOB@IT)