در کل من توی یه قسمتی از برتامه قراره مشخصات اعضا رو برای ثبت بگیرم از جمله عکسشون
عکس انتخابی کاربر رو که از طریق اپن دیالوگ میگیرم توی یکی از پوشه های خود پروژه کپی و در picturebox نمایش میدم.
ممکنه کاربر یه عکس رو انتخاب و بعد پشیمون بشه بخواد یه عکس دیگه انتخاب کنه به خاطر همین چند عکس به پوشه پروژه اضافه میشه.
هر بار که این فرم باز میشه عکس های به درد نخور قبلی رو قراره پاک کنه در صورتی که اگه کل برنامه باز و بسته نشه امکان حذف اون عکسا (حتی از طریق خود ویندوز) وجود نداره
میخوام وقتی فرم بسته شد و دوباره فرم باز شد (بدون اینکه application بسته بشه) بتونم عکس های اضافی رو پاک کنم در صورتی که نمیشه
خلاصه کدهای مربوط به کارم اینا هستن:
از این کد برای نمایش فرم ثبت اعضا استفاده میکنم
frmd_members_ned frm = new frmd_members_ned();
frm.ShowDialog();
از این کد هم برای کپی عکس انتخاب شده به پوشه های محلی پروژه استفاده میکنم
OpenFileDialog od = new OpenFileDialog();
od.Filter = "Image File|*.jpg;*.gif;*.bmp;*.png";
if (od.ShowDialog() == DialogResult.OK)
{
string patch,fn,fe,t = od.SafeFileName;
int l = t.Length;
fe = t[l - 4].ToString() + t[l - 3].ToString() + t[l - 2].ToString() + t[l - 1].ToString();
fn = t.Remove(l - 4);
DateTime nowdt = DateTime.Now;
string nows = nowdt.Year.ToString() + "_" + nowdt.Month.ToString() + "_" + nowdt.Day.ToString() + "_";
nows += nowdt.Hour.ToString() + "_" + nowdt.Minute.ToString() + "_" + nowdt.Second.ToString() + "_" + nowdt.Millisecond.ToString();
this.Text = nows;
patch = "..\\members_pic\\temp\\"+nows+fe;
File.Copy(od.FileName , patch , true);
pic_member.Image = Image.FromFile(patch);
pic_name = nows + fe;
}
خلاصه کد این هست که با توجه به تاریخ و زمان سیستم یه اسم خودم برای عکس انتخاب و به اونجا انتقال میدم
اگه کاربر عکس رو اشتباهی انتخاب کرد مسلما دوباره این کد تکرار میشه واسه انتخاب عکس بعدی
و از این کد هم در فرم لود گذاشتم که قبل از اجرای فرم عکس های اضافی رو پاک کنه
string[] files = Directory.GetFiles("..\\members_pic\\temp");
foreach (string s in files)
{
File.Delete(s);
}
حالا در صورتی که برای بار دوم فرم اجرا بشه به تنها دستور حلقه گیر میده و اونم اینه که فایل مورد نظر درگیر پروسه دیگه هست (البته اون موقع خود ویندوز هم نمیتونه پاکش کنه)
و در نهایت با یکی از فرم های زیر فرم رو می بندم و نتیجه اجرای همه کدها یکی هست
this.Dispose();
this.Close();
البته کد زیر هم جواب میده به جای دو دستور بالا ولی مشکلش اینه که کلا برنامه ریست میشه و این اصلا خوشایند نیست
Application.Restart();
حالا دستوری شبیه دستور بالا نیست که حداقل فرم رو کاملا ریست بکنه به جای اینکه کل برنامه رو ریست کنه؟
این طوری چک میکنم بعد ریست شدن خودم بعدش فرم رو می بندم و بعد از اینکه دفعات دیگه اجرا شد دیگه عکس ها درگیر پروسه نیستن