PDA

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



Leila-2011
دوشنبه 11 مهر 1390, 09:03 صبح
سلام دوستان
ببینید من 3 تا فرم دارم
وقتی که توی فرم 3 هستم لازمه که فرم 3 و 2 رو ببندم
با this .close () ; فرم 3 رو میبندم
و با این دستور هم فرم 2 رو :


foreach (Form f in Application.OpenForms)
{
if (f.Text == "Design Trans")
f.Close();
}


ولی از کلمه in تو خط اول ارور میگیره
لطفن رودتر کمک کنید

gwbasic
دوشنبه 11 مهر 1390, 09:12 صبح
کدتون مشکلی نداره خطاتون رو دقیق بگین چیه

Babak-Magic
دوشنبه 11 مهر 1390, 09:12 صبح
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "Form2")
{
frm.Close();
}
this.Close();
}

Leila-2011
دوشنبه 11 مهر 1390, 09:51 صبح
این ارور رو میده :
Collection was modified; enumeration operation may not execute.
-
مشکل رو به طریقی حل کردم یعنی دورش زدم ولی برام سواله که این ارور مربوط به چیه و کجای کارم اشتباست

Leila-2011
دوشنبه 11 مهر 1390, 09:52 صبح
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "Form2")
{
frm.Close();
}
this.Close();
}

بازم همون ارور رو میده

gwbasic
دوشنبه 11 مهر 1390, 10:02 صبح
خوب حالا شد! همیشه Exception رو بذارید تا زودتر جواب بگیرید.
شما توی OpenForms دارید loop میزنید وقتی که داخل lforeach یکی از فرمها رو Close می کنید خوب Conllection تون تغییر میکنه منظورم OpenForms هست ، درسته بنابراین در ادامه loop به خطا می خوره. راه حل اینه که توی شرط بعد از Close ، در خط بعد Break بگذارید که از حلقه خارج بشه.
اما موضوع اصلی اینه که به لحاظ منطقی جالب نیست که شما یه جای برنامه بگید که خوب حالا برو تو فرمهای باز بگرد این چندتا فرم رو که من میخوام اگه باز بود ببند.
اگه Bussiness شما از طریق چند فرم مرتبط باهم برقرار می شه خوب باید یه جایی این فرم های مرتبط وجود داشته باشه یکمی باید روی این فکر کنید که چرا باید یه فرم ، فرمهای دیگه رو ببنده!

Leila-2011
دوشنبه 11 مهر 1390, 10:09 صبح
ممنونم درسته به لحاظ منطقی من باید مشکل رو طوری حل کنم که نیازی به این کار نباشه (منظورم بستن یه فرم تویه فرم دیگه است)
ولی خب در مورد این ارور:
مشکل ارور رفع شد ولی همچنان فرمم باز میمونه و بسته نمیشه

gwbasic
دوشنبه 11 مهر 1390, 10:26 صبح
ممنونم درسته به لحاظ منطقی من باید مشکل رو طوری حل کنم که نیازی به این کار نباشه (منظورم بستن یه فرم تویه فرم دیگه است)
ولی خب در مورد این ارور:
مشکل ارور رفع شد ولی همچنان فرمم باز میمونه و بسته نمیشه

شما اول با همون حلقه فرم 2 رو ببند و بعد با this.Close() فرم جاری که فرم 3 هست رو ببند

Leila-2011
دوشنبه 11 مهر 1390, 10:51 صبح
بازم بسته نمیشه
من یه سوال دیگه هم دارم :
چطوری میتونم مقدار یه فیلد از جدول رو تو تکست باکس چاپ کنم
وقتی این کارو میکنم ارور selection start میده
با لینک کار میکنم
اینم
دستورهایی که استفاده کردم :

var g = db.HVLV_tables.Where(c => c.TransID == ID).Select(c => c.f);
frm1.tb_f.Text = g.ToString();


frm1.tb_f.Text = db.HVLV_tables.Where(c => c.TransID == ID).Select(c => c.f).ToString();

gwbasic
دوشنبه 11 مهر 1390, 11:18 صبح
بازم بسته نمیشه
من یه سوال دیگه هم دارم :
چطوری میتونم مقدار یه فیلد از جدول رو تو تکست باکس چاپ کنم
وقتی این کارو میکنم ارور selection start میده
با لینک کار میکنم
اینم
دستورهایی که استفاده کردم :

var g = db.HVLV_tables.Where(c => c.TransID == ID).Select(c => c.f);
frm1.tb_f.Text = g.ToString();


frm1.tb_f.Text = db.HVLV_tables.Where(c => c.TransID == ID).Select(c => c.f).ToString();

باز دوباره Exception رو نذاشتی البته ایندفه نصفه گذاشتی کامل بذار!!!
در ضمن من با این روش مخلفم می تونی کنترل فرم رو به داده مورد نظر Bind کنی به آموزشی که در مورد DataBinding در این سایت گذاشتم مراجعه کن چند تا پروژه کوچیک هم هست. تاپیکامو جستجو کن

Leila-2011
دوشنبه 11 مهر 1390, 11:43 صبح
تاپیک هاتونو سرچ کردم و دارم مطلب رو می خونم و حتما ازش استفاده می کنم
ولی خب این مشکل هم حل بشه خودش تجربه محسوب میشه
exception ام اینه :
InvalidArgument=Value of '-78' is not valid for 'SelectionStart'.

gwbasic
دوشنبه 11 مهر 1390, 12:01 عصر
ببینید این خطا تو چه خطی هست شما کمبو باکس دارین؟؟ احتمالا اوجا دارین یه index ی رو صدا می زنین که خوب نمی تونه منفی باشه. اینطوری نمیشه مشکلتون رو حل کرد شما باید debug کنید بعد خودتون خیلی راحت تر متوجه می شین اون query تون هم به نظر نمی رسه مشکلی داشته باشه. اینطوری فقط منو دارین گیج می کنین یه کد نشون می دین در صورتیکه خطاتون جای دیگس

Leila-2011
دوشنبه 11 مهر 1390, 12:48 عصر
تو دیباگ به جای یه مقدار تکست ساده یه مقدار دیگه تو متغیرم قرار میگیره
در واقع خروجی ای که از کوئریم میگیرم مشکل داره

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

spring69
دوشنبه 11 مهر 1390, 13:08 عصر
سلام
var g = db.HVLV_tables.ّFirstOrDefault(c => c.TransID == ID).Select(c => c.f);
به این دلیل (http://barnamenevis.org/showthread.php?307268-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-select-%D9%88-%D8%A8%D8%B1-%DA%AF%D8%B1%D8%AF%D9%88%D9%86%D8%AF%D9%86-%D9%86%D8%AA%DB%8C%D8%AC%D9%87-%D8%B9%D8%AC%DB%8C%D8%A8&p=1348632&viewfull=1#post1348632)
راجب سوال اولتون:
Form2 frm=(Form2) Application.OpenForms("Form2");
if (frm != null)
frm.Close();

gwbasic
دوشنبه 11 مهر 1390, 13:40 عصر
تو دیباگ به جای یه مقدار تکست ساده یه مقدار دیگه تو متغیرم قرار میگیره
در واقع خروجی ای که از کوئریم میگیرم مشکل داره

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

ولی Exception ای که دادین مربوط به این نبود درسته! چون اینجا یه چیزی نمایش می ده و اونم type اون شی هست ولی exception نداره
حالا درمورد Query تون هم دوستمون درست گفتند. چون شما ازمتد ToString استفاده کردین من فکر کردم که نتیجه مطلوب رو می گیرین ولی راه درست اینه که:
بجای Where از FirstOrDefault استفاده کنید تا فقط یک رکورد برگردونه و بعد فیلد مورد نظر رو از این رکورد برگشتی که فکر کنم f بود رو به تکست باکستون بدین