Dim lst As List(Of String)
lst.Clear() 'پاک کردن تمام آیتمها
lst.RemoveAt(20) 'پاک کردن آیتم 20 ام
lst.Remove("myItem") ' پاک کردن آیتم مشخص شده
lst.IndexOf("myItem") ' پیدا کردن ایندکس آیتم مشخص شده
lst.Insert(12, "myItem") ' اضافه کردن آیتم به لیست در آیندکس مشخص شده
براي تغيير مقدار بايد مطابق كد زيز عمل كنيد
lst.Item(0) = "ALI"
for (s = i-1; s <= j; s++)
{
st[s].id = st[s + 1].id;
st[s].name = st[s + 1].name;
st[s].family = st[s + 1].family;
st[s].course = st[s + 1].course;
st[s].average = st[s + 1].average;
st[s].address = st[s+ 1].address;
}
for (i = 0; i <=j; i++)
{
listBox1.Items.Add(i + " " + st[i+1].id + " " + st[i+1].name + " " + st[i+1].family + " " + st[i+1].course + " " + st[i+1].average + " " + st[i+1].address);
}
[LEFT] private void button4_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
if (j > 0)
{
for (int s = 0; s < (j - 1); s++)
{
st[s].id = st[s + 1].id;
st[s].name = st[s + 1].name;
st[s].family = st[s + 1].family;
st[s].course = st[s + 1].course;
st[s].average = st[s + 1].average;
st[s].address = st[s + 1].address;
}
st[j] = new student();
j--;
for (i = 0; i < j; i++)
{
listBox1.Items.Add((i + 1) + " " + st[i].id + " " + st[i].name + " " + st[i].family + " " + st[i].course + " " + st[i].average + " " + st[i].address);
}
}
}
[/LEFT]
آره منم امتحان کردم قسمت حذف کار نمیکنه!
مشکل در این قسمت هاست:
کد:for (s = i-1; s <= j; s++) { st[s].id = st[s + 1].id; st[s].name = st[s + 1].name; st[s].family = st[s + 1].family; st[s].course = st[s + 1].course; st[s].average = st[s + 1].average; st[s].address = st[s+ 1].address; } for (i = 0; i <=j; i++) { listBox1.Items.Add(i + " " + st[i+1].id + " " + st[i+1].name + " " + st[i+1].family + " " + st[i+1].course + " " + st[i+1].average + " " + st[i+1].address); }
مشکل حلقه ی اول مقدار i , j هست...باید توجه داشته باشین که مقدار این متغیرها با اجرای توابع تغییر میکنه ...من مجدد اونها رو مقدار دهی کردم و مشکل حلقه ی اول رفع شد..
اما مشکل حلقه ی دوم مقادیر آرایه ی []st هست که توسط حلقه ی قبلی تعیین میشه!فکر میکنم اگر روند حذفت رو طوری تعریف کنی که با گرفتن "آی دی مورد نظر برای حذف شدن" در ورودی تابع انجام بشه این مشکل هم بر طرف بشه..
سلام.ممنون از راهنماییتون
اول باید id مورد نظر رو در تکس باکس جلوی آی دی (شماره دانشجو)بنویسیم.بعد سرچ رو انتخاب.اونوقت حذف رو میزنیم
بازم ممنون![]()
[LEFT] listBox1.Items.Clear();
for (int k = 0; k < j; k++)
{
listBox1.Items.Add(k + " " + st[k].id + " " + st[k].name + " " + st[k].family + " " + st[k].course + " " + st[k].average + " " + st[k].address);
}
for (int k = j; k < (i-1); k++)
{
st[k].id = st[k + 1].id;
st[k].name = st[k + 1].name;
st[k].family = st[k + 1].family;
st[k].course = st[k + 1].course;
st[k].average = st[k + 1].average;
st[k].address = st[k+ 1].address;
}
i--;
for (int k = j; k < i; k++)
{
listBox1.Items.Add(k + " " + st[k].id + " " + st[k].name + " " + st[k].family + " " + st[k].course + " " + st[k].average + " " + st[k].address);
}[/LEFT]
کد:[LEFT] listBox1.Items.Clear(); for (int k = 0; k < j; k++) { listBox1.Items.Add(k + " " + st[k].id + " " + st[k].name + " " + st[k].family + " " + st[k].course + " " + st[k].average + " " + st[k].address); } for (int k = j; k < (i-1); k++) { st[k].id = st[k + 1].id; st[k].name = st[k + 1].name; st[k].family = st[k + 1].family; st[k].course = st[k + 1].course; st[k].average = st[k + 1].average; st[k].address = st[k+ 1].address; } i--; for (int k = j; k < i; k++) { listBox1.Items.Add(k + " " + st[k].id + " " + st[k].name + " " + st[k].family + " " + st[k].course + " " + st[k].average + " " + st[k].address); }[/LEFT]
خوب با این توضیحات اینجور میشه که j اشاره می کنه به اندیسی که قراره حذف بشه و i تعداد اعضای آرایه رو نشون می ده !
خوب ما اول می آیم اعضایی که قبل اون عضوی از آرایه که قراره حذف بشه رو نشون می دیم (حلقه ی اول) بعد با حلقه ی دوم مابقی اعضا رو شیفت می دیم ! و بعد اعضایی که بعد از عضوی که قراره حذف بشه رو نشون می دیم (حلقه ی سوم )
البته شاید راه حل دیگه هم باشه ولی این به ذهن من رسید ! البته اگه به جای آرایه از List استفاده می شد که خیلی راحت تر بود !
آخه استاد گفت با آرایه...اما ایراد حذف کجاست2بار باید زده شه تا جواب بده....شنبه معلوم میشه....
درهرصورت ممنون که وقت گذاشتید
خب شما اگه یک breakpoint بزارین و اون تابع رو debug کنید متوجه میشین قضیه از چه قراره
فرض کنید 3 تا دانشجو رو ثبت کردیم و می خوایم دومی رو حذف کنیم !
وقتی برای اولین بار برنامه وارد تابع حذف میشه ما این مقدار ها رو داریم
j که مقدارش یک هست یعنی اندیس عضوی از آرایه که قراره حذف بشه . و i هم مقدارش 3 هست یعنی تعداد اعضای آرایه !
خوب با این شرایط حلقه ی اول اجرا نخواهد شد طبق اون شرط ! چون مقدار s دو هستش .
وقتی وارد حلقه ی دوم میشه مقدار i صفر میشه !و چون مقدار j یک مونده بنابراین این حلقه میاد 2تا عضو اول آرایه رو اضافی می کنه به لیست .
برای بار دوم که این تابع اجرا میشه مقدار j که همون یک مونده ولی مقدار i از سه به دو عوض شده ! بنابراین حلقه ی اول یک بار اجرا می شه طبق اون شرطی که داره .(مقدار s یک هستش) پس میاد اعضایی که بعد از عضو دوم که قرار هست حذفش کنیم یکی شیفت می ده .تو این مثال عضو سه میاد به جای عضو دوم .
وقتی وارد حلقه ی دوم میشه دوباره مقدار i صفر میشه ! و چون مقدار j یک هست بنابراین این حلقه دوبار اجرا میشه ! پس عضو اول و دوم رو وارد لیست می کنه . (در ضمن لیست باکس یه بار دیگه اول تابع خالی شده )
اما تو این مثال که 3 تا عضو داشتیم درست کار کرد تعداد عضو بالا بشه دیگه کار نمی کنه ! چرا چون i تعداد اعضای آرایه رو نشون می ده و با صفر شدنش ما دیگه نمی دونیم تعداد اعضا چقدره ! و چون حلقه ی دوم تا j پیش میره پس i هم تعداد اعضا رو تا اون عضو حذف شده نشون می ده ! یعنی اگه 10 تا عضو باشه و شما عضو 6 رو حذف کنید ! باید مقدار i نه بشه ولی تبدیل به 6 میشه !
امیدوارم واضح گفته باشم !![]()
ممنون ...باید ببینم ایراد کارم کجاست....iرو مساوی صفر قرار ندادم...مگه اندیس در سی شارپ از صفر شروع نمیشه!....یعنی از اولین اندیس کار رو شروع کن...
روز خوش![]()
[LEFT]for (i = 0; i <=j; i++)[/LEFT]
i یک متغیر عمومی هستش !
اینجا مساوی صفر کردین !!!!!!!!کد:[LEFT]for (i = 0; i <=j; i++)[/LEFT]
کد:[LEFT] listBox1.Items.Clear(); for (int k = 0; k < j; k++) { listBox1.Items.Add(k + " " + st[k].id + " " + st[k].name + " " + st[k].family + " " + st[k].course + " " + st[k].average + " " + st[k].address); } for (int k = j; k < (i-1); k++) { st[k].id = st[k + 1].id; st[k].name = st[k + 1].name; st[k].family = st[k + 1].family; st[k].course = st[k + 1].course; st[k].average = st[k + 1].average; st[k].address = st[k+ 1].address; } i--; for (int k = j; k < i; k++) { listBox1.Items.Add(k + " " + st[k].id + " " + st[k].name + " " + st[k].family + " " + st[k].course + " " + st[k].average + " " + st[k].address); }[/LEFT]
خب حالا عصبی نشو... دیگه نمیپرسم....قبلا گفتم تو تابع حذف باید چی بنویسی !
خب حالا عصبی نشو... دیگه نمیپرسم....
فقط یه سوال... بعداز حذف...چجوری به لیست باکس بفهمونیم آرایه رو چاپ کنه...مگه طول آرایه نیاز نمیشه....آخه چیزی استفاده نکردی که.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
الان من عصبانیم ؟؟؟/؟؟؟؟؟؟
خب مگه i طول آرایه رو نگه نمی داشت؟
می تونی از i استتفاده کنی !
دوست عزیز میشه پروژه رو بزاری من ببینم
منم میخوام این کارو بکنم
ببینم چی کار کردی
Thread starter | عنوان | تالار | پاسخ ها | تاریخ |
---|---|---|---|---|
![]() |
ارتباط برنامه با سخت افزار و ایجاد محدودیت ثبت رکورد قبل از زمان مشخص | C#.NET | 3 | |
![]() |
ارور زمان ثبت اطلاعات | C#.NET | 1 | |
![]() |
تغییر نام عکس | C#.NET | 2 | |
H | تغییر نام ستون ها ی جدول در بانک sql | C#.NET | 2 | |
R | جلو گیری از ورود دو نام کاربری مثل هم | C#.NET | 15 |