C# ListBox'daki Seçilen Satırın Verilerini Alma

Selamlar. C#’ da bir class tanımladım. Class’ın isim ve numara gibi 2 propu var. Bu class’ın isim kısımlarını listbox’a atadım. Listbox’ta seçilen satırdaki ismin numarasını bir string’e almak istiyorum.(index numarasını değil). Nasıl yapabilirim? Teşekkürler.

Classtan oluşturduğunuz örnekleri bir sözlük içine atın. Bu iş için C#'taki Dictionary sınıfını kullanabilirsiniz. Anahtar olarak isim, değer olarak sayıyı verin. Listbox’tan gelen string ifadesini kullanarak ulaşabilirsiniz.

Anlamadığınız bir yer varsa örnek kod paylaşabilirim.

namespace covid19
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string SelectedCountry;

        public void Form1_Load(object sender, EventArgs e)
        {
            string countries = "https://api.covid19api.com/countries";
            WebRequest req = HttpWebRequest.Create(countries);
            WebResponse res;
            res = req.GetResponse();
            StreamReader sr = new StreamReader(res.GetResponseStream());
            string GetInfo = sr.ReadToEnd();
            List<Countries> countriesList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Countries>>(GetInfo);

            var CountriesSorted = countriesList.OrderBy(x => x.Country);
            foreach (var i in CountriesSorted)
            {
                listBox1.Items.Add(i.Country);

            }
        }

        class Countries
        {
            public string Country { get; set; }
            public string Slug { get; set; }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {


            SelectedCountry = listBox1.SelectedItem.ToString();
        }

    }
}

Bu benim kodlarım. Dediğiniz yolu nasıl uygulayacağımı tam anlayamadım. Buradaki listboxtan seçtiğim Country değerine göre api’nin sonuna slug’ını eklemem gerekiyor.

Yazdığınız kodu görünce yukarıdaki düşüncemden vazgeçtim. O yine olabilir ancak şimdi yazdığım yöntem bu kod için daha iyi.

public string find_slug()
{
    // ListBox'da seçili olan ülkenin adını bulalım
    string country = listBox1.Items[listBox1.SelectedIndex].ToString();
    // Her ülkeyi tek tek kontrol edelim
    foreach(var i in CountriesSorted)
    {
        // Ülkenin adı hangisiyle eşleşiyor
        if(i.Country == country)
        {
            // Eşleşen ülkenin slug değerini döndürelim
            return i.Slug;
        }
    }
}

Kodda syntax hatası olabilir deneme şansım olmadı. Ancak mantığı anladıysanız düzenleyebilirsiniz.

Bu fonksiyon size seçilen ülkenin slug değerini verecektir ancak nerede kullanmanız gerektiğini bilemiyorum.

CountriesSorted’i Fom1_Load’da tanımladığım için fonksiyonda çağıramıyorum. Başka nasıl bir alternatifi olabilir

CountriesSorted’i Fom1_Load’da tanımlamak zorunda mısınız?

Daha erken tanımlayın veya daha erken oluşturup Fom1_Load’da değer atayın.

Windows forms mu kullaniyorsun? C#'ta listbox’u olan en az 3 tane kutuphane biliyorum.

Sadece isimleri atarsan secili isimleri tekrardan bulman gerekir. Veya: winforms - c# add object to listbox and show string of object in it - Stack Overflow