PDA

View Full Version : مبتدی: کار با اسکرول بار در سی شارپ



rahman65
دوشنبه 09 تیر 1393, 12:07 عصر
با سلام خدمت همه اساتید و اعضای محترم سایت

یک مشکلی برای من در کار کردن با اسکرول بار به وجود اومده برای همین خواستم از شما استادان عزیز راهنامائی بگیرم تا اونو حل کنم

بنده یک فرم دارم که در آن یک پنل گذاشتم و روی پنل دوتا (یا چند تا ) تکست باکس قرار دادم

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

کد زیر رو نوشتم

private void vScrollBar1_Scroll(object sender, ScrollEventArgs e) {
vScrollBar1.LargeChange = 1;
vScrollBar1.Maximum = 100;
vScrollBar1.Minimum = 0;
int value = e.NewValue;


vScrollBar1.LargeChange = 1;
vScrollBar1.Maximum = 100;
vScrollBar1.Minimum = 0;

textBox1.Top = (int)Math.Round(value * (panel1.Height - textBox1.Height) / 100.0d);


textBox2.Top = (int)Math.Round(value * (panel1.Height - textBox2.Height) / 100.0d);
}
ولی وقتی برنامه رو اجرا میکنم و اسرول بار رو حرکت میدم

تکست باکس ها رو ی هم سوار میشند

یعنی فاصله بینشون حذف میشه

حالا مشکل من اینه که چجور ی میتونم این فاصله رو حفظ کنم

از لطف وعنایتی که میکنید تا منو راهنمائی بکنید بینهایت سپاسگذارم

elec60
سه شنبه 10 تیر 1393, 09:17 صبح
با سلام خدمت همه اساتید و اعضای محترم سایت

یک مشکلی برای من در کار کردن با اسکرول بار به وجود اومده برای همین خواستم از شما استادان عزیز راهنامائی بگیرم تا اونو حل کنم

بنده یک فرم دارم که در آن یک پنل گذاشتم و روی پنل دوتا (یا چند تا ) تکست باکس قرار دادم

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

کد زیر رو نوشتم

private void vScrollBar1_Scroll(object sender, ScrollEventArgs e) {
vScrollBar1.LargeChange = 1;
vScrollBar1.Maximum = 100;
vScrollBar1.Minimum = 0;
int value = e.NewValue;


vScrollBar1.LargeChange = 1;
vScrollBar1.Maximum = 100;
vScrollBar1.Minimum = 0;

textBox1.Top = (int)Math.Round(value * (panel1.Height - textBox1.Height) / 100.0d);


textBox2.Top = (int)Math.Round(value * (panel1.Height - textBox2.Height) / 100.0d);
}
ولی وقتی برنامه رو اجرا میکنم و اسرول بار رو حرکت میدم

تکست باکس ها رو ی هم سوار میشند

یعنی فاصله بینشون حذف میشه

حالا مشکل من اینه که چجور ی میتونم این فاصله رو حفظ کنم

از لطف وعنایتی که میکنید تا منو راهنمائی بکنید بینهایت سپاسگذارم

کدی که نوشتی معلومه که دو تا تکست باکس رو هم سوار میشن. Height هر دو تکست باکس اگه یکی باشه که معمولا هم هست خاصیت Top هر دو تکست بکس یکسان در میاد و رو هم میوفتن.

rahman65
سه شنبه 10 تیر 1393, 09:56 صبح
کدی که نوشتی معلومه که دو تا تکست باکس رو هم سوار میشن. Height هر دو تکست باکس اگه یکی باشه که معمولا هم هست خاصیت Top هر دو تکست بکس یکسان در میاد و رو هم میوفتن.
استاد از بیانات شما کمال تشکر رو دارم
الان من hight دو تکس رو تغییر دادم و یکی رو 50 کردم و یکی رو هم 30 کردم
الان دیگه تکست باکس ها رو هم سوار نمیشن و از این بابت تشکر میکنم که کمک کردید
ولی یه مشکل تازه به وجود اومده اونم اینه که فاصله تکست باکس ها حفظ نمیشه وبایک مقدار مشخصی به هنگام پائین اومد اسکرول بار
افزایش پیدا میکنه
خواهشاً در این زمینه هم توضیح بدید که چیکار باید بکنم
خیلی ممنون

elec60
سه شنبه 10 تیر 1393, 21:36 عصر
استاد از بیانات شما کمال تشکر رو دارم
الان من hight دو تکس رو تغییر دادم و یکی رو 50 کردم و یکی رو هم 30 کردم
الان دیگه تکست باکس ها رو هم سوار نمیشن و از این بابت تشکر میکنم که کمک کردید
ولی یه مشکل تازه به وجود اومده اونم اینه که فاصله تکست باکس ها حفظ نمیشه وبایک مقدار مشخصی به هنگام پائین اومد اسکرول بار
افزایش پیدا میکنه
خواهشاً در این زمینه هم توضیح بدید که چیکار باید بکنم
خیلی ممنون

من استاد نیستم و مسیر طولانی دارم تا استاد شدن:لبخند:



private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
textBox1.Top = textBox1.Top + (e.NewValue - e.OldValue) * panel1.Height / 100;


textBox2.Top = textBox2.Top + (e.NewValue - e.OldValue) * panel1.Height / 100;
}


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

rahman65
چهارشنبه 11 تیر 1393, 10:57 صبح
من استاد نیستم و مسیر طولانی دارم تا استاد شدن:لبخند:



private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
textBox1.Top = textBox1.Top + (e.NewValue - e.OldValue) * panel1.Height / 100;


textBox2.Top = textBox2.Top + (e.NewValue - e.OldValue) * panel1.Height / 100;
}


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

استاد میخواستم دوباره از شما به خاطر لطفی که کردید تشکر کنم:لبخندساده:

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

اونم اینه که چطور میتونم با حرکت دکمه وسط موس اسکرول بار رو حرکت بدم :لبخند:

پرو شدم نه:لبخند:؟

elec60
چهارشنبه 11 تیر 1393, 14:17 عصر
استاد میخواستم دوباره از شما به خاطر لطفی که کردید تشکر کنم:لبخندساده:

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

اونم اینه که چطور میتونم با حرکت دکمه وسط موس اسکرول بار رو حرکت بدم :لبخند:

پرو شدم نه:لبخند:؟

ايونت MouseWheel فرم اصليتو بساز و تو متدش بنويس:



(e.Delta > 0 && vScrollBar1.Value > 0)if
vScrollBar1.Value--;
else if vScrollBar1.Value < 100
vScrollBar1.Value++;



براي ساختن ايونت بعد از ()InitializeComponents بنويس:


;this.MouseWheel += srcollWithMouseWheel

و كد بالا رو تو متد srcollWithMouseWheel قرار بده.

rahman65
پنج شنبه 12 تیر 1393, 10:37 صبح
ايونت MouseWheel فرم اصليتو بساز و تو متدش بنويس:



(e.Delta > 0 && vScrollBar1.Value > 0)if
vScrollBar1.Value--;
else if vScrollBar1.Value < 100
vScrollBar1.Value++;



براي ساختن ايونت بعد از ()InitializeComponents بنويس:


;this.MouseWheel += srcollWithMouseWheel

و كد بالا رو تو متد srcollWithMouseWheel قرار بده.






استاد واقعاً منو شرمنده کردید نمیدونم چطوری از شما تشکر کنم

من همان گونه که شما فرمودید کد و نوشتم
و اینجا گذاشتم تا شما هم ببینید
public Form1() {
InitializeComponent();


this.MouseWheel += new MouseEventHandler(srcollWithMouseWheel);






}




public void srcollWithMouseWheel(object sender, MouseEventArgs e)
{
if(e.Delta > 0 && vScrollBar1.Value > 0)
vScrollBar1.Value--;
else if (vScrollBar1.Value < 100)
vScrollBar1.Value++;
}

ولی وقتی میرم استارت میکنم و موس رو حرکت میدم عمل نمیکنه

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

با تشکر بسیار فراوان :لبخندساده:

elec60
پنج شنبه 12 تیر 1393, 20:28 عصر
استاد واقعاً منو شرمنده کردید نمیدونم چطوری از شما تشکر کنم

من همان گونه که شما فرمودید کد و نوشتم
و اینجا گذاشتم تا شما هم ببینید
public Form1() {
InitializeComponent();


this.MouseWheel += new MouseEventHandler(srcollWithMouseWheel);






}




public void srcollWithMouseWheel(object sender, MouseEventArgs e)
{
if(e.Delta > 0 && vScrollBar1.Value > 0)
vScrollBar1.Value--;
else if (vScrollBar1.Value < 100)
vScrollBar1.Value++;
}

ولی وقتی میرم استارت میکنم و موس رو حرکت میدم عمل نمیکنه

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

با تشکر بسیار فراوان :لبخندساده:


کدتو به این صورت اصلاح کن:




public void srcollWithMouseWheel(object sender, MouseEventArgs e)
{
ScrollEventArgs ev = new ScrollEventArgs(ScrollEventType.First, vScrollBar1.Value, 0);

if (e.Delta > 0 && vScrollBar1.Value > 0)
vScrollBar1.Value--;
else if (vScrollBar1.Value < 100)
vScrollBar1.Value++;

ev.NewValue = vScrollBar1.Value;

vScrollBar1_Scroll(null, ev);
}

rahman65
جمعه 13 تیر 1393, 14:10 عصر
استاد باور کنید نمیدونم با چه زبونی از شما تشکر کنم

واقعاً شما بی نظیر هستید :لبخندساده:

کلی از مشکلاتم حل شد انشا اله خدا خودش مشکلات تورو حل کنه

این کد در فرم من کارنکرد ولی در فرم دیگه که امتحان کردم کار کرد برای همین فرم رو دوباره طراحی کردم وکدها رو دوباره تو اون وارد کردم و این دفعه کار کرد:قلب:

فرم اولی رو هر کاری میکردم کار نمیکرد :متفکر: ارور هم نمیداد که بدونم مشکلش چیه

ولی فرم رو که دوباره طراحی کردم و کدها رو تو اون امتحان کردم جواب داد

(خیلی از شما ممنونم )


شما مصداق بارز حدیث شریف : فقد علمنی حرفاً فقد سیرنی عبداً هستید

elec60
جمعه 13 تیر 1393, 21:54 عصر
استاد باور کنید نمیدونم با چه زبونی از شما تشکر کنم

واقعاً شما بی نظیر هستید :لبخندساده:

کلی از مشکلاتم حل شد انشا اله خدا خودش مشکلات تورو حل کنه

این کد در فرم من کارنکرد ولی در فرم دیگه که امتحان کردم کار کرد برای همین فرم رو دوباره طراحی کردم وکدها رو دوباره تو اون وارد کردم و این دفعه کار کرد:قلب:

فرم اولی رو هر کاری میکردم کار نمیکرد :متفکر: ارور هم نمیداد که بدونم مشکلش چیه

ولی فرم رو که دوباره طراحی کردم و کدها رو تو اون امتحان کردم جواب داد

(خیلی از شما ممنونم )


شما مصداق بارز حدیث شریف : فقد علمنی حرفاً فقد سیرنی عبداً هستید


خواهش میکنم، حل سوالات و پاسخ به مشکلات دوستان باعث میشه خودمم مطلب یاد بگیرم و اول از همه سودش به خودم میرسه:لبخند:
ولی یه پیشنهاد دارم، اگه می خوای دات نت کار کنی و UI درست کنی بهتره کلا تکنولوژی Windows Forms رو بزاری کنار و بری سراغ WPF.
برنامه هایی که من با WPF نوشتم رو یا نمیتونم با Windows Forms بنویسم و یا اگر هم بتونم خيلي زمان برتره.
چند تا از برنامه هامو گذاشتم تو همین سایت:

http://barnamenevis.org/showthread.php?457987-%D9%85%D8%A7%D8%B4%D9%8A%D9%86-%D8%AD%D8%B3%D8%A7%D8%A8-%D8%A8%D8%A7-%D9%82%D8%A7%D8%A8%D9%84%D9%8A%D8%AA-%D8%AA%D8%A8%D8%AF%D9%8A%D9%84-%D8%B9%D8%AF%D8%AF-%D8%A8%D9%87-%D8%AD%D8%B1%D9%88%D9%81

http://barnamenevis.org/showthread.php?455429-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%AF%D9%88%D8%B2-%D8%AA%D8%AD%D8%AA-%D8%B4%D8%A8%DA%A9%D9%87-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D8%A7%D9%86%D8%AA-%D8%A8%D8%A7-%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-%DA%86%D8%AA-(WPF)


http://barnamenevis.org/showthread.php?454643-%D8%A8%D8%A7%D8%B2%DB%8C-%D9%81%DA%A9%D8%B1%DB%8C-15-puzzle-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-WPF

http://barnamenevis.org/showthread.php?454640-%D8%B3%D8%A7%D8%B9%D8%AA-%D8%A2%D9%86%D8%A7%D9%84%D9%88%DA%AF-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-%D9%82%D8%AF%D8%B1%D8%AA%D9%85%D9%86%D8%AF-WPF