سؤال

وكيف يمكن للمرء أن إطلاق النار برمجيا الحدث SelectedIndexChanged من ListView؟

ولقد المعدة للالعنصر الأول في بلدي ListView إلى تلقائيا تصبح المحدد بعد اكتمال المستخدم إجراء معين. كود موجود بالفعل داخل الحدث SelectedIndexChanged لتسليط الضوء على العنصر المحدد. لا يقتصر هذا البند تفشل لتصبح أبرز، ولكن نقطة توقف ضمن مجموعة SelectedIndexChanged هو ضرب أبدا. وعلاوة على ذلك، فشل Debug.WriteLine لإنتاج الإخراج، لذلك أنا واثق بدلا لم أطلق هذا الحدث.

والتعليمة البرمجية التالية يفشل في إطلاق الحدث:

listView.Items[0].Selected = false;
listView.Items[0].Selected = true;
listView.Select();
Application.DoEvents();

وأدرج استدعاء الأسلوب إضافية. حدد () لحسن التدبير. ؛) أدرج إلغاء التحديد (.Selected = كاذبة) لإلغاء تحديد ListViewItem في جمع. العناصر فقط في حالة أنه قد تم تحديدها بشكل افتراضي، ولذلك فإن تحديد ذلك إلى 'true' ليس لها أي تأثير. و"Application.DoEvents () 'المكالمة بعد آخر طريقة خندق آخر.

ويجب أن لا رمز أعلاه تسبب الحدث SelectedIndexChanged لاطلاق النار؟

وأود أن أذكر أن الحرائق الحدث SelectedIndexChanged بشكل صحيح عندما يتم selcted عنصر عن طريق لوحة المفاتيح أو الماوس الإدخال.

هل كانت مفيدة؟

المحلول

وإلغاء تحديد ذلك عن طريق وضع لكاذبة لن إطلاق الحدث ولكن تعيين إلى الإرادة الحقيقية.

    public Form1 ()
    {
        InitializeComponent();
        listView1.Items[0].Selected = false; // Doesn't fire
        listView1.Items[0].Selected = true; // Does fire.
    }

    private void listView1_SelectedIndexChanged (object sender, EventArgs e)
    {
        // code to run
    }

قد يكون لديك شيء آخر يحدث. ما حدث تركض كود اختيارك؟

نصائح أخرى

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

وشيء من هذا القبيل:

class Foo
{
    void bar(Object o, EventArgs e)
    {
        // imagine this is something important
        int x = 2;
    }

    void baz()
    {
        // you want to call bar() here ideally
    }
}

وسيتم ريفاكتوريد لهذه:

class Foo
{
    void bar(Object o, EventArgs e)
    {
        bop();
    }

    void baz()
    {
        bop();
    }

    void bop()
    {
        // imagine this is something important
        int x = 2;
    }
}

إذا قمت بإنشاء فئة مشتقة من ListView، يمكنك استدعاء الأسلوب محمية <لأ href = "http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.onselectedindexchanged.aspx "يختلط =" نوفولو noreferrer "> OnSelectedIndexChanged . هذا وسوف إطلاق الحدث SelectedIndexChanged.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top