PDA

View Full Version : رنگی کردن ردیف انتخابی در ListView



S_VB.max
سه شنبه 07 فروردین 1386, 12:13 عصر
سلام

در ListView رکورد ها را به صورت lvwReport نمایش دادم حالا می خوام وقتی روی یک ردیف دوبار کلیک می کنم آن ردیف رنگی شود (منظورم رنگ حالت انتخاب نیست مثلا رنگ سبز شود) چه جوری می تونم این کار را بکنم ؟

CodeMasterX
سه شنبه 07 فروردین 1386, 13:33 عصر
یه کنترل ListView به فرمت اضافه کن و کد زیر رو تو قسمت General فرمت بنویس:



Private Sub AltLVBackground(lv As ListView, _
ByVal BackColorOne As OLE_COLOR, _
ByVal BackColorTwo As OLE_COLOR)
'---------------------------------------------------------------------------------
' Purpose : Alternates row colors in a ListView control
' Method : Creates a picture box and draws the desired color scheme in it, then
' loads the drawn image as the listviews picture.
'---------------------------------------------------------------------------------
Dim lH As Long
Dim lSM As Byte
Dim picAlt As PictureBox
With lv
If .View = lvwReport And .ListItems.Count Then
Set picAlt = Me.Controls.Add("VB.PictureBox", "picAlt")
lSM = .Parent.ScaleMode
.Parent.ScaleMode = vbTwips
.PictureAlignment = lvwTile
lH = .ListItems(1).Height
With picAlt
.BackColor = BackColorOne
.AutoRedraw = True
.Height = lH * 2
.BorderStyle = 0
.Width = 10 * Screen.TwipsPerPixelX
picAlt.Line (0, lH)-(.ScaleWidth, lH * 2), BackColorTwo, BF
Set lv.Picture = .Image
End With
Set picAlt = Nothing
Me.Controls.Remove "picAlt"
lv.Parent.ScaleMode = lSM
End If
End With
End Sub


حالا توی متد Form_Load() این رو بنویس:



AltLVBackground ListView1, vbWhite, &H8000000D


همونطور که میبینی کار زنگ آمیزی رو برات انجام میده.حالا اینکه برای DblClick این کار رو بکنی دیگه به عهده خودت هست.

S_VB.max
سه شنبه 07 فروردین 1386, 16:02 عصر
ممنون دوست عزیز

اینا می دونستم که چجوری تمام ردیفهای لیست ویو را یک در میان رنگی کنم
http://www.barnamenevis.org/forum/showpost.php?p=292704&postcount=4
که البته کد شما راحتتر اینکار را کرده
مشکل اصلی من همین جاست که چجوری با دوبار کلیک کردن روی یک ردیف تنها همان ردیف رنگی شود اگه میشه راهنمایی کنید چی کار باید بکنم .

CodeMasterX
سه شنبه 07 فروردین 1386, 16:12 عصر
یکمی خلاقیت به خرج بده.به کد اگه یه نگاهی بندازی میبینی که یه کنترل PictureBox در زمان اجرا تولید میشه و به عنوان عکس ListView در نظر گرفته میشه.شما می تونی با تغییر طول و عرض این PictureBox به طول و عرض ردیف مورد نظر که دابل کلیک شده، عکس رو بهش نسبت بدی.اگه برات کد مستقیم رو نمی ذارم شرمنده،وقتی خودت بنویسیش خیلی فرق داره،کلی هم کیف میکنی!

S_VB.max
سه شنبه 07 فروردین 1386, 21:58 عصر
این کد را نگاه کنید فقط یک اشکال کوچیک داره و اون اینه که حتما باید روی آیتمهای ستون اول کلیک کرد تا آن ردیف رنگی شود .
اگر بتوان وقتی با کلیک کردن روی آیتمهای دیگر (به غیر از ستون اول) ایندکس ردیف را بدست آورد مشکل حل می شود اما چجوری ؟



Private Sub ListView1_DblClick()
Me.ScaleMode = vbTwips
Picture1.BackColor = ListView1.BackColor
Picture1.ScaleMode = vbTwips
Picture1.BorderStyle = 0
Picture1.AutoRedraw = True
Picture1.Visible = False

Picture1.Width = ListView1.Width
Picture1.Height = ListView1.ListItems(1).Height * (ListView1.ListItems.Count)
Picture1.ScaleHeight = ListView1.ListItems.Count
Picture1.ScaleWidth = 1
Picture1.DrawWidth = 1
Picture1.Cls

Picture1.Line (0, ListView1.SelectedItem.Index - 1)-(1, ListView1.SelectedItem.Index), vbYellow, BF

ListView1.Picture = Picture1.Image
End Sub

CodeMasterX
سه شنبه 07 فروردین 1386, 23:43 عصر
Listview1.ListItems(1).ListSubItems(1)

بدست آوردن اندیس که کاری نداره!

S_VB.max
چهارشنبه 08 فروردین 1386, 00:12 صبح
Listview1.ListItems(1).ListSubItems(1)

بدست آوردن اندیس که کاری نداره!
ListView1.ListItems(1).ListSubItems(1).Index
این فقط اندیس ردیف اول را می ده (من اندیس ردیف انتخابی را می خوام)

من با این کد هم امتحان کردم ولی فقط اندیس یک را برمیگرداند
ListView1.SelectedItem.ListSubItems(1).Index

S_VB.max
چهارشنبه 08 فروردین 1386, 20:50 عصر
مشکل حل شد

CodeMasterX
چهارشنبه 08 فروردین 1386, 23:39 عصر
دیدی گفتم!
کمی تلاش و پشتگار همه چیز رو حل میکنه.
موفق باشی!

S_VB.max
پنج شنبه 09 فروردین 1386, 08:57 صبح
خیلی ممنون از راهنمایی شما:لبخند: