PDA

View Full Version : مشکل با متد showdialog



peymannaji
جمعه 16 فروردین 1387, 13:54 عصر
با سلام


فرض کنید یک فرم دارم با نام A و یک فرم دیگه با نام B . حالا از فرم A فرم B رو با متد showdialog باز میکنم حالا اگه تو فرم B یک تکست باکس وجود داشته باشه و من توش چیزی بنویسم و سپس فرم رو ببندم و دوباره با متد showdialog از فرم A بازش کنم میبینیم که متنی که در تکست باکس نوشته بودم هنوز هم هست . برای اینکه مشکل حل بشه تو رویدادFormClosing مربوط به این فرم B دستور me.Dispose رو نوشتم که مشکل حل شد اما موقع بستن صفحه یک حالتی مثل پرش داره و یا یه چیزی تو این مایه ها که نمیخوام این حالت پیش بیاد بنظر شما بهترین راه حل چه چیزی میتونه باشه برای مشکل اول؟


با تشکر

saman_itc
جمعه 16 فروردین 1387, 14:14 عصر
چون me.Dispose نوشتی این مشکل پیش امده
میتونی فقط خود Textbox خالی کنی
معمولا تو FormLoad هه چیز صفر میکنند که مشکل پیش نیاد

peymannaji
جمعه 16 فروردین 1387, 14:39 عصر
بله این راه هم مد نظر بنده هست اما از اونجایی که پروژم فرم زیادی داره و در هر فرم کلی کنترل هست یکم وقت گیر هست که بخوام این کارو انجام بدم حالا بنظر شما تنها راه و منطقی ترین راه همین روش شماست ؟

ezamnejad
جمعه 16 فروردین 1387, 14:57 عصر
هر بار یک نمونه جدید از فرم b ایجاد کنید


Dim n As New b
n.ShowDialog()

saman_itc
جمعه 16 فروردین 1387, 16:33 عصر
بله این راه هم مد نظر بنده هست اما از اونجایی که پروژم فرم زیادی داره و در هر فرم کلی کنترل هست یکم وقت گیر هست که بخوام این کارو انجام بدم حالا بنظر شما تنها راه و منطقی ترین راه همین روش شماست ؟
در هر صورت بعد از هر عملیات باید یه سیری(یا همه)فیلد ها خالی بشن
بهتر یه تابع بنویسی تو هر فرم که مثلا وقتی دکمه جدید زده میشه یه دکمه ثبت زده میشه اون تابع بعد از انجام همه عملیات فراخوانی شه

MKalami
جمعه 16 فروردین 1387, 17:01 عصر
توی vb.net نمیخواد نگران مدیریت حافظه و آبجکت هایی که ساختی باشی.
هر بار فرم رو از اول بساز



هر بار یک نمونه جدید از فرم b ایجاد کنید


Garbage Collector خودش حافظه رو آزاد میکنه.

البته اگر این فرم زیاد باز و بسته میشه یعنی زیاد از اون آبجکت میسازی و در هر بار ایجاد فرم کد زیادی رو اجرا میکنی بهتره فقط یک نمونه از فرم b در فرم a بسازی و در موقع لود شدن فرم b کل کنترلهات رو با مقدارهای پیش فرض مقدار دهی کنی .

saman_itc
جمعه 16 فروردین 1387, 23:54 عصر
میتونم بپرسم چه طوری؟با چه دستوری؟

gdevnb
شنبه 17 فروردین 1387, 02:34 صبح
مثلاً اگه n تا TextBox داخل یه Panel داری از کد زیر در فرم لود استفاده کن



foreach (TextBox tb in panel1.Controls)
{
tb.Text = String.Empty;
}

MKalami
یک شنبه 18 فروردین 1387, 21:48 عصر
اگر همه textbox هایی که در فرم B داری داخل ریشه فرم و یا داخل ریشه یک ContainerControl (مثلا panel یا groupbox)باشند این راه حل جواب میده:



اگه n تا TextBox داخل یه Panel داری از کد زیر در فرم لود استفاده کن


ولی اگر همه کنترلهات تو یه سطح نیستند این راه حل بهت جواب نمیده بهتره حتی اگر 40 تا textbox هم داری تو یک تابع یکی یکی خالیشون کنی.مثل کد زیر:



txtName.Text=string.Empty
txtFamily.Text=string.Empty
txtID.Text=string.empty
...

peymannaji
دوشنبه 19 فروردین 1387, 17:30 عصر
با تشکز از همه دوستان ...