
نوشته شده توسط
mr.sirwan
واقعا ممنون از راهنماییتون، مشکلو برطرف کردم، حالا چندتا سوال دارم:
1. اینکه آیا میشه تعداد ستون ها در هر سطر رو کنترل کرد؟ در حال حاضر وقتی تعداد رکوردها بیشتر از اندازه مانیتور میشه، لیست باکس، اسکرول افقی میخوره که این مسئله زیاد کاربر پسند نیست، بنده میخوام متناسب با سایز مانیتور، تعداد آیتم هارو نمایش بدم که اصلا اسکرول نخوره و اگر چاره ای نبود و اسکرول هم خورد، اسکرول عمودی بخوره نه اسکرول افقی
طبعا با تنظیم ColumnWidth به نوعی تعداد ستون هم تنظیم میشه اما این چیزی که برای اسکروال توصیف می کنید رفتار ListView است نه ListBox.
رسم ListView رو تغییر بدهید (OwnerDraw = true و View=Tile) و تنظیم TileSize

نوشته شده توسط
mr.sirwan
2. آیتم ها از بالا به پایین (بصورت سطری) رسم میشن، آیا راهی هست که آیتم هارو بصورت ستونی رسم کنیم؟ منظورم از راست به چپ یا چپ به راست هستش
کنترل ListView رو جایگزین ListBox کنید.

نوشته شده توسط
mr.sirwan
3. پراپرتی ItemHeight رو نمیشه بیشتر از 255 گذاشت، آیا راهی برای دور زدن این مشکل وجود داره؟
بله. در set مشخصه ItemHeight کلاس یک شرط if (value < 1 || value > 255) هست که بهش علاقه ای ندارید و ناچار هستید دورش بزنید و از ItemHeight متعارف استفاده نکنید.
اگر از کلاس وراثت ایجاد می کنید که می توانید مشخصه رو override کنید وگرنه روال تغییر یافته بدون اون if اینه :
private static void SetItemHeight( ListBox listBox, int itemHeight)
{
var fieldInfo = typeof( ListBox).GetField( "itemHeight", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
fieldInfo.SetValue( listBox, itemHeight);
if ( ( listBox.DrawMode != DrawMode.OwnerDrawFixed) || ( listBox.IsHandleCreated == false))
{
return;
}
listBox.BeginUpdate( );
var methodInfo = typeof( Control).GetMethod( "SendMessage", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
methodInfo.Invoke( listBox, new object[] { 416, 0, itemHeight });
if ( listBox.IntegralHeight)
{
var size = listBox.Size;
listBox.Size = new Size( size.Width + 1, size.Height);
listBox.Size = size;
}
listBox.EndUpdate( );
}
مثلا :
SetItemHeight(lst, 400);

نوشته شده توسط
mr.sirwan
4. برای تعداد کمی از آیتم ها، آیتم ها از وسط لیست باکس به سمت چپ اون رسم میشن که چیز منطقی ای نیست (در حالی که لیست باکس راست به چپ هم هستش) باید از سمت راست لیست باکس شروع بشن
قطعا منطقی نیست ولی کد خودتون درست نیست که همچین ظاهری پیدا می کنه. یک جایی کار اشتباهی انجام می دهید.

نوشته شده توسط
mr.sirwan
5. یه مورد هم که زیاد اذیت میکنه این چشمک زدنه ست، آیا میشه کاری برای رفع این چشمک زدن آیتم ها کرد؟ DoubleBuffer لیست باکس رو true کردم ولی فایده ای نداشت
نمیشه گفت هیچ چاره ای نداره ولی به درد سرش نمی ارزه. کلاسش رو از نو باز نویسی کنید بهتر جواب میده تا تغییرات اساسی در کلاسش.

نوشته شده توسط
mr.sirwan
6. درمورد پاکسازی و Dispose کردن آبجکت ها و فضای اشغال شده رم در این روش آیا نکته ای چیزی وجود داره که رعایت کنیم و باعث سربار زیاد روی سیستم نشیم؟
قطعا. قاعده کلی اینه که چیزی که Dispose شدنی است رو تا حد امکان با using بکار ببرید یا در اولین فرصت Dispose کنید.