スクロール可能なパネルと2つのコントロールが重ねて表示されているフォームがあります。そのフォームがアクティブになっている特定の条件に基づいて、私は2つのコントロールの可視プロパティを入れ替えるかもしれません。これらのコントロールは、スクロール可能なパネルの下部にあります。私がフォームを下にスクロールしたままにしておくと、コントロールの視認性をスワップさせ、そのフォームに戻って表示コントロールが200pxほど下がって大きなギャップを残すようになる条件を変更します。誰がこれを引き起こしているのか知っていますか?私は、フォームの上にスクロールバーの位置をリセットしようとしましたが、それはちょうど小さなギャップを引き起こし、時にはコントロールが他のコントロールに移動することがあります。何か案は?スクロールバーの位置が移動している可視/非表示の変更コントロール
答えて
いいえrepro。 Visibleプロパティを変更する以上のことをしていると聞こえます。 Locationプロパティを割り当てるたびに、AutoScrollPositionを追加してスクロール状態を補正する必要があります。これが役に立たない場合は、コードを投稿してください。
それは本当に私がやっている唯一のことです。あるコントロールで可視性を無効にし、別のコントロールで可視化を無効にするコードをコメントアウトして、両方を表示したままにしておくと、フォームのスクロール位置から離れても同じ位置にとどまりません。 AutoScrollPositionを使って遊んでいきますが、何か作業ができないかどうかを確認します。また、コントロールのプロパティには、プログラムではなく、場所が設定されています。 – novacara
私はこれを最善の答えとしてマークするつもりです。フォームを終了するたびにpanel.AutoScrollPositionを(0,0)に設定しなければなりませんでした。なぜなら、これはフォームがスクロールダウンして終了したときにのみ発生したからです。私は以前これを試していたと思いますが、パネルではなくフォーム上でAutoScrollPositionを設定していたので、もちろん動作しませんでした。私は可視性を混乱させていない場合でもそれがどちらの方法でもうまく動作して以来何が起こっているのかまだ分かりませんが...ああ! – novacara
これは、問題を再現する例です。マウスを赤いラベルの上に移動すると、button2の表示がtrueに変更され、スクロールがButton1に戻るようにジャンプします。それを修正する
public class Form123456 : Form {
public Form123456() {
Controls.Add(new UC1());
}
public class UC1 : UserControl {
Button b1 = new Button { Text = "Button1" };
Label lb = new Label { Text = "_", AutoSize = true, BackColor = Color.Red };
Button b2 = new Button { Text = "Button2", Visible = false };
Button b2b = new Button { Text = "x" };
Button b3 = new Button { Text = "Button3" };
public UC1() {
AutoScroll = true;
Dock = DockStyle.Fill;
b1.Location = new Point(0, 200);
b2.Location = new Point(0, 600);
lb.Location = new Point(70, 600);
b2b.Location = new Point(90, 600);
b3.Location = new Point(0, 800);
Controls.Add(b1);
Controls.Add(b2);
Controls.Add(lb);
Controls.Add(b2b);
Controls.Add(b3);
lb.MouseEnter += delegate {
b2.Visible = true;
};
lb.MouseLeave += delegate {
b2.Visible = false;
};
}
}
}
、一つの解決策は、このコードを追加することです:
protected override Point ScrollToControl(Control activeControl) {
return this.AutoScrollPosition;
}
ソリューションから: Why does clicking in a text box cause an AutoScroll panel to scroll back to the top?
はあなたが2つのコントロールの可視性を変更することを順番に確認したことがありますか? オートスクロールがtrueに設定されているコンテナのスクロールバーは、コントロールの可視領域外にあるコントロールの位置に応じて表示され消えます。見えないコントロールはカウントされません。 したがって、両方のコントロールをいつでも非表示にすると、スクロールバーが消えます。一つのコントロールが見えるようになると、彼らは戻ってくるでしょう。したがって、スクロールバーの位置とコントロールの位置にジャンプがないことを確認するには、両方のコントロールが同時に表示されないようにする必要があります。もう1つの解決策は、コンテナに疑似可視コントロールを持たせることです。これは、可視性がtrueに設定されているコントロールですが、実際には表示されません(たとえば、背景の色の点、テキストのないラベル...)。このコントロールを最も遠い位置x、yに置くと、スクロールバーが消えません。
- 1. モーダルコントローラを非表示にしない(位置を変更する)
- 2. コントロールのサイズ変更時にC#webbrowserコントロールのスクロールバーが表示されない
- 3. flex 4 - 非表示のコントロールを無視してコントロールを動的に整列/配置する
- 4. メインビューに表示されているサブビューを移動、サイズ変更、元の位置に戻す方法は?
- 5. ノックアウトjavascript非表示のコントロール、次の移動
- 6. 要素を移動してスクロールバーを表示しない方法
- 7. 可視領域の位置
- 8. 絶対絶対位置 - スクロールバーが表示されない
- 9. WebBrowserコントロールのスクロールバーを非表示にする
- 10. webBrowserコントロールのスクロールバーを非表示にする
- 11. ListBoxコントロールの垂直スクロールバーを非表示にする
- 12. #anchorsを使用してスクロールバーを追加の位置に移動する
- 13. 表示または非表示のチェックボックスすべての位置
- 14. スクロールバーが表示されているので、全幅ヘッダーが移動する
- 15. rightBarButtonItem UIAlertviewControllerが表示されているときの位置の変更
- 16. CSSの位置変更への遷移
- 17. WPF Datagridのスクロールバーの位置を変更します。
- 18. 位置:cssで固定:スクロールバーの位置に応じて、divは別の位置に表示されます
- 19. パネル上のスクロールバーの移動量が変更されました
- 20. デバイスが移動していない場合には位置更新を停止し、300mの距離を移動してその位置を取得すると
- 21. 可視性と非表示の設定
- 22. ページのサイズを変更しない限り、スクロールバーが自動的に非表示になる
- 23. 動的キャンバスの位置コントロール
- 24. コントロールのセットのスクロールバーの位置をリンクする方法は?
- 25. ロード時にスズキのスクロールバーの位置を変更する方法
- 26. フォームの値に基づいて可視性を表示/非表示にする
- 27. 大きな表示テキストの移動コントロール
- 28. QTableViewマウスポインターの表示/非表示tableviewスクロールバー
- 29. タブバーを非表示にしてUIViewの位置が正しくない
- 30. 統一変換の位置が位置を変更していません
plz画像を追加すると分かりやすくなります。 –