كيف يمكنني الضغط على مفتاح ENTER الأساسي التركيز للانتقال إلى الخلية أدناه مثل السلوك الافتراضي Excel؟

StackOverflow https://stackoverflow.com/questions/2247979

سؤال

أنا أستخدم Infragistic Ultrawingrid V9.1. أريد أن أسمح للمستخدم بإدخال بيانات رقمية في خلية، اضغط يدخل ثم يكون التركيز على الخلية أدناه، كما ترى في Excel. يبدو أن حدث KeyUP قد يكون أفضل من الحدث المكبوت لهذا الغرض، لكنني أظل رمي استثناء ذهبت إلى أبعد من حدود ultrawingrid على الرغم من أنني أبدأ في الجزء العلوي من الشبكة الكاملة. هنا هو الرمز الذي جربته:

    private void ugrid_KeyUp(object sender, KeyEventArgs e)
    {
        UltraGrid grid = (UltraGrid)sender;

        if (e.KeyCode == Keys.Enter)
        {
            // Go down one row
            UltraGridCell cell = grid.ActiveCell;
            int currentRow = grid.ActiveRow.Index;
            int col = cell.Column.Index;
            grid.Rows[currentRow + 1].Cells[grid.ActiveCell].Activate();
        }
    }

كنت أتوقع ذلك لجعل الخلية في نفس العمود ولكن صف واحد أدناه لتصبح الخلية النشطة مع المكالمة، والشبكة. ولا تقترب [currentrow + 1] .Cells [grid.activecell]. blactivate ()؛

بدلا من ذلك يتم طرح استثناء:

حدث استثناء من النوع "System.indexoutofrangeException" في Infragistics2.Shared.v9.1.dll ولكن لم يتم التعامل معه في كود المستخدم معلومات إضافية: كان الفهرس خارج حدود الصفيف.

منذ أن أنا في الصف 0 وهناك يوجد صف واحد 1 مفاجأة بالنسبة لي. قيم التيار الرئيسي والعقد هي 0 و 28 على التوالي. ماذا سيكون نهج أفضل؟ راجع للشغل، يمكنني القيام بذلك مرة أخرى الخلية أدناه، حيث تكون القيم الحالية = 1 و Col = 28. يتم إلقاء نفس الاستثناء.

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

المحلول

أجاب شخص ما سؤالي على شركة Infragistics Fora ...

    private void ugrid_KeyUp(object sender, KeyEventArgs e)
    {
        var grid = (UltraGrid)sender;

        if (e.KeyCode == Keys.Enter)
        {
            // Go down one row
            grid.PerformAction(UltraGridAction.BelowCell);
        }
    }

نصائح أخرى

لا أعرف ما إذا كان ما أقوله صالحا أيضا ل V9.1 ولكن يمكنك أيضا القيام بشيء مثل هذا:

yourGrid.KeyActionMappings.Add(new GridKeyActionMapping(Keys.Enter, UltraGridAction.BelowCell, 0, UltraGridState.Row, SpecialKeys.All, 0));
 private void ulGrvProducts_KeyUp(object sender, KeyEventArgs e)
        {

            UltraGrid grid =  (UltraGrid)sender;

            if (e.KeyCode == Keys.Enter)
            {
                 //Go down one row
                grid.PerformAction(UltraGridAction.BelowCell);
            }
        }

بعد استخدام grid.PerformAction(UltraGridAction.BelowCell) ، سوف يتغير الصف النشط ولكن الخلية التالية ليست في وضع التحرير.

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