- - PR -
(windowsアプリ)パネル内のコントロールにフォーカスを移動するとスクロールバーが動く
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-20 13:26
vb.netでwindowsアプリケーションを作成しています。
フォーム内にパネルを作成しAutoScroll=trueとします。 パネル内にフォーカスがあたるコントロールA(ボタンなど)をパネルよりも大きなサイズで配置します。 パネル外にフォーカスがあたるコントロールBを配置します。 この画面でパネルのスクロールバーを下に移動した状態で コントロールBからコントロールAにフォーカスを移すと スクロールバーが勝手に動きコントロールAの左上のほうを表示してしまいます。 このフォーカス移動時のスクロールバーの動作を止めることは出来ないのでしょうか? コントロールBのenableをfalseにすると起こらないのですが、コントロールBのイベントは取得したいのでenableはtrueにしています。 | ||||
|
投稿日時: 2005-01-19 09:31
私も同じ現象で悩んでいます。
どうにか、スクロールさせない方法は無いのでしょうか? | ||||
|
投稿日時: 2005-01-19 10:00
解決しました。
コントロールBのEnterイベントでEnable = Falseにして、すぐにEnable = Trueにすることで スクロールを無効化することが出来ました。 | ||||
|
投稿日時: 2005-01-19 10:51
カウンターさんの手順を実装すると、Tabキーによるフォーカスの移動ができなくなり、結果として挙動が変わってしまうと思います。
私が試した手順は次の通りです。 1.WindowsフォームにPanel1を追加し、Panel1.AutoScroll=Trueを設定 2.Panel1にパネルより大きなTextBox1を追加 3.パネルの外にTextBox2を追加 4.次のコードを記述
5.実行してTabキーによってフォーカスを移動させてみる(フォーカスが移動しません) 6.4のコードをコメントアウトして実行してみる(フォーカスが移動します) これは私見ですが、AutoScroll=Trueとしたときに、パネル内のフォーカスを得たコントロールが可視となるようにスクロールされるのは、ほとんどのケースにおいて妥当な動作と考えられます。 この「妥当な動作」に沿うようにアプリケーションのUI設計を見直すほうが苦労は少ないかもしれません。(もちろん、それが可能であればの話ですが) | ||||
|
投稿日時: 2005-01-19 12:15
無理やりっぽいですが、イベントを2つ作成して Panel 内のコントロールに登録すれば大丈夫なようです。(とりあえずボタンのみ確認)
復元処理は Move と LocationChanged イベントのどちらでも可。 フォーカスコントロールが完全にスクロールアウトしている場合はコントロール自体見えませんのでご注意を... # C# です...
|
1