- 題名: 水平スクロールバーの非表示
- 日時: 2012/02/28 8:43:24
- ID: 29955
- この記事の返信元:
- (なし)
- この記事への返信:
- [29958] Re[1]: 水平スクロールバーの非表示2012/02/28 9:35:40
- ツリーを表示
■No29959に返信(麻緒さんの記事) > if((this.label.Location.X + this.label.Width) >= this.Width) > { > this.label.Location = new Point(this.Width - this.label.Width, this.label.Location.Y) > } > とこんな感じでやってみました。 それをどこに記述されていますか? ドラッグ & ドロップ操作の部分について、現在のコードがどうなっているか、 第三者が検証可能なソースコードを提示できないでしょうか。 > スクロールバーは表示され、スクロールされた一番右に配置されてしまいます。 具体的には、どの座標までならスクロールバーは表示されませんでしたか? 水平スクロールバーなしに配置できる右端の位置は、 垂直スクロールバーが表示されているかどうかで変化します。 すなわち、垂直スクロールバーが表示されている間は、 その幅(SystemInformation.VerticalScrollBarWidth)の分だけ、 配置可能領域が狭くなるという事になります。 もし、それぞれのスクロールバーの表示状態の変化によって 利用可能領域が変わってしまうことが煩わしいのであれば、 HorizontalScroll.Visible = false; VerticalScroll.Visible = true; VerticalScroll.Enabled = (false または false) のようにする手もありますが……この場合は AutoScroll プロパティを false にしておく必要があるので、今回は使えないですね。
■No29965に返信(麻緒さんの記事) > int xd = 移動予定位置X > if((xd + this.label.Width) >= this.Width) > { > this.label.Location = new Point(this.Width - this.label.Width, this.label.Location.Y) > } int xd = 移動予定位置X; int yd = 移動予定位置Y; if((xd + this.label.Width) > this.ClientRectangle.Right) { xd = this.ClientRectangle.Right - this.label.Width; } this.label.Location = new Point(xd, yd); のような感じです。
2012/02/29(Wed) 08:24:34 編集(投稿者) ■No29970に返信(麻緒さんの記事) > どういうところを提示できればいいでしょうか? 例えばvb.netソースですが、以下のような感じ。最低限動きが読める程度 UserControl1: Label1 as Labelが貼り付けてある(プロパティはすべて初期値) Public Sub MoveLabel(x As Integer, y As Integer) If Not Me.VerticalScroll.Visible AndAlso y + Label1.Height > Me.ClientRectangle.Height Then If x + Label1.Width > Me.ClientRectangle.Right - SystemInformation.VerticalScrollBarWidth Then x = Me.ClientRectangle.Right - SystemInformation.VerticalScrollBarWidth - Label1.Width End If Else If x + Label1.Width > Me.ClientRectangle.Right Then x = Me.ClientRectangle.Right - Label1.Width End If End If Label1.Location = New Point(x, y) End Sub Form1: UserControl11 as UserControl1(サイズを適当に調整) Button1〜4 as Buttonが貼り付けてある。 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click UserControl11.MoveLabel(0, 0) End Sub Private Sub Button2_Click(sender As Object, e As System.EventArgs) Handles Button2.Click UserControl11.MoveLabel(UserControl11.Width + 20, 0) End Sub Private Sub Button3_Click(sender As Object, e As System.EventArgs) Handles Button3.Click UserControl11.MoveLabel(0, UserControl11.Height + 20) End Sub Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click UserControl11.MoveLabel(UserControl11.Width + 20, UserControl11.Height + 20) End Sub
■No29986に返信(麻緒さんの記事) > this.Left += e.X - _mousePos.X; > this.Top += e.Y - _mousePos.Y; 同様の処理というのはこの部分について ClientRectangle.Right(-VerticalScrollBarWidth) より右に配置しないようにするということです。
分類:[.NET]
ユーザーコントロールで
ラベルがドラッグアンドドロップで移動可能
というプログラムを作っています。
そこで、AutoScrollがTrueになっており、
スクロールバーが自動的に表示されるようになっています。
そこで質問なのですが
水平(横)スクロールバーを表示したくありません。
ラベルを画面サイズより右にドラッグアンドドロップをすると
スクロールバーが表示されてしまいます。
画面サイズより右にドラッグアンドドロップされたときは
画面サイズのぎりぎりに配置したいです。
水平(横)スクロールバーを表示しないためにはどうしたらいいでしょうか?