如何垂直而不是水平制表符

Posted

技术标签:

【中文标题】如何垂直而不是水平制表符【英文标题】:How to tab vertically instead of horizontally 【发布时间】:2016-11-21 03:16:43 【问题描述】:

我正在使用 Flex 并试图让 sparks 数据网格垂直而不是水平制表。

var hBox:HBox = new HBox();
var templateDataGrid:spark.components.DataGrid = new spark.components.DataGrid();
templateDataGrid.dataProvider = dataGridList;
templateDataGrid.columns = columnHeaders;
templateDataGrid.sortableColumns = false;
templateDataGrid.editable = true;
hBox.addElement(templateDataGrid);

有一个非常简单的 as3 实现,我在 HBox 中渲染。

这是来自 API 的完整工作示例,我正在用 as3 而不是 mxml 编写我的网格,但我可以翻译。

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:s="library://ns.adobe.com/flex/spark">

<s:Panel title="Spark DataGrid Control Example which demonstrates the variableRowHeight and rowHeight properties"
           
         horizontalCenter="0" verticalCenter="0">

    <s:controlBarContent>
        <s:HGroup verticalAlign="baseline">
            <s:CheckBox label="variableRowHeight=dataGrid.variableRowHeight" selected="@dataGrid.variableRowHeight"/>
            <s:Label text="      "/> <!-- blank space -->
            <s:HSlider minimum="12" maximum="120" value="@dataGrid.grid.rowHeight"/>
            <s:Label text="rowHeight=dataGrid.grid.rowHeight"/>
        </s:HGroup>
    </s:controlBarContent>    

    <s:DataGrid id="dataGrid" left="5" right="5" top="5" bottom="5" editable="true">
        <s:ArrayCollection>
            <s:DataItem key="1000" name="Abrasive" price="100.11" call="false"/>
            <s:DataItem key="1001" name="Brush" price="110.01" call="true"/>
            <s:DataItem key="1002" name="Clamp" price="120.02" call="false"/>
            <s:DataItem key="1003" name="Drill" price="130.03" call="true"/>
            <s:DataItem key="1004" name="Epoxy" price="140.04" call="false"/>
            <s:DataItem key="1005" name="File" price="150.05" call="true"/>
            <s:DataItem key="1006" name="Gouge" price="160.06" call="false"/>
            <s:DataItem key="1007" name="Hook" price="170.07" call="true"/>
            <s:DataItem key="1008" name="Ink" price="180.08" call="false"/>
            <s:DataItem key="1009" name="Jack" price="190.09" call="true"/>             
        </s:ArrayCollection>
    </s:DataGrid>
</s:Panel>
</s:Application>

如果您想查看网格,则可以在api here 中看到网格示例,并且当您使用 Tab 时,它会水平移动。我希望它垂直移动!

【问题讨论】:

这个***.com/questions/4428871/… 可能会有所帮助 @www0z0k 如示例所示,s:Datagrid 不将其行和列显示为 DisplayObject,而是与 arraycollection 交互。所以这个链接与这个问题没有直接关系。 【参考方案1】:

这是我目前所拥有的。它的工作原理是当人们释放 Tab 键时,它会查看他们所在的位置,然后转到不同的位置。 (在我的例子中是一个。)内置的标签导航发生在KEY_DOWN上,这发生在KEY_UP上。所以选定的项目会反弹,可能不是最好的。这适用于GridSelectionMode.SINGLE_CELL

myGrid.addEventListener(KeyboardEvent.KEY_UP, selectionChangingHandler);

private function selectionChangingHandler(event:KeyboardEvent):void

    if(event.keyCode == Keyboard.TAB)
        var selectedCell:CellPosition = event.currentTarget.selectedCell;
        var columnLength = event.currentTarget.grid.columns.length;
        var rowLength = event.currentTarget.grid.dataProvider.length;
        var columnIndex:Number = selectedCell.columnIndex;
        var rowIndex:Number = selectedCell.rowIndex+1;

        if(rowLength == rowIndex)
            if(columnIndex == columnLength-1)
                columnIndex = 0;
                rowIndex = 0;
            else
                columnIndex = columnIndex+1;
                rowIndex = 0;
            
        
        var success:Boolean = event.currentTarget.startItemEditorSession(rowIndex,columnIndex);
        event.currentTarget.setSelectedCell(rowIndex,columnIndex);
    

【讨论】:

以上是关于如何垂直而不是水平制表符的主要内容,如果未能解决你的问题,请参考以下文章

使用JQuery的垂直制表符?

C语言 | 空白符(空格制表符与换行符)浅析

如何将 Notepad++ 配置为使用空格而不是制表符?

强制 emacs 使用制表符而不是多个空格

第二章 基本概念

如何将 emacs 设置为在 verilog 模式下使用 3 个空格而不是制表符?