تمت الإجابة ربط عدد من Listbox

تم تحميل الصفحة في 1,9921503 ثانية
ربط عدد من Listbox

Just a dude

Beginner Developer
rank
إنضم
7 ديسمبر 2018
المشاركات
47
الإعجابات
32
النقاط
18
العمر
29
السلام عليكم


اعتقد قسم الدوت نت هوه افضل قسم لمشكلتي لانها تعتمد على نظام ويندوز

اريد صنع برنامج به ListBox

هذا مثال من الانترنيت (المهم هوه Listbox)



كما ترى يوجد اكثر من list box وما اريده هوه مثل فلتره او اختيار مثلا
اصنع برنامج به 5 listbox
الاول يطلب السنه من سنه 1990 الى سنه 2020
بمعنى قائمه بكل هذه السنين
عندما ختار مثلا سنه 2010 سوف اضغط على Listbox الثاني وبه تضهر اختيارات حسب سنه 2010 فقط مثلا في 2010 يوجد 30 اختيار وسوف اختار واحد منها. وليكون اني اخترت رقم 19
الان انتقل list box وتظهر اختيارات حسب سنه 2010 ورقم 19 وتضهر قائمه بها اسماء ومثلا يوجد 100 اسم واختار احد الاسماء
وثم اختر listbox اخر ويضهر به اشهر السنه من شهر 1 الى شهر 12


الان كيف اربط هذه اللست بوكس ؟ اريد الفكره لاني لا ابرمج بلدوت نت لكن الفكره ممكن تطبيقها بلدوت نت وتكون اسهل وفقط اريد معرفه كيف يتم ربطها وانا اكمل الباقي


شكرا
 

Just a dude

Beginner Developer
rank
إنضم
7 ديسمبر 2018
المشاركات
47
الإعجابات
32
النقاط
18
العمر
29
إنضم
14 نوفمبر 2017
المشاركات
698
الإعجابات
790
النقاط
113
انا فقط شاهدت listbox واحد.

والعديد من ComboBox

هل تقصد أنك تريد أن تغير كل العناصر بمجرد اختيار Standard Menu ؟

تستطيع فعل ذلك بأكثر من طريقة. مثال بسيط:

قائمة.

كود:
public List<string> Num0 = new List<string> { "0", "1", "2", "3", "4", "5" };
public List<string> Num10 = new List<string> { "6", "7", "8", "9", "10" };
الان لدينا عدد 2 comboBox .. في البوكس الأول هنالك خياران .. 0-5 والآخر 6-10

في البوكس الآخر .. فارغ لأننا نريد أولاً أن نعرف اختيار المستخدم وعندها نضع العناصر التي تلائم اختياره

كود:
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //clear previous items
            comboBox2.Items.Clear();

            if (comboBox1.SelectedIndex == 0) //0 = "0-5"
            {
                comboBox2.Items.AddRange(Num0.ToArray());
            }
           else if (comboBox1.SelectedIndex == 1) //1 = "6-10"
            {
                comboBox2.Items.AddRange(Num10.ToArray());
            }
        }

AddRange ستجعل إضافة العناصر أكثر سرعة. مثال

كود:
            for (int i = 0; i < 1000; i++)
            {
                Num10.Add(i.ToString());
            }
وضعت في القائمة Num10 عناصر عبارة عن أعداد من 0 إلى الألف ..

وعند الاختيار لم يجمد أو يتاخر البرنامج ولو حتى ثانية.. فلا تقلق من البطئ.
 
إنضم
7 ديسمبر 2018
المشاركات
47
الإعجابات
32
النقاط
18
العمر
29
انا فقط شاهدت listbox واحد.

والعديد من ComboBox

هل تقصد أنك تريد أن تغير كل العناصر بمجرد اختيار Standard Menu ؟

تستطيع فعل ذلك بأكثر من طريقة. مثال بسيط:

قائمة.

كود:
public List<string> Num0 = new List<string> { "0", "1", "2", "3", "4", "5" };
public List<string> Num10 = new List<string> { "6", "7", "8", "9", "10" };
الان لدينا عدد 2 comboBox .. في البوكس الأول هنالك خياران .. 0-5 والآخر 6-10

في البوكس الآخر .. فارغ لأننا نريد أولاً أن نعرف اختيار المستخدم وعندها نضع العناصر التي تلائم اختياره

كود:
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //clear previous items
            comboBox2.Items.Clear();

            if (comboBox1.SelectedIndex == 0) //0 = "0-5"
            {
                comboBox2.Items.AddRange(Num0.ToArray());
            }
           else if (comboBox1.SelectedIndex == 1) //1 = "6-10"
            {
                comboBox2.Items.AddRange(Num10.ToArray());
            }
        }

AddRange ستجعل إضافة العناصر أكثر سرعة. مثال

كود:
            for (int i = 0; i < 1000; i++)
            {
                Num10.Add(i.ToString());
            }
وضعت في القائمة Num10 عناصر عبارة عن أعداد من 0 إلى الألف ..

وعند الاختيار لم يجمد أو يتاخر البرنامج ولو حتى ثانية.. فلا تقلق من البطئ.

اسف على الرد المتاخر

ما اريده مثلا اختار أولا الدوله
وفي كل دوله يوجد مدن كثيره ومختلفه
وكل مدينه بها مقاطعات كثيره
وكل مقاطعه بها من 1 الى 5 صناديق
وعند اختيار صندوق سوف تظهر عناوين مختلفه وكل عنوان يضهر ساعات العمل والأيام والمبلغ

اعتقد انا اقصد Combo box

هل هذه الطريقه التي كتبتها افضل طريقه ؟
كما تعلم يوجد الكثير من الدول والمدن وسرعه الاختيارات مهمه خصوصا المستخدم لا يحب الانتظار
 

Spawner Freezo

.:: مُساعد مُشرف أقسام البرمجة ::.
rankrank
إنضم
12 أبريل 2015
المشاركات
331
الإعجابات
503
النقاط
93
العمر
21
الإقامة
Morocco
مثل هذا

كود:
        string[] boxNum = { "Box_1", "Box_2", "Box_3", "Box_4", "Box_5" };

        var countryData = new Dictionary< string, Dictionary<string, Dictionary<string, string[] > > >();
        var cityData = new Dictionary< string, Dictionary<string, string[] > >();

        cityData.Add
        (
            "Casablanca",
            new Dictionary< string, string[] >()
            {
                ["Province_Casa_1"] = boxNum,
                ["Province_Casa_2"] = boxNum
            }
        );

        cityData.Add
        (
            "Rabat",
            new Dictionary< string, string[] >()
            {
                ["Province_Rabat_1"] = boxNum,
                ["Province_Rabat_2"] = boxNum
            }
        );

        countryData.Add( "Morocco", cityData );

        comboBox1.SelectedIndexChanged += ( @_1, @_2 ) => {

            comboBox2.Items.Clear();
            comboBox2.ResetText();

            foreach (var _data in countryData)
                if (_data.Key.Equals( comboBox1.SelectedItem?.ToString() ))
                    foreach (var _city in _data.Value)
                        comboBox2.Items.Add( _city.Key );

            comboBox2.SelectedIndexChanged += ( @_3, @_4 ) =>
            {
                comboBox3.Items.Clear();
                comboBox3.ResetText();

                foreach (var _data in countryData)
                    foreach (var _city in _data.Value)
                        if (_city.Key.Equals( comboBox2.SelectedItem?.ToString() ))
                            foreach (var _province in _city.Value)
                                comboBox3.Items.Add( _province.Key );
            };
            comboBox3.SelectedIndexChanged += ( @_5, @_6 ) =>
            {
                comboBox4.Items.Clear();
                comboBox4.ResetText();

                foreach (var _data in countryData)
                    foreach (var _city in _data.Value)
                        if (_city.Key.Equals( comboBox2.SelectedItem?.ToString() ))
                            foreach (var _province in _city.Value)
                                if (_province.Key.Equals( comboBox3.SelectedItem?.ToString() ))
                                    comboBox4.Items.AddRange( _province.Value );
            };
        };
 

Spawner Freezo

.:: مُساعد مُشرف أقسام البرمجة ::.
rankrank
إنضم
12 أبريل 2015
المشاركات
331
الإعجابات
503
النقاط
93
العمر
21
الإقامة
Morocco
صراحة السرعة لا تفرق في هاته الحالة، إذا كنت مازلت مهتماً قمت ببعض التعديلات، لا أعلم في ماذا كنت أفكر عندما وضعت foreach لكل إختيار لكن يمكنك جلب المعلومات مباشرة من خلال Dictionary

كود:
// An example of initializing values in a nested dictionary. lmao
var countryData = new Dictionary<string, Dictionary<string, Dictionary<string, string[]>>>()
{
    [ "Morocco" ] = new Dictionary<string, Dictionary<string, string[]> >()
    {
        [ "Casa" ] = new Dictionary<string, string[]>()
        {
            [ "Province_Casa_1" ]   = new [] { "Box_1", "Box_2" },
            [ "Province_Casa_2" ]   = new [] { "Box_1", "Box_2" }
        },
        [ "Rabat" ] = new Dictionary<string, string[]>()
        {
            [ "Province_Rabat_1" ]  = new [] { "Box_1" },
            [ "Province_Rabat_2" ]  = new [] { "Box_1" }
        }
    }
};

// Let's suppose you have a list or that you want to add data separately.
// The next line with countryData.Add is commented because Morocco is already initialised.
// countryData.Add( "Morocco", new Dictionary<string, Dictionary< string, string[]>>());
countryData[ "Morocco" ].Add( "Fes", new Dictionary<string, string[]>() );

countryData[ "Morocco" ][ "Fes" ].Add( "Province_1", new [] { "Box_1" } );
countryData[ "Morocco" ][ "Fes" ].Add( "Province_2", new [] { "Box_2" } );

// Get Province_1 Province_2 from Morocco->Fes
Console.WriteLine( string.Join( ",", countryData[ "Morocco" ][ "Fes" ].Keys ) );

// Get Box_1 Box_2 from Morocco->Casa->Province_Casa_1
Console.WriteLine( string.Join( ",", countryData[ "Morocco" ][ "Casa" ][ "Province_Casa_1" ] ) );

بالنسبة لل-"عناوين مختلفه وكل عنوان يضهر ساعات العمل والأيام والمبلغ" يمكنك تتبع نفس طريقة كما عملت ( يعني nested Dictionaries )
 
التعديل الأخير:

MaGez_Design

Beginner Developer
rankrank
إنضم
28 ديسمبر 2018
المشاركات
256
الإعجابات
96
النقاط
28
العمر
22
ماذا لو كان عندي اكثر من 1000 item واضافه هذا العدد يأخذ وقت والكثير من الشروط
هل هناك طرق أخرى تكون مشابه ام الطريقه الوحيده؟
for i = 2010 to 2020
listbox.item.add( I ) // put in try
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 0 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل