PDA

View Full Version : حرفه ای: اضافه کردن ایتم و کلید ایتم در listbox



rezadana
دوشنبه 09 دی 1398, 19:04 عصر
سلام دوستان.
از اساتید ممنون میشم اگر راهنمایی بفرمایید.
من توی لیست باکس میخوام یه سری رشته بریزم که ایدی یا همون کلید هر ایتم هم داخلش باشه.
در حالات عادی من ندیدم که لیست باکس گزینه ای برای اضاف کردن value به لیست باکس داشته باشه. اگر راه حلی بهم بگین ممنون میشم.

مثلا اطلاعاتی مثل استانها میخوام تو لیست باکس بریزم که هر استانی ایدی مخصوص بخود داره.
نام استانها رو که میتونم با add item به لیست باکس اضاف کنم اما اون ایدی هر استان رو کجا باید بریزم تو لیست باکس که موقع واکشی بتونم ایدی هر استان رو بگیرم ازش؟

ASHKANLAEI
دوشنبه 09 دی 1398, 20:34 عصر
میتونید از دو لیست باکس استفاده کنید. یکی نام استان ها و یکی به همون ترتیب آیدی استان ها. و اونی که آیدی ها توشه رو پنهان کنید.

البته راه مناسب ترش اینه که یا از کامپیوننت دیگری استفاده کنید یا این که آیدی ها رو همون ایندکس آیتم ها بزارید: یعنی اولین آیتم آیدیش باشه 1، دومین آیتم 2، سومی 3 و ... .

the king
دوشنبه 09 دی 1398, 20:45 عصر
سلام دوستان.
از اساتید ممنون میشم اگر راهنمایی بفرمایید.
من توی لیست باکس میخوام یه سری رشته بریزم که ایدی یا همون کلید هر ایتم هم داخلش باشه.
در حالات عادی من ندیدم که لیست باکس گزینه ای برای اضاف کردن value به لیست باکس داشته باشه. اگر راه حلی بهم بگین ممنون میشم.

مثلا اطلاعاتی مثل استانها میخوام تو لیست باکس بریزم که هر استانی ایدی مخصوص بخود داره.
نام استانها رو که میتونم با add item به لیست باکس اضاف کنم اما اون ایدی هر استان رو کجا باید بریزم تو لیست باکس که موقع واکشی بتونم ایدی هر استان رو بگیرم ازش؟
در نظر بگیرید که آیتم های داخل ListBox از نوع object هستند، نه string. یعنی شما هر نوع داده ای که دلتون بخواد میتوانید بهش بدید، حتی یک ساختار داده ای که صد تا فیلد جور واجور داشته باشه رو میشه به عنوان آیتم به ListBox بدید.
کلا تمامی کنترل های استاندارد که ورودی object میگیرند این قابلیت رو دارند که بهشون یک نوع داده پیچیده و چند بخشی رو بدید و موقع نشون دادن تصمیم بگیرید که چه بخشی از داده رو نشون بدن.
مثال های خیلی متنوعی میشه زد، اما در مورد کاربرد خاص شما، ترکیب کلید و مقدار <KeyValuePair<TKey,TValue ئه، همونی که Dictionary ثبت می کنه. شما می توانید همون <KeyValuePair<TKey,TValue که هم کلید و هم مقدار رو داره به ListBox بدید و موقع نشون دادن تصمیم بگیرید که فرضا مقدار رو نشون بده، یا کلید رو نشون بده، یا هر فرمت string دلخواه تون رو نشون بده.


private void Form1_Load(object sender, EventArgs e)
{
var dic = new Dictionary<int, string>();
dic.Add(1, "Gilan");
dic.Add(2, "Mazandaran");
dic.Add(3, "Azarbayjan Sharghi");
dic.Add(4, "Azarbayjan Gharbi");
dic.Add(5, "Kermanshah");
listBox1.DataSource = new List<KeyValuePair<int, string>>(dic).ToArray();
}

private void listBox1_Format(object sender, ListControlConvertEventArgs e)
{
e.Value = ((KeyValuePair<int, string>)e.ListItem).Value;
}

private void button1_Click(object sender, EventArgs e)
{
var id = ((KeyValuePair<int, string>)listBox1.SelectedItem).Key;
MessageBox.Show(id.ToString());
}

rezadana
چهارشنبه 11 دی 1398, 21:12 عصر
سپاس از شما ممنون از راهنمایی مفیدتون

rezadana
چهارشنبه 11 دی 1398, 21:13 عصر
سپاس بزرگوار