C#アプリケーションで登録フォームを完成させると、AutoScrollを有効にしてから、スクロールの下にテキストボックスがあり、それをクリックすると、一番上に戻ることに気づきました。いくつかのコードでこれを修正する方法はありますか、それとも適切ですか?
言葉で説明するのは少し難しいので、ここにその振る舞いを示す短いビデオがあります。
C#アプリケーションで登録フォームを完成させると、AutoScrollを有効にしてから、スクロールの下にテキストボックスがあり、それをクリックすると、一番上に戻ることに気づきました。いくつかのコードでこれを修正する方法はありますか、それとも適切ですか?
言葉で説明するのは少し難しいので、ここにその振る舞いを示す短いビデオがあります。
私は同じ問題を抱えていました。パネルで次のコードを使用して修正しました。
protected override Point ScrollToControl(Control activeControl)
{
return this.AutoScrollPosition;
}
私はこの正確な問題を抱えていました。フォームのパネルからドッキングを削除する必要があり、これで問題が修正されました。
どうやらこれまで誰もこの振る舞いを見たことがなく、すぐに答えることができたので、私はVisual Studioを開いて、あなたが説明したことを再現しようとしました。
プロパティが「True」に設定されているGroupBox
を含む新しいWinFormsプロジェクトを作成しました。次に、の中に2つの新しいコントロールを追加し、それぞれに2つのコントロールが含まれています。最初に埋め込まれたものはフォームの上部にあり、起動時に完全に表示されます。2番目の埋め込みは下部にあり、スクロールして表示する必要があります。これは、説明とビデオからわかる限り、あなたが持っているデザイン/レイアウトに相当します。Panel
AutoScroll
GroupBox
Panel
TextBox
GroupBox
GroupBox
ただし、プロジェクトを実行し、2番目の埋め込みまで下にスクロールして、含まれているコントロールGroupBox
の1つを選択すると、期待どおりに実行されます。パネル全体を上にスクロールしなくても、クリックしたコントロールがフォーカスを取得します。私はあなたが見ているものを再現することができないようです。テストサンプルの設計で私が間違ったことを教えてくれるか、経験している動作を再現するために必要な最小のサンプルプロジェクトを投稿していただければ、私がお手伝いできるかもしれません。TextBox
TextBox
それ以外の場合は、調査すべき事項のいくつかの提案があります。
フォーム上のオブジェクトのタブ順序。コントロールをクリックすると、タブオーダー内の位置に関係なく、そのコントロールにフォーカスが設定され、サンプルプロジェクトでタブオーダーを複数回ジャンブルすると、同じ効果があります。しかし、とにかく試してみる価値はあると思います。デザインモードで、[表示]メニューに移動し、[タブの順序]をクリックします。タブの順序を設定できるすべてのコントロールの左上隅に小さな色付きのボックスがあり、各コンテナでのタブの順序を示しています。タブの順序を設定するには、フォーカスしたい自然な順序で各コントロールを1回クリックします。
<Control>.Focus
orステートメントのコードを精査します<Control.Select>
。実行時にタブの順序を変更する検証コードがないことを確認してください。これにより、フォーカスが上部近くにあるコントロールに戻りPanel
、新しい場所に自動スクロールするように強制される可能性があります。
まったく新しいクリーンなプロジェクトで動作を再現してみてください。理想的には、Visual Studioで新しいプロジェクトを作成し、問題が発生しているプロジェクトでのコントロールとまったく同じ方法でコントロールをレイアウトします。これは私が行ったのと同じことです。これは、作業する特定のプロジェクトがないことと、特にトリッキーな動作をトラブルシューティングするための最良の方法であることが理由の1つです。コントロール自体に何らかのバグがあるのではなく、この動作を引き起こしているデザインまたはソースコードに何らかの癖がある可能性が高くなります。しかし、いずれにせよ、これにより、問題が発生している場所を正確に知ることができ、解決策にはるかに近づくことができます。
「Panel」の代わりに「TableLayoutPanel」を使用して、スクロールバーの位置が変更されないようにすることができます。