PDA

View Full Version : تغییر اندازه listview با توجه به تعداد ایتم ها پر شده....



yekta64
پنج شنبه 24 تیر 1389, 14:21 عصر
سلام دوستان
من در فرمم یه کنترل listview دارم که داده هاش رو از دیتابیس می خونم حالا می خوام سایز این کنترل با توجه به تعداد ایتم هاش تغییر کنه چطور باید این کارو رو انجام بدم؟؟؟؟

mohammad.moosaei
پنج شنبه 24 تیر 1389, 16:47 عصر
منظورتون رو درست متوجه نشدم اما اگه Listview در یک Panel خاص کاملا Dock باشه خودش اتوماتیک سایزش رو تغییر میده .

لطفا بیشتر توضیح بدین:متفکر:

vbworm
پنج شنبه 24 تیر 1389, 16:56 عصر
ListBox1.Height = CDbl(ListBox1.Items.Count + 1) * CDbl(ListBox1.ItemHeight)

ACorvinus
پنج شنبه 24 تیر 1389, 17:37 عصر
سلام.

خسته نباشین. میدونم میخواین چیکار کنین و فکر کنم تا حالا به جوابتون رسیده باشین ولی این کارتون درست نیست. اینو دوستانه بهتون میگم.

vbworm
پنج شنبه 24 تیر 1389, 17:40 عصر
سلام.

خسته نباشین. میدونم میخواین چیکار کنین و فکر کنم تا حالا به جوابتون رسیده باشین ولی این کارتون درست نیست. اینو دوستانه بهتون میگم.

دوستمون درست میگه، چون اگه آیتمهای لیست باکست زیاد باشه، تهش از فرم میزنه بیرون :گیج:

yekta64
جمعه 25 تیر 1389, 13:25 عصر
ListBox1.Height = CDbl(ListBox1.Items.Count + 1) * CDbl(ListBox1.ItemHeight)



سلام
دوست عزیز من از لیست باکس نمی خوام استفاده کنم بلکه می خوام از لیست ویو استفاده کنم

ممنون میشم راهنمایی کنید

yekta64
جمعه 25 تیر 1389, 13:27 عصر
سلام.

خسته نباشین. میدونم میخواین چیکار کنین و فکر کنم تا حالا به جوابتون رسیده باشین ولی این کارتون درست نیست. اینو دوستانه بهتون میگم.

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

من داده ها رو از دیتابیس می خونم و در هر مرحله تعداد متفاوتی داده در لیست ویو قرار می گیره

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

yekta64
جمعه 25 تیر 1389, 13:33 عصر
منظورتون رو درست متوجه نشدم اما اگه Listview در یک Panel خاص کاملا Dock باشه خودش اتوماتیک سایزش رو تغییر میده .

لطفا بیشتر توضیح بدین:متفکر:


سلام مرسی دوست عزیز
یعنی اگه لیست ویو رو در یه پنل قرار بدم و داده ها رو از دیتابیس بخونم و در لیست ویو قرار بدم با توجه به تعداد ایتم های قرار گرفته د ر لیست ویو سایز اون تغییر می کنه؟؟؟؟

یا به عبارتی سایز پنل با این کار تغییر می کنه البته اگه پنل رو autosize بذارم؟؟؟؟؟
مرسی

mohammad.moosaei
جمعه 25 تیر 1389, 17:53 عصر
سلام مرسی دوست عزیز
یعنی اگه لیست ویو رو در یه پنل قرار بدم و داده ها رو از دیتابیس بخونم و در لیست ویو قرار بدم با توجه به تعداد ایتم های قرار گرفته د ر لیست ویو سایز اون تغییر می کنه؟؟؟؟

یا به عبارتی سایز پنل با این کار تغییر می کنه البته اگه پنل رو 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

yekta64
جمعه 25 تیر 1389, 21:44 عصر
سلام دوست عزیز :

من منظور شما رو خوب متوجه نشده بودم ، اما حلا این کد رو براتون آماده کردم شاید به دردتون بخوره :

راستی هنگام استفاده از این کد سایز 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



سلام
مرسی دوست عزیز
میشه در مورد این کد یه مقدار توضیح بدید اخه این کد لیست ویو رو تغییر سایز نمی ده ؟؟؟؟

mohammad.moosaei
جمعه 25 تیر 1389, 23:39 عصر
سلام
مرسی دوست عزیز
میشه در مورد این کد یه مقدار توضیح بدید اخه این کد لیست ویو رو تغییر سایز نمی ده ؟؟؟؟

شما یک Listview بساز و بعد این کد رو توی رویداد کلیک یک دکمه امتحان کن . بعد ببین جواب میده یا نه؟:متفکر:

فقط یادتون باشه که ListView در حالت LargeIcon باشه و اندازه اون هم فقط به اندازه ردیف اول item ها باشه .

این کد به طور خلاصه میاد هر بار چک می کنه که اگه یک ردیف از Itemها پر شدند Listview رو Resize می کنه .

یک نکته :

اگه بتونی هنگام هر بار اضافه کردن itemها تشخیص بدی که Scroll ظاهر شده یا نه به راحتی می تونی به هدفت برسی . دیگه نیازی به کد های بالا هم نیست . من که نتونستم این کار رو انجام بدم ببیبن اگه تونیست کدش رو بزار تا برات تکمیل کنم .

ACorvinus
شنبه 26 تیر 1389, 23:58 عصر
پیغام خصوصی رو حتما بخون.

53066