PDA

View Full Version : سوال: اند and کردن چند تا If با هم به طوریکه همه ی If ها چک بشه



shaghayegh_ir
دوشنبه 11 اردیبهشت 1391, 22:48 عصر
سلام

یه برنامه دارم چیزی مشابه سرچ ویندوز که بطور جداگونه همه ی گزینه ها رو تونستم با If اجرا کنم . ولی الان میخوام همه ی این If ها رو یکجا بیارم .
مثلن چک کنه اگه نوشته باشه فایلهای تصویری رو جستجو کنه توی یه textBox که جداگونه اونم باز شرط داره با چه پسوند خاصی و توی چه محدوده ی زمانی
این If ها رو باید توی یه حلقه ی foreach همه رو با هم بذارم و در آخر فایلهای به دست اومده رو مرتب کرده و توی یه آرایه بریزه و بعد توی لیست باکس بهم نشون بده
نمیدونم چطور If ها رو با هم یکی کنم . با توجه به اینکه اگه بخوام and کنم اگه یه قسمت تنظیم نشه و مقدار 0 بشه خب بقیه If ها رو هم چک نمیکنه و نتیجه خالی میده

:( لطفن راهنمایی کنید :(

ROSTAM2
دوشنبه 11 اردیبهشت 1391, 23:05 عصر
فایلهای به دست اومده رو مرتب کرده و توی یه آرایه بریزه و بعد توی لیست باکس بهم نشون بده
شما که می خواید تو لیست باکس نشون بده آرایه چرا؟

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

shaghayegh_ir
دوشنبه 11 اردیبهشت 1391, 23:13 عصر
چون استاد گفته توی لیست باکس بریزید . حتی توی لیست ویو هم نمیتونیم بریزیم . یا گرید
کد چی رو بذارم ؟

ROSTAM2
دوشنبه 11 اردیبهشت 1391, 23:24 عصر
دقت نکردی نوشتم آرایه چرا؟
ون یه مدت زمان باید صرف کنه بریزه تو آرایه یه مدت هم بریزه تو لیست باکس ، بهر حال بگذریم مشکل اینجا نیست


کد چی رو بذارم ؟

یه قسمت که نحوه دستور دادن با if ها رو نشون بده خوب

shaghayegh_ir
دوشنبه 11 اردیبهشت 1391, 23:37 عصر
86536


اینم کد دو تا از قسمتها مثلن

if (RBtaghir.Checked == true)
{

FileInfo[] listfile = Posheh.GetFiles(tbnam.Text, Gozineh);

{

foreach (FileInfo dir in listfile)
{
if (dir.LastWriteTime >= dateTimePicker1.Value && dir.LastWriteTime <= dateTimePicker2.Value)

listBox1.Items.Add(dir.FullName);
}
}
}
else
if (chbsysFile .Checked == false )
{
FileInfo[] listfile = Posheh.GetFiles(tbnam.Text, Gozineh);
{
foreach (FileInfo dir in listfile )
{
if ((dir.Attributes & FileAttributes.System) == FileAttributes .System)
listBox1 .Items .Remove (dir .FullName );
}
}
}

الان هر بار بعد از شرط ها اون آرایه پر میشه و جداگونه نمایش داده میشه
باید کاری کنم که آرایه که پر شد از فایلهای پوشه ی انتخابی، بعد شرطها چک بشن که ببینیم کاربر چه قسمتهایی رو تنظیم کرده و در نهایت نتیجه رو توی یه آرایه ی جدید ذخیره کنه و اونو بدیم لیست باکس

shaghayegh_ir
دوشنبه 11 اردیبهشت 1391, 23:41 عصر
:اشتباه: ببخشید قاطی کردم . آرایه . نمیدونم چرا آرایه . پس تو چی باید بریزیم ؟
:ناراحت: خب آدم قر و قاطی میکنه بعد یه مدت طولانی پشت سیستم نشستن

gwbasic
سه شنبه 12 اردیبهشت 1391, 08:57 صبح
بهترین روش استفاده از Linq هست که احتمالا شما مجاز به استفاده نیستید در هر صورت به روش زیر باید عمل کنید:
شما باید ابتدا کل فایل ها رو در یک لیست بریزید سپس یک حلقه for روی این لیست از انتها به ابتدا بزنید و روی هر آیتم شرط هاتون رو به صورت زیر چک کنید و در صورتیکه یکی از آنها بر قرار نبود آن آیتم را با استفاده از RemoveAt حذف کنید. مثلا :

List<FileInfo> fileInfoes = new DirectoryInfo("C:\\").GetFiles().ToList();
int max = fileInfoes.Count;
for (int i = max; i > -1; i--)
{
bool mustRemove = false;
if (filesInfoes[i].CreateTime > new DateTime(2010, 1, 1))
mustRemove = true;
// همینطور بقیه شرط ها اگر برقرار نبود باید
// mustRemove = true;
// شود
// و در نهایت شرط زیر چک شود
if (mustRemove == true)
filesInfoes.RemoveAt(i);
}

shaghayegh_ir
سه شنبه 12 اردیبهشت 1391, 12:37 عصر
نه متاسفانه مجاز نیستم استفاده کنم
میتونم توی یه کالکشن بریزم . این کالکشن یه شمارنده بهش بدم که اگر If برقرار بود اونهایی رو که شرط برقرار میشن رو بریزه با اون شمارنده توی کالکشن و یکی به شمارنده اضافه کنه و محتویات رو بریزه توی یه کالکشن جدید . اینطوری میشه؟
بعد در انتها بیام کالکشن رو بریزم توی لیست باکس ؟

gwbasic
سه شنبه 12 اردیبهشت 1391, 13:10 عصر
فکر کنم متوجه منظورم نشدید. من بدون استفاده از LINQ توضیح دادم. شما ابتدا کل فایل ها رو در یک لیست می ریزید سپس با توجه به شروط آیتمهایی رو حذف می کنید در نهایت این لیست رو به ListBox بایند می کنید

shaghayegh_ir
سه شنبه 12 اردیبهشت 1391, 15:12 عصر
مرسی چکش میکنم اطلاع میدم

Alghoochi
سه شنبه 12 اردیبهشت 1391, 15:18 عصر
if (filesInfoes[i].CreateTime > new DateTime(2010, 1, 1))
اینو میشه توضیح بدید ؟

قسمت bool چی هست ؟

دو تاریخ رو با هم مقایسه می‌کنه. قسمت بولین رو چون ذکر نکردن معدل ==true هست.

omidamiry
سه شنبه 12 اردیبهشت 1391, 15:57 عصر
چرا کارخودتونو سخت میکنید.شما یه اصل رو فراموش کردید و همیشه باید یادتون باشه که پابند داده های ورودی کاربر نشد اگر بشد به مشکلی که خودتون گفتید برمیخورید خالی بودن .

شما باید ورودی پیش فرض تعریف کنید تا در صورت خالی بودن هیچگاه خطا نده.

برنامه شما دارای هفت قسمت هست که باید حتما انتخاب بشه (رادیو باتن) و قسمتی که احتمال خالی بودن داره باید جدا چک کنید مثلا نام اگر وارد شده بود والا هیچ .
برای قسمت های دیگه رشته تعریف کن و خاصیت های فایل هارو با اون رشته ها مقایسه کن اگر بود داخل لاین i لیست باکس ادد کنه.


این توضیح رو بدم که برنامه شما یک پارچه نیست و مجموعه ای از قسمتهاست نمی تونید یک پارچه کنید به غیر قسمتهایی که حتما باید پربشه چون همیشه انتخاب کاربر رو چک میکنه.
موفق باشی

gwbasic
سه شنبه 12 اردیبهشت 1391, 16:20 عصر
if (filesInfoes[i].CreateTime > new DateTime(2010, 1, 1))
اینو میشه توضیح بدید ؟

قسمت bool چی هست ؟

من فقط یک شرط رو به صورت Hard Code نوشتم. فقط یک مثال از یک شرط بود... .
ببینید شرط های شما بر اساس ورودی کاربر مشخص می شه بنابراین and کردن اونها پیچیده می شه پس برای راحتی کار شما باید شرط ها رو به صورت مجزا بنویسید
مثلا براساس اینکه کاربر در "تنظیم تاریخ" چه چیزی رو وارد کرده شرط شما مشخص می شود خوب این شرط می شه یک شرط شما. مورد دیگه "خصیصه فایل" هست براساس مقداری که کاربر تیک زده باز هم شرط دیگر شما مشخص می شود
خوب حالا کافیه برای هر کدوم از این شرط ها شما یک if بگذارید و در صورت برقرار نبودن mustRemove رو true کنید.
کاربرد mustRemove هم اینه که شما می تونید براساس اون تصمیم بگیرید که اون آیتم رو پاک کنید یا نه