PDA

View Full Version : نمایش ScrollBars در دیتاگرید



edisoon
دوشنبه 22 مهر 1387, 00:33 صبح
دوستان، چطوری میتونم Vertical ScrollBar یک دیتاگرید رو بصورت دائم Visible کنم؟
در حالت نرمال Vertical ScrollBar فقط وقتی نمایش داده میشه که گرید تعداد سطرهای زیادی داشته باشه ولی من میخوام اگر تعداد سطرها کمتر از اندازه هم بود ScrollBar Vertical باز هم نمایش داده بشه و جاش خالی نباشه.

rooshan2008
دوشنبه 22 مهر 1387, 03:26 صبح
سلام

من از خود دیتا گرید مستقیم تا حالا ندیدم ولی یه روش بلدم و بسیار هم جالب هست تغریباً هر بلایی که می خواستم روی هر شیی که دوست داشتم در می آوردم.

بعضی وقت ها هست که برنامه نویس نیاز داره چند تا خاصیت به خاصیت های یک کنترول اضافه کنه برای این کار از وراثت استفاده می شه

همین الان من یکی رو با سرعت درست کردم و اون چیزی رو که تو خاستی براش گزاشتم

اگه می خوای این کار رو انجام بدی اول یه پروژه Windows Forms Appliction درست کن .بعد یک کلاس به پروژت اظافه کن( متن پیش فرضی رو که داخل کلاس بود رو پاک کن) و بعد کد زیر رو داخلش بطور کامل کپی کن






Public

Class RoshanDataGrid : Inherits DataGridView

Dim VScroll AsNew VScrollBar
Dim HScroll AsNew HScrollBar
Dim Show_v AsBoolean = True
Dim Show_H AsBoolean = True
PublicProperty ShowVscroll_Roshan() AsBoolean
Get
Return Show_v
EndGet
Set(ByVal value AsBoolean)
Show_v = value
If value Then
ShowV()
HScroll.Width = Me.Width - IIf(VScroll.Visible, VScroll.Width, 0)
VScroll.Show()
Else
VScroll.Hide()
EndIf
EndSet
EndProperty
PublicProperty ShowHscroll_Roshan() AsBoolean
Get
Return Show_H
EndGet
Set(ByVal value AsBoolean)
Show_H = value
If value Then
ShowV()
HScroll.Show()
Else
HScroll.Hide()
EndIf
EndSet
EndProperty
PrivateSub ShowV()
VScroll.Parent = Me
VScroll.Top = 0
VScroll.Enabled = False
VScroll.Maximum = 0
VScroll.Height = Me.Height
IfMe.RightToLeft = Windows.Forms.RightToLeft.Yes Then
VScroll.Left = 0
Else
VScroll.Left =


Me.Width - VScroll.Width

EndIf
EndSub
PrivateSub ShowH()
VScroll.Maximum = 1
HScroll.Parent = Me
HScroll.Enabled =


False

IfMe.RightToLeft = Windows.Forms.RightToLeft.Yes Then
HScroll.Left = VScroll.Width
Else
HScroll.Left = 0
EndIf
HScroll.Width =


Me.Width - IIf(VScroll.Visible, VScroll.Width, 0)

HScroll.Top = Me.Height - HScroll.Height
HScroll.RightToLeft = Me.RightToLeft
EndSub
PrivateSub RoshanDataGrid_Paint(ByVal sender AsObject, ByVal e As System.Windows.Forms.PaintEventArgs) HandlesMe.Paint
ShowV()
ShowH()
EndSub
PrivateSub RoshanDataGrid_Resize(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Resize
ShowV()
ShowH()
EndSub
PrivateSub RoshanDataGrid_RightToLeftChanged(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.RightToLeftChanged
ShowV()
ShowH()
EndSub
PrivateSub RoshanDataGrid_Scroll(ByVal sender AsObject, ByVal e As System.Windows.Forms.ScrollEventArgs) HandlesMe.Scroll
If e.NewValue > 0 Then
ShowHscroll_Roshan =


False

ShowVscroll_Roshan =


False

Else
ShowHscroll_Roshan =


True

ShowVscroll_Roshan =


True

EndIf
EndSub
EndClass




امید وارم تا اینجاش خوب پیش رفته باشه...


حالا از کلاس بیاید بیرون و Build بگیرید


حالا یه سری به جعبه ابزارت بزن ببین یه کنترول جدید به نام RoshanDataGrid اضافه شده


اگه این شی رو روی فرم بیاری دوتا خاصیت بهش اضافه کردم به نام های ShowHscroll_Rosh وShowVscroll_Roshan که مقدار Boolean می گیره


راستی شاید راه بهتر دیگه وجود داشته باشه...


من همین رو بلد بودم به احتمال زیاد اساتید دیگه هم نظر هایی دارن بهتر یکم منتظر بمونی


به هر حال اگه یکم مبتدی بود ببخشید.....





Program_vb2006@yahoo.com

edisoon
دوشنبه 22 مهر 1387, 08:36 صبح
دوست عزیز ممنونم، آموزنده بود. هرچند کدی که نوشته بودی رو وقتی Copy/Paste کردم کلی غلط املایی داشت، اولش که فکر کردم با زبان #U نوشتی ;) ولی بعدا فهمیدم که نه بابا این VB خودمونه، ولی غلطهای املاییش رو که رفع کردم به یه نتیجه رسیدم که وقتی Grid رو در حالت Right To Left قرار میدهم مشکل دارد.