سلام استاد
اگر لیست رو یک برج در نظر بگیریم که بعد از حذف یک عضو یا همون طبقه برج رو هوا میموند ، میتونیم بعد از هر حذف یکاری کنیم که بعد از برداشتن یک طبقه ، طبقات بالایی یک طبقه بیان پایین و بعدش هم میتونیم یک حلقه بزنیم که طبقه ی آخر رو پیدا کنیم که برای افزودن هم دیگه مشکلی نداشته باشیم.
private void cbxSub_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cbxSub.SelectedIndex)
{
case 0:
{
Data.maxrow = 5;
break;
}
case 1:
{
Data.maxrow = 10;
break;
}
case 2:
{
Data.maxrow = 20;
break;
}
}
}internal class Data
{
public static int row = 0;
public static int maxrow = 5;
public static Person[] plist = new Person[21];
}private void Refresh()
{
dgvList.Rows.Clear();
foreach (Person p in Data.plist)
{
if (p != null)
dgvList.Rows.Add(p.Pname, p.Plastname, p.Page, p.Prole, p.Pnumber);
}
}int _id= 0;
private void btnRemove_Click(object sender, EventArgs e)
{
if (dgvList.SelectedRows.Count == 1)
{
var index = dgvList.CurrentRow.Index;
Person p = Data.plist[index];
if (MessageBox.Show($"Are You sure you want to Remove {p.Pname} {p.Plastname}?", "Waring", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Data.plist[index] = null;
while (index < Data.maxrow)
{
Data.plist[index] = Data.plist[(index + 1)];
index++;
}
while (true)
{
if (Data.plist[_id] == null)
{
Data.row = _id;
_id = 0;
break;
}
_id++;
}
Refresh();
}
}
else if(dgvList.SelectedRows.Count < 1)
{
MessageBox.Show("Select a Person first", "Guide", MessageBoxButtons.OK);
}
else if(dgvList.SelectedRows.Count > 1)
{
MessageBox.Show("Too many people are selected", "Guide", MessageBoxButtons.OK);
}
}
بسیار عالی