- 題名: 水平スクロールバーの非表示
- 日時: 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になっており、
スクロールバーが自動的に表示されるようになっています。
そこで質問なのですが
水平(横)スクロールバーを表示したくありません。
ラベルを画面サイズより右にドラッグアンドドロップをすると
スクロールバーが表示されてしまいます。
画面サイズより右にドラッグアンドドロップされたときは
画面サイズのぎりぎりに配置したいです。
水平(横)スクロールバーを表示しないためにはどうしたらいいでしょうか?