C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

パネルの自動スクロールを止めたい

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■89942 / inTopicNo.1)  パネルの自動スクロールを止めたい
  
□投稿者/ TK-C (1回)-(2019/01/23(Wed) 09:49:20)

分類:[VB.NET/VB2005 以降] 

開発言語
VisualStdio2012 VisualBasic

フォーム上に、パネルを設置
パネル内
質問年月日:テキストボックス
質問内容:テキストボックス
回答1:テキストボックス
回答2:テキストボックス
回答3:テキストボックス
回答4:テキストボックス
回答5:テキストボックス

パネル外
編集ボタン:ボタン
登録ボタン:ボタン

パネルのAutoScrollはTrueにし、画面をスクロールして回答1〜5を閲覧するようになっています。

通常は回答1〜5は編集不可(ReadOnly = True)としていますが、
編集ボタンを押下する事で、編集可(ReadOnly = False)としています。

編集ボタンを押下した際、最上段の質問年月日にフォーカスをあてています
(マウスホイールでスクロール出来るようにする為)

パネルのスクロールバーを移動させた後、編集ボタンをクリックすると、
パネル内の最上段にフォーカスがある為、自動で最上段までスクロールされてしまいます。

編集ボタンを押下してもスクロール位置を保持したいのですが方法が分かりません。
(自動スクロールをしたくない)

御存知の方いらっしゃいましたら教えていただけませんでしょうか?
引用返信 編集キー/
■89944 / inTopicNo.2)  Re[1]: パネルの自動スクロールを止めたい
□投稿者/ せば (12回)-(2019/01/23(Wed) 10:14:51)
良い悪いはとりあえず置いておいて
質問年月日にフォーカスを当てるのをやめて
パネルにフォーカスを当てるのはどうでしょうか?
引用返信 編集キー/
■89945 / inTopicNo.3)  Re[1]: パネルの自動スクロールを止めたい
□投稿者/ Hongliang (744回)-(2019/01/23(Wed) 10:22:00)
フォーカスを当てる目的が
> (マウスホイールでスクロール出来るようにする為)
なのであれば、パネルに対してFocus()するようにすればいいかと思います。
この場合、そのまま入力を開始することができない(TABキーなりマウスなりでどこかのテキストボックスにフォーカスを移動させる必要がある)のが難点ですが。

あるいは、テキストボックスにFocus()する前にパネルのAutoScrollPositionを取って置き、
Focus()後にパネルのAutoScrollPositionを改めて設定する方法も考えられます。
// AutoScrollPositionは取得と設定で正負が逆になるのに注意。
この場合、そのまま入力を開始してもテキストボックスが画面外のままなのが難点でしょうか。TextChangedイベントでパネルのScrollControlIntoViewするという回避策はありますが。
あと稀に画面がちらつく(パネルのオートスクロールの行き来が一瞬画面に映る)というのも。
引用返信 編集キー/
■89946 / inTopicNo.4)  Re[1]: パネルの自動スクロールを止めたい
□投稿者/ shu (1163回)-(2019/01/23(Wed) 10:45:51)
No89942 (TK-C さん) に返信

表示エリア内最上段のテキストボックスにフォーカス

        Dim cl = (From c In Panel1.Controls.OfType(Of TextBox)
                  Let top = c.Top
                  Where top > 0 AndAlso top < Panel1.Height - c.Height
                  Order By top Select c).FirstOrDefault()
        cl?.focus   または   if cl isnot nothing then cl.focus

引用返信 編集キー/
■89953 / inTopicNo.5)  Re[2]: パネルの自動スクロールを止めたい
□投稿者/ TK-C (2回)-(2019/01/23(Wed) 15:26:37)
せば様
Hongliang様
shu様

回答ありがとうございました。
パネルにフォーカスを持たせることで、希望の動作を実現できるようになりました。

また、表示エリア内最上部のテキストボックスへフォーカスを持たせる方法も御教示していただき
大変勉強になりました。

ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ