PDA

View Full Version : سوال: مشکل در لیست گرفتن



farshadrezaei
پنج شنبه 14 خرداد 1394, 13:48 عصر
سلام

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

حالا من میخوام این اسکرول بار نیاد و بقیه متن بیاد پایین

به این صورت هست

تست تست تست تست تست تست تست تست تست تست

می خوام اینطوری بشه

تست تست تست تست تست تست تست
تست تست تست

خودم که نفهمیدم چی نوشتم اگه شما متوجه شدید لطفا راهنمایی کنید

با تشکر فراوان

Mahmoud Zaad
پنج شنبه 14 خرداد 1394, 14:56 عصر
سلام
اینجا (http://stackoverflow.com/questions/18360871/can-listbox-items-span-multiple-lines-c-sharp) جواب رو گفته:
اول خاصیت DrawMode لیست باکس رو به
OwnerDrawVariable تغییر میدی.
بعد کدهای زیر رو می نویسی:
private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
{
if (e.Index == 2) e.ItemHeight = 50;//Set the Height of the item at index 2 to 50
}
//DrawItem event handler for your ListBox
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
}

فقط دو تا نکته داره اول اینکه اگه می خوای ارتفاع همه آیتم ها زیاد بشه اون شرط رو از رویداد MeasureItem بردار و فقط به شکل زیر بنویس: e.ItemHeight = 50;
اینجا ارتفاع به صورت دستی و به اندازه 50 در نظر گرفته شده.
دوم اینکه اگه میخوای ارتفاع هر آیتم دقیقاً به اندازه محتویاتش زیاد بشه باید با تابع MeasureString طول هر کدوم از کلمات رو محاسبه کنی بعد با توجه به عرض لیست باکس ببینی تو هر خط چندتا از کلمات جا میگیرن و با این کار متوجه بشی چندتا خط لازم داری حالا با همون تابع MeasureString مشخص کنی ارتفاع کلیه خطوط یک آیتم چقدر میشه. کد زیر که تو رویداد MeasureItem نوشته شده، طول نوشته های یک آیتم رو اندازه می گیره می تونی ازش ایده بگیری:
SizeF _size = e.Graphics.MeasureString(listBox1.Items[e.Index].ToString(), listBox1.Font);

farshadrezaei
پنج شنبه 14 خرداد 1394, 15:20 عصر
از شما ممنون درست شد
ولی یه مشکل دیگه ایجاد شد که همه نوشته ها چپ چین شد و هر کاری میکنم راست چین نمی شن

Mahmoud Zaad
پنج شنبه 14 خرداد 1394, 18:27 عصر
کد زیر رو به جای رویداد مربوطه جایگزین کنید:
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();

StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLef t);
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, format);
}