سلام دوستان
من در فرمم یه کنترل listview دارم که داده هاش رو از دیتابیس می خونم حالا می خوام سایز این کنترل با توجه به تعداد ایتم هاش تغییر کنه چطور باید این کارو رو انجام بدم؟؟؟؟
سلام دوستان
من در فرمم یه کنترل listview دارم که داده هاش رو از دیتابیس می خونم حالا می خوام سایز این کنترل با توجه به تعداد ایتم هاش تغییر کنه چطور باید این کارو رو انجام بدم؟؟؟؟
منظورتون رو درست متوجه نشدم اما اگه Listview در یک Panel خاص کاملا Dock باشه خودش اتوماتیک سایزش رو تغییر میده .
لطفا بیشتر توضیح بدین
ListBox1.Height = CDbl(ListBox1.Items.Count + 1) * CDbl(ListBox1.ItemHeight)
سلام.
خسته نباشین. میدونم میخواین چیکار کنین و فکر کنم تا حالا به جوابتون رسیده باشین ولی این کارتون درست نیست. اینو دوستانه بهتون میگم.
مرسی دوست عزیز
ببیند من اگه سایز لیست ویو رو از اول به طور ثابت تعیین کنم مشکلی که پیش میاد این هستش که:
اگه تعداد دادهای که من قرار باشه توی این کنترل قرار بدم یک باشه بقیه فضای این کنترل خالی می مونه و این اصلا قشنگ نیست
من داده ها رو از دیتابیس می خونم و در هر مرحله تعداد متفاوتی داده در لیست ویو قرار می گیره
اگه شما راه حل بهتری دارید ممنون میشم من رو راهنمایی کنید.
بازم مرسی
سلام مرسی دوست عزیز
یعنی اگه لیست ویو رو در یه پنل قرار بدم و داده ها رو از دیتابیس بخونم و در لیست ویو قرار بدم با توجه به تعداد ایتم های قرار گرفته د ر لیست ویو سایز اون تغییر می کنه؟؟؟؟
یا به عبارتی سایز پنل با این کار تغییر می کنه البته اگه پنل رو autosize بذارم؟؟؟؟؟
مرسی
سلام دوست عزیز :
من منظور شما رو خوب متوجه نشده بودم ، اما حلا این کد رو براتون آماده کردم شاید به دردتون بخوره :
راستی هنگام استفاده از این کد سایز ListBox رو فقط به اندازه ردیف اول قرار بدین .
و نکته دوم این که این کد فقط برای ListBox در حالت LargeIcon صادق است .
و نکته آخر این که منم فکر میکنم که این کاری که میخوایت انجام بدین زیاد منطقی نیست .
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If (ListView1.Height + ListView1.Top < ListView1.Parent.Height - 5) Then
Static IncreasHeigth As Boolean = False
Static width As Integer = 0
If (ListView1.Items.Count > 0) Then
Dim query = From item As ListViewItem In ListView1.Items _
Where item.Bounds.Height Select item.Bounds.Height
Dim maxHeigth As Integer = query.ToArray.Max
If (IncreasHeigth) And (ListView1.Height + (maxHeigth * 2) + ListView1.Top < ListView1.Parent.Height - 5) Then
ListView1.Height += (maxHeigth * 2)
width = 0
IncreasHeigth = False
End If
ListView1.Items.Add("Items")
Else
ListView1.Items.Add("Items")
Dim query = From item As ListViewItem In ListView1.Items _
Where item.Bounds.Height Select item.Bounds.Height
Dim maxHeigth As Integer = query.ToArray.Max
If maxHeigth + ListView1.Items(0).Bounds.Top > ListView1.Height Then
ListView1.Height += (2 * maxHeigth)
End If
End If
width += ListView1.Items(0).Bounds.Width
If (ListView1.Width - ListView1.Items(0).Bounds.Width <= width) Then
IncreasHeigth = True
End If
Else
ListView1.Items.Add("Items")
End If
End Sub
شما یک Listview بساز و بعد این کد رو توی رویداد کلیک یک دکمه امتحان کن . بعد ببین جواب میده یا نه؟
فقط یادتون باشه که ListView در حالت LargeIcon باشه و اندازه اون هم فقط به اندازه ردیف اول item ها باشه .
این کد به طور خلاصه میاد هر بار چک می کنه که اگه یک ردیف از Itemها پر شدند Listview رو Resize می کنه .
یک نکته :
اگه بتونی هنگام هر بار اضافه کردن itemها تشخیص بدی که Scroll ظاهر شده یا نه به راحتی می تونی به هدفت برسی . دیگه نیازی به کد های بالا هم نیست . من که نتونستم این کار رو انجام بدم ببیبن اگه تونیست کدش رو بزار تا برات تکمیل کنم .
پیغام خصوصی رو حتما بخون.
ListView.rar