PDA

View Full Version : حرکت دادن scroll یک panel



m110_110
سه شنبه 19 آذر 1387, 09:45 صبح
سلام
به یه مشکل عجیب خوردم که هر کاری می کنم درست نمی شه نمی دونم چه کار کنم و اون اینه که وقتی می خوام scroll یک panel رو در رویداد کلیک یک باتن کنترل کنم و مثلا به پایین بیارم دفعه اول انجام می دهد ولی با دوباره زدن کلید به جای اینکه پایین تر بیاد به همون حالت اول بر می گرده در صورتی که کدی من بهش دادم فقط می تونه پایین بیاره و بالا نمی تونه ببره
من کد این قسمت رو می زارم تا اگه کسی می تونه کمکم کنه ممنون


panel1.AutoScrollPosition = newPoint(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y + 20);

soheilajoon
سه شنبه 19 آذر 1387, 11:12 صبح
ببین این کد به دردت میخوره:



int y = panel1.AutoScrollPosition.Y == panel1.VerticalScroll.Maximum ? -20 : panel1.VerticalScroll.Value;
panel1.AutoScrollPosition = new Point(panel1.AutoScrollPosition.X, y + 20);

m110_110
سه شنبه 19 آذر 1387, 17:32 عصر
با سلام
خیلی ممنون از کدتون soheilajoon (http://barnamenevis.org/forum/member.php?u=40116)، این کدتون درست کار می کنه
ولی یک سوال برام پیش اومد و اون اینکه می تونید بگویید این کد چه کار می کنه؟ یه کمی گیج شدم
باز هم ممنون

soheilajoon
سه شنبه 19 آذر 1387, 18:25 عصر
خط اول برابر کد زیره :



if (panel1.AutoScrollPosition.Y == panel1.VerticalScroll.Maximum)
y = -20;
else
y = panel1.VerticalScroll.Value;



if توی این کد مکان Y رو با بیشترین حد Scroll مقایسه می کنه . . . .
البته این خط رو برای این گذاشتم که وقتی به پایین Scroll رسید دوباره برگرده بالا ولی نیمه کاره موند!! :بامزه:
بهتره از این کد استفاده کنید :



int y = panel1.VerticalScroll.Value;
panel1.AutoScrollPosition = new Point(panel1.AutoScrollPosition.X, y + 20);



اینجا هم خط اولش مقدار Position عمودی Panel1 رو توی متغیر Y میزاره ,
خط بعد هم Y+20 میکنه , همین. :لبخندساده:

m110_110
پنج شنبه 21 آذر 1387, 08:04 صبح
سلامی دوباره
مثل اینکه مشکلات این scroll پایانی نداره
دوباره یک مشکل دیگه که نمی دونم چه کارش کنم هر کاری هم کردم نتونستم اون رو حل کنم
من یک picturebox توی یک panel دارم که چون عکس های نمایش داده شده تو برنامه بزرگه panel ، از دو طرف scroll می خوره که برای راحتی کاربر می خوام مثل برنامه acrobat کاربر بتونه با موس اون رو چپ و راست کنه و بتونه بالا و پایین ببره که اون کد بالایی برای برای کلید وسط موس به کار بردم و درست کار کرد (با تشکر از soheilajoon (http://barnamenevis.org/forum/member.php?u=40116) ) اما می خواهم وقتی کاربر موس رو می گیره و این طرف و اون طرف می بره panel هم درست هماهنگ با اون بره تا کاربر بتونه عکس رو کامل ببینه ولی نتونستم
فقط یک کد تو رویداد move موس همراه با mouse down و up نوشتم که برعکس عمل می کنه و هر کاری می کنم برعکس(درست) نمی شه کد رو می زارم تا اگه کسی می دونه کمکم کنه

باز هم ممنون
کد رویداد mousemove مربوط به picturebox



if (mouse == 1)
{
if (e.X != mx || e.Y != my)
{
int i = (e.X - mx);
int j = (e.Y - my);
panel1.AutoScrollPosition = newPoint(panel1.AutoScrollPosition.X + i, panel1.AutoScrollPosition.Y + j);
}
}


mx و my در رویداد mousdown مقدار دهی می شه همچنین متغیر mouse در رویداد mousedown مقدار 1 و در رویداد mouseup مقدار 0 می گیره
باز هم ممنون

m110_110
پنج شنبه 21 آذر 1387, 21:13 عصر
کسی نیست بتونه کمک کنه

m110_110
شنبه 23 آذر 1387, 17:11 عصر
باز هم سلام
کسی نمی تونه کمکم کنه

soheilajoon
دوشنبه 25 آذر 1387, 10:54 صبح
کاش یه کم بهتر توضیح می دادی می خوای چیکار کنی!
منظورت از :
" می خواهم وقتی کاربر موس رو می گیره و این طرف و اون طرف می بره panel هم درست هماهنگ با اون بره تا کاربر بتونه عکس رو کامل ببینه "
چیه؟

m110_110
سه شنبه 26 آذر 1387, 22:10 عصر
با سلام
ببخشید چند روز نتونستم بیام ولی مشکلم همچنان باقی است
و اما در مورد توضیح اینکه برنامه من عکس های زیادی که هر کدوم از سایز بزرگی برخوردار هست را نمایش می دهد که برای نمایش آن ها از picturebox داخل یک panel برای تسهیل در scroll خوردن و کنترل بهتر آن استفاده می کنم و این رو هم بگم که باید عکس ها بزرگ نمایش داده بشند و حتی قابلیت zoom رو هم براش پیش بینی کرده ام
حالا می خوام کاربر بتونه با استفاده از موس عکس رو این طرف و آن طرف کنه که تا حدودی هم تونستم
یعنی اینکه می خوام کاربر با کلیک کردن و جابه جا کردن راحت تمام عکس رو ببینه(مثل خیلی از برنامه ها همچون acrobat reader که با گرفتن صفحه می تونند این طرف و آن طرف برند
و کدی هم که دارم برعکس عمل می کنه و نتونستم با هیچ عملی آن را تصحیح کنم در واقع این کد کارامد نیست
حالا اگه راه حلی دارید ممنون می شم بگویید

m110_110
چهارشنبه 27 آذر 1387, 13:08 عصر
سلام
آقا من دارم همین طور وقت رو از دست می دم و هر کاری هم می کنم جوابی برای سوالم پیدا نمی کنم این تاپیک هم که به نتیجه نرسیده هر چی هم در سایت جستجو کردم جوابی نیافتم دیگه نمی دونم چه کار کنم از مدیر خواهش می کنم کمک کنند دیگه وقت زیادی ندارم

soheilajoon
جمعه 29 آذر 1387, 22:33 عصر
ببین این کد کمکت می کنه :




if (mouse == 1)
{
if (e.X != mx || e.Y != my)
{
int i = (e.X - mx);
int j = (e.Y - my);
panel1.AutoScrollPosition = new Point(panel1.HorizontalScroll.Value - i, panel1.VerticalScroll.Value - j);
}
}