PDA

View Full Version : سوال: لیست متحرک ... نمایش وقایع ... ( لطفا راهنمایی کنید)



ostovarit
چهارشنبه 03 شهریور 1389, 16:01 عصر
با سلام و خسته نباشید خدمت دوستان

من قصد دارم لیست متحرکی رو درست کنم که اطلاعاتی رو از روی دیتابیس به نمایش بزاره ...
هر سطر از اطلاعات دیتابیس یک سطر از اطلاعات این لیست رو تشکیل میده ...
برای مثال:
1389/03/12 قرار ملاقات با آقای ایکس
...

حالا این اطلاعات رو میخوام تو یک باکس قرار بدم که به صورت اتوماتیک حرکت کنه وقتی تموم شد دوباره از اولین سطر شروع کنه و نمایش بده ... و بعد از کلیک روی هر سطر اتفاقهایی بیافته که براش مینویسم ...

مثل این لینکدونی متحرک در ادرس زیر ولی من میخوام در win App ایجادش کنم نه تحت وب ...
http://quchangaleri.pardisblog.com/cat32.php

نظرات پیشنهادات لینک سورس هر چی که میتونه کمک کنه ...
با تشکر

ostovarit
چهارشنبه 03 شهریور 1389, 21:26 عصر
یاری اندر کس نمیبینم یاران را چه شد ...!

Reza_Yarahmadi
چهارشنبه 03 شهریور 1389, 23:25 عصر
این یه نمونه ساده است نمیدونم یه دردتون میخوره یا نه ، ولی میشه قابلیت های زیادی بهش اضافه کرد.

ostovarit
چهارشنبه 03 شهریور 1389, 23:32 عصر
این یه نمونه ساده است نمیدونم یه دردتون میخوره یا نه ، ولی میشه قابلیت های زیادی بهش اضافه کرد.

خدا خیرت بده برادر ...
دقیقا همون چیزی بود که میخواستم فقط عمودی و افقی حرکت کردنش رو چه جوری باید تایین کنم؟؟؟

vandermond
پنج شنبه 04 شهریور 1389, 03:19 صبح
با اجازه جناب Reza_Yarahmadi (http://barnamenevis.org/forum/member.php?u=97318) عزيز من براتون عموديش كردم.

ostovarit
جمعه 05 شهریور 1389, 23:30 عصر
با اجازه جناب Reza_Yarahmadi (http://barnamenevis.org/forum/member.php?u=97318) عزيز من براتون عموديش كردم.

با سلام و خسته نباشید خدمت دوستان عزیز
من سعی دارم به ازای هر رکورد در جدولم در دیتابیس یک لینک به لیست متحرکم اضافه کنم...
برای این منظور چه کنم؟

این کد یک لینک ایجاد میکنه و هر دفعه که میخونه تکست همون رو عوض میکنه ... میخوام در هر دفعه خوندن لینک جدیدی ایجاد بشه ...



SqlCommand cmdSelect = new SqlCommand();
cmdSelect.Connection = new myConnection().Cnn;
cmdSelect.CommandText = "select * from ChequeView2 where Type=2 or Type=9";
SqlDataReader drSelect = cmdSelect.ExecuteReader();
while (drSelect.Read())
{
LinkLabel l1 = new LinkLabel();
l1.Text =drSelect[0].ToString();
l1.Location = new Point(20, panel1.Height);
l1.Click += new EventHandler(link_Click);
l1.MouseEnter += new EventHandler(panel1_MouseEnter);
panel1.Controls.Add(l1);
}

حجتی نیا
شنبه 06 شهریور 1389, 00:08 صبح
این کد یک لینک ایجاد میکنه و هر دفعه که میخونه تکست همون رو عوض میکنه ... میخوام در هر دفعه خوندن لینک جدیدی ایجاد بشه ...

اگه درست متوجه شده باشم : اولین بار یه لینک اضافه میکنه و تو دفعه های بعد،فقط تکس همون لینک عوض میشه ،درسته؟؟
اگه اینجوریه دلیلش فک کنم واسه اینه که تو این کد همیشه یه لینک با نام یکسان ایجاد میشه و هردفعه فقط اطلاعات اون اوررایت میشه ..به ازای هر رکورد خوانده شده باید یه لینک جدید (نام جدید، لوکیشن جدید ..)ایجاد بشه..

ostovarit
شنبه 06 شهریور 1389, 00:27 صبح
اگه درست متوجه شده باشم : اولین بار یه لینک اضافه میکنه و تو دفعه های بعد،فقط تکس همون لینک عوض میشه ،درسته؟؟
اگه اینجوریه دلیلش فک کنم واسه اینه که تو این کد همیشه یه لینک با نام یکسان ایجاد میشه و هردفعه فقط اطلاعات اون اوررایت میشه ..به ازای هر رکورد خوانده شده باید یه لینک جدید (نام جدید، لوکیشن جدید ..)ایجاد بشه..

درسته فقط نتونستم اینی که میگید رو اجرا کنم چه جوری بنویسمش ...

vandermond
شنبه 06 شهریور 1389, 01:00 صبح
دوست من
كافيه يه شمارشگر داشته باشي و هر دفعه يكي اضافه بشه...
خب حالا وقتي كنترل رو مثلا اولش با نام link ساختي، بعد خاصيت نامش رو هم تغيير بده و شمارشگر رو به آخر نام بچسبون. البته روشي كه از اول با نام ديگه اي باشه هم هست ولي الان حوصله ندارم VS باز كنم و كدش رو امتحان كنم. با همون روش اول كه گفتم ميتوني درستش كني. ميدونم كه ميتوني:چشمک:

Reza_Yarahmadi
شنبه 06 شهریور 1389, 07:17 صبح
این کد یک لینک ایجاد میکنه و هر دفعه که میخونه تکست همون رو عوض میکنه ... میخوام در هر دفعه خوندن لینک جدیدی ایجاد بشه ...
دوست عزيز كد شما به ازا تمام ركورد ها لينك درست ميكنه فقط مشكلش اينجاست كه همه رو روي هم ميندازه. براي حل اين مشكل بايد قبل از While يك متغير تعريف كنيد و موقعيت آخرين لينك رو نگه داريد بعد با توجه به اين متغير جاي لينك جديد رو تعيين كنيد

ostovarit
شنبه 06 شهریور 1389, 11:21 صبح
دوست من
كافيه يه شمارشگر داشته باشي و هر دفعه يكي اضافه بشه...
خب حالا وقتي كنترل رو مثلا اولش با نام link ساختي، بعد خاصيت نامش رو هم تغيير بده و شمارشگر رو به آخر نام بچسبون. البته روشي كه از اول با نام ديگه اي باشه هم هست ولي الان حوصله ندارم VS باز كنم و كدش رو امتحان كنم. با همون روش اول كه گفتم ميتوني درستش كني. ميدونم كه ميتوني:چشمک:

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

با تشکر


دوست عزيز كد شما به ازا تمام ركورد ها لينك درست ميكنه فقط مشكلش اينجاست كه همه رو روي هم ميندازه. براي حل اين مشكل بايد قبل از While يك متغير تعريف كنيد و موقعيت آخرين لينك رو نگه داريد بعد با توجه به اين متغير جاي لينك جديد رو تعيين كنيد

درسته .......... قبلا این کار رو کردم ولی هر چی فکر میکنم الان یادم نمیاد .......... یکم بیشتر توضیح بدید ممنون میشم؟

Reza_Yarahmadi
شنبه 06 شهریور 1389, 12:13 عصر
درسته .......... قبلا این کار رو کردم ولی هر چی فکر میکنم الان یادم نمیاد .......... یکم بیشتر توضیح بدید ممنون میشم؟ با كدي مثل كد زير ميتونيد اين كار رو انجام بديد

Point OldLocation = new Point(0, 0);
while (drSelect.Read())
{
LinkLabel l1 = new LinkLabel();
l1.Text =drSelect[0].ToString();
l1.Location = new Point(20, OldLocation.Y + 25);
l1.Click += new EventHandler(link_Click);
l1.MouseEnter += new EventHandler(panel1_MouseEnter);
panel1.Controls.Add(l1);
OldLocation = new Point(20, l1.Location.Y);
}

ostovarit
شنبه 06 شهریور 1389, 12:29 عصر
با كدي مثل كد زير ميتونيد اين كار رو انجام بديد



مهندس جان فکر میکنم مشکل اینه که ما تکست لیبل یک رو هی داریم عوض میکنیم بحث افتادن لیبل ها روی هم از نظر لوکیشن نیست ... چون من بازم کد شما رو تست کردم همون اولین رکورد رو داره میاره ... من نمیدونم چه جوری تو هر بار خوندن رکورد یک لیبل جدیدی بسازم با اسمی متفاوت از قبلی (l1 , l2 , l3 ,...) در این مورد اگر راهنمایی کنید ممنون میشم ...



SqlCommand cmdSelect = new SqlCommand();
cmdSelect.Connection = new myConnection().Cnn;
cmdSelect.CommandText = "select Name from RegGoods";
SqlDataReader drSelect = cmdSelect.ExecuteReader();
Point OldLocation = new Point(0, 0);
while (drSelect.Read())
{
LinkLabel l1 = new LinkLabel();
l1.Text = drSelect[0].ToString();
l1.Location = new Point(20, EventBox.Height);
l1.Click += new EventHandler(link_Click);
l1.MouseEnter += new EventHandler(EventBox_MouseEnter);
EventBox.Controls.Add(l1);
OldLocation = new Point(20, l1.Location.Y);
}

Reza_Yarahmadi
شنبه 06 شهریور 1389, 12:54 عصر
اين برنامه تقريبا با همون كد نوشته شده و داره جواب ميده

ostovarit
شنبه 06 شهریور 1389, 17:07 عصر
مشکل خواندن اطلاعات از دیتابیس ساخت لینکها و حرکتشون با کمک دوستان حل شد ...

اما به یک مشکل جدید بر خوردم ... وقتی برنامه باز میشه CPU Usage میره روی 50% اولش مشکلی نیست بعد از 10 الی 20 دقیقه سرعت نرم افزار به کلی کند میشه و حتی برنامه های دیگه ای هم که باز هستند مثل ویژال شروع به چشمک زدن میکنند ...

من کد های مربوط به منو متحرک رو کامنت کردم در این حالت CPU Useg روی 4% بود ...

برای اینکه همچین اتفاقی نیافته کدم رو چطور تغییر بدم ...

آیا این مشکل به دلیل استفاده از تایمر هست؟ راهی هست که بدون تایمر این کار انجام بشه؟

vandermond
شنبه 06 شهریور 1389, 17:30 عصر
دوست عزيز
من رفتم نگاه كردم ديدم Interval تايمر 1 هستش:متعجب:. حالا نميدونم من اينطوريش كرده بودم يا جناب Reza_Yarahmadi (http://barnamenevis.org/forum/member.php?u=97318) . خب معلومه با اين سرعت اصلا نميزاره تريدهاي ديگه كار كنن و خيلي دردسر ساز ميشه. حتي سي‌نما هم توي يك ثانيه فقط با 30 تصوير، فيلم پخش ميكنه. مثلا اگه Interval رو بزاري روي 33 (كه تقريبا مثل سينما بشه:چشمک:) مطمئنا خيلي خيلي بهتر ميشه.
البته من روش ديگه اي به جز تايمر به ذهنم نخورد. نميدونم شايد مثلا بشه يه كارايي كرد چون يه سري كاراي تكراري داره انجام ميشه، فقط دفعه اول اين كدها رو انجام بده:متفکر:. البته هيچ ايده عملي براي اجرايي شدن اين روش ندارم.

ostovarit
شنبه 06 شهریور 1389, 17:36 عصر
دوست عزيز
من رفتم نگاه كردم ديدم Interval تايمر 1 هستش:متعجب:. حالا نميدونم من اينطوريش كرده بودم يا جناب Reza_Yarahmadi (http://barnamenevis.org/forum/member.php?u=97318) . خب معلومه با اين سرعت اصلا نميزاره تريدهاي ديگه كار كنن و خيلي دردسر ساز ميشه. حتي سي‌نما هم توي يك ثانيه فقط با 30 تصوير، فيلم پخش ميكنه. مثلا اگه Interval رو بزاري روي 33 (كه تقريبا مثل سينما بشه:چشمک:) مطمئنا خيلي خيلي بهتر ميشه.
البته من روش ديگه اي به جز تايمر به ذهنم نخورد. نميدونم شايد مثلا بشه يه كارايي كرد چون يه سري كاراي تكراري داره انجام ميشه، فقط دفعه اول اين كدها رو انجام بده:متفکر:. البته هيچ ايده عملي براي اجرايي شدن اين روش ندارم.

interval رو روی 60 گذاشتم ... باز هم این مشکل هست ...:اشتباه:

ostovarit
دوشنبه 08 شهریور 1389, 14:22 عصر
این مشکل افت سرعت حل نشده ........... دوستان عزیز لطفا راه حل بدید .....
جایگزینی برای تایمر وجود داره؟
آیا با توجه به کدی که دوستان گذاشتن از تایمر درست استفاده شده؟

Reza_Yarahmadi
جمعه 12 شهریور 1389, 13:19 عصر
این مشکل افت سرعت حل نشده ........... دوستان عزیز لطفا راه حل بدید .....
جایگزینی برای تایمر وجود داره؟
آیا با توجه به کدی که دوستان گذاشتن از تایمر درست استفاده شده؟
قبل هر چیز به خاطر دیر جواب دادن معذرت میخوام.
اون کدی که واستون گذاشتم یک مثال بود نه یک برنامه کاربردی.
تایمر مشکلی نداره و معمولا برای چنین کارهایی از تایمر استفاده میشه ، مشکل از کد من (و شما!! :چشمک:) است. توی اون کد هر بار توی Form_Load لینک های جدیدی ساخته میشه و به پنل اضافه میشه بطوریکه بعد از حدود 5 دقیقه تعداد لینک داخل پنل به حدود 250 میرسه و برنامه مجبوره تمام این 250 تا لینک رو موقعیتشون رو جابجا کنه. به این علت هم متوجه چنین چیزی نمیشید که تمام لینک دقیقا روی هم قرار میگیرند (چون کد تعیین موقعیتشون ثابت است)
برای برطرف کردن این مشکل کافیه قبل از حلقه ای که لینک ها رو به پنل اضافه میکنه کد زیر رو بنویسید

panel1.Controls.Clear();