NullScrollクラス
NullScrollは、Windows Phone(以下、WM) で画面の上下左右スクロールを簡単に実装するためのクラスです。簡単に画面をタッチスクロールに対応させることができます。
画像のような、各種コントロールが並んでいる Panel の余白部分や、Panel 上のコントロールをドラッグすると、その Panel 自体をスクロールさせることができます。*1
設定画面などの多数のコントロールを画面に並べる場合でも、画面タッチの移動を実装することができます。またこのクラスは数量のコードを追加するだけで実装することが可能で、既存のコードにほとんど影響を与えません。
WM 6.5 以降であれば、Windows Mobile Managed Gestures Sample に含まれているAutoGestureContext を使用することで、タッチスクロール可能なフォームを作成することができますが、この NullScroll を使用すれば WM 6.5 以前でも画面スクロールをさせることができます。
開発環境
- Visual Studio 2008
- .NET Compact Framework 2.0 以降
- WM 6.5, WM 6 + .NET CF 2.0 で動作確認 ( WM 5.0 でもおそらく動作可能 )
使い方
基本的な使い方
実装は本当にシンプルで、
- NullScroll クラスのインスタンスを生成し
- スクロールさせる対象のフォームやコントロールを指定する
これだけでスクロール可能にすることができますので、既存のコードやデザイナに悪影響を与えることはありません。 (AutoGestureのように慣性移動はしません)
using SmartPDA.Windows.Forms; NullScroll scroll; private void Form_Load(object sender, EventArgs e) { // インスタンスを生成 this.scroll = new NullScroll(); // 除外クラスを設定する // // フォーム上のコントロールをドラッグすることで、フォームのスクロールができますが // スクロールをしないようにするコントロールを、インスタンスかクラスのタイプで指定することができます。 // (WMデフォルトの動作を優先させたい場合に除外指定します。) this.scroll.Excludes.Add(this.checkBox1); this.scroll.ExcludeTypes.Add(typeof(ListBox)); // このフォームがスクロールするように設定 this.scroll.Setup(this); // 移動したときのイベントを拾いたい場合 this.scroll.BeforeAnimate += new OwnerAnimateHandler(scroll_BeforeAnimate); this.scroll.AfterAnimate += new OwnerAnimateHandler(scroll_AfterAnimate); // こちらは解除する場合 // this.scroll.Release(); }
WM 6.5 以降で Gesture API を共存する方法
WM 6.5以降で動作させるときに Gesture API と切り替えて使用する場合は、以下のようにします。 (Windows Mobile Managed Gestures SampleのMicrosoft.WindowsMobile.Gestures.dllを参照に追加します)
using Microsoft.WindowsMobile.Gestures; NullScroll scroll; AutoGestureContext agc; private void NullScrollRunner_Load(object sender, EventArgs e) { if (this.IsOverWM65()) { this.agc = AutoGestureContext.GetContext(this); this.agc.IgnorePan = false; this.agc.IgnoreScroll = false; this.agc.IsHorizontallyScrollable = true; this.agc.IsVerticallyScrollable = true; } else { this.scroll = new NullScroll(); this.scroll.Excludes.Add(this.checkBox1); this.scroll.ExcludeTypes.Add(typeof(ListBox)); this.scroll.Setup(this); } } private bool IsOverWM65() { // バージョンを取得する Version osVer = System.Environment.OSVersion.Version; // WM 6.5 以降であるかどうか判定 if (osVer.Major >= 5 && osVer.Minor >= 2) { // OS 6.5 以降である if (osVer.Build > 21000) { return true; } } // WM6.5 以降ではない return false; }
著作権及び免責
著作権
NullScroll の著作権は、Smart-PDA.net 管理者 Mikio Fukushima が保持しています。NullScroll は自己責任の上でご利用ください。ソースコードの流用、DLL の同梱・再配布なども適当に行ってください。
履歴
2010-06-27
スクロール前後に発生するイベント AfterAnimate, BeforeAnimate を追加した。
2010-06-26
初版リリース
ダウンロード
*1 スクロールすることが可能なクラスは ScrollableControl を継承しているクラスです。