2015-07-30 1 views
1

В моей заявке я получил вопрос о нецелевом выборе элементов в TListBox в моей заявке с HorzScrollBox в форме. Форма имеет два (или более) TListBox на нем. Они размещаются отдельно друг от друга, так что их абсолютная левая координата координат больше ширины ширины экрана текущего устройства. Ошибка появляется в следующей последовательности действий пользователя.Неверный выбор элементов в FMX TListbox (интерфейс Grid Metropolis UI)

  1. Элемент выбран из левого TListBox
  2. HorzScrollBox прокручивает вправо, а второй TListBox становится видимым для пользователя и левых одной - невидимый.
  3. HorzScrollBox прокручивается влево.
  4. Новый товар выбран из списка слева TListBox.

Мы получаем следующую картину: выбран новый элемент, но выбор остается закрашены позиции ранее выбранного элемента, даже если мы прокручивать окно вверх и вниз. enter image description here

Воспроизведение ошибки можно очень простым способом.

  1. Создать новое приложение Grid MetropolisUI.
  2. Замените левый стандарт TListBox на новый (он будет быстрее).
  3. Установите ширину формы больше, то на ширине экрана
  4. Поместите второй новый TListBox внутри HorzScrollBox таким образом, чтобы левый и правый TListboxes не будут видны одновременно и выбор объектов возможен только после того, как прокрутка HorzScrollBox.
  5. Заполните их из любых источников (например, 2 TPrototypeBindSource) и установите ListItemStyle свойства созданных LinkFieldControlToField по MetropolisUI.

Выполнено. Когда вы запускаете приложение, вы получаете проблему. Ошибка появляется только при прокрутке HorzScrollBox, так что вы не видите второй ListBox, когда вы выбираете элемент в первом. В противном случае элементы выбираются должным образом (даже если вы прокрутите HorzScrollBox). Вот ресурс формы (кроме бинарного стиля, он должен присутствовать, чтобы воспроизвести ошибку).

object GridViewForm: TGridViewForm 
    Left = 0 
    Top = 0 
    Caption = 'Grid Form' 
    ClientHeight = 946 
    ClientWidth = 2600 
    StyleBook = StyleBook2 
    FormFactor.Width = 1280 
    FormFactor.Height = 1024 
    FormFactor.Devices = [dkDesktop] 
    FormFamily = 'Main' 
    FullScreen = True 
    OnMouseUp = FormMouseUp 
    Touch.InteractiveGestures = [igPan] 
    OnGesture = FormGesture 
    DesignerMobile = False 
    DesignerWidth = 0 
    DesignerHeight = 0 
    DesignerDeviceName = '' 
    DesignerOrientation = 0 
    DesignerOSVersion = '' 
    object MainLayout: TLayout 
    Align = alContents 
    Height = 921.000000000000000000 
    Margins.Top = 25.000000000000000000 
    Width = 2600.000000000000000000 
    object HorzScrollBox1: THorzScrollBox 
     Align = alClient 
     Height = 921.000000000000000000 
     TabOrder = 0 
     Width = 2600.000000000000000000 
     object GroupLayout1: TLayout 
     Align = alLeft 
     Anchors = [akLeft, akTop] 
     Height = 905.000000000000000000 
     Margins.Left = 110.000000000000000000 
     Position.X = 110.000000000000000000 
     Width = 540.000000000000000000 
     object ListBox4: TListBox 
      Align = alClient 
      Height = 905.000000000000000000 
      StyleLookup = 'collectionlistbox' 
      TabOrder = 0 
      Width = 540.000000000000000000 
      DefaultItemStyles.ItemStyle = '' 
      DefaultItemStyles.GroupHeaderStyle = '' 
      DefaultItemStyles.GroupFooterStyle = '' 
     end 
     end 
     object GroupLayout2: TLayout 
     Align = alLeft 
     Anchors = [akLeft, akTop] 
     Height = 905.000000000000000000 
     Margins.Left = 40.000000000000000000 
     Position.X = 690.000000000000000000 
     Width = 1225.000000000000000000 
     end 
     object Layout1: TLayout 
     Align = alLeft 
     Anchors = [akLeft, akTop] 
     Height = 905.000000000000000000 
     Margins.Left = 40.000000000000000000 
     Margins.Right = 100.000000000000000000 
     Position.X = 1955.000000000000000000 
     Width = 660.000000000000000000 
     object Label1: TLabel 
      Align = alTop 
      AutoSize = True 
      Height = 40.000000000000000000 
      Margins.Left = 10.000000000000000000 
      Margins.Bottom = 5.000000000000000000 
      Position.X = 10.000000000000000000 
      StyleLookup = 'pagesubheaderlabel' 
      Text = 'Group Title: 4' 
      Width = 165.000000000000000000 
      WordWrap = False 
     end 
     object ListBox1: TListBox 
      Align = alClient 
      Height = 855.000000000000000000 
      StyleLookup = 'collectionlistbox' 
      TabOrder = 1 
      Width = 660.000000000000000000 
      DefaultItemStyles.ItemStyle = '' 
      DefaultItemStyles.GroupHeaderStyle = '' 
      DefaultItemStyles.GroupFooterStyle = '' 
     end 
     end 
    end 
    end 
    object StyleBook2: TStyleBook 
    Left = 632 
    Top = 544 
    ResourcesBin = {...} 
    end 
    object PrototypeBindSource1: TPrototypeBindSource 
    AutoActivate = True 
    AutoPost = False 
    FieldDefs = < 
     item 
     Name = 'ContactBitmapL1' 
     FieldType = ftBitmap 
     Generator = 'ContactBitmapsL' 
     ReadOnly = False 
     end 
     item 
     Name = 'ContactName1' 
     Generator = 'ContactNames' 
     ReadOnly = False 
     end 
     item 
     Name = 'IntField1' 
     FieldType = ftInteger 
     Generator = 'Integers' 
     ReadOnly = False 
     end> 
    ScopeMappings = <> 
    Left = 1288 
    Top = 456 
    end 
    object BindingsList1: TBindingsList 
    Methods = <> 
    OutputConverters = <> 
    Left = 20 
    Top = 5 
    object LinkFillControlToField1: TLinkFillControlToField 
     Category = 'Quick Bindings' 
     Control = ListBox4 
     Track = True 
     FillDataSource = PrototypeBindSource1 
     FillDisplayFieldName = 'ContactName1' 
     AutoFill = True 
     BufferCount = -1 
     AutoBufferCount = False 
     ListItemStyle = 'MetropolisUI' 
     FillExpressions = < 
     item 
      SourceMemberName = 'ContactBitmapL1' 
      ControlMemberName = 'Icon' 
     end 
     item 
      SourceMemberName = 'IntField1' 
      ControlMemberName = 'SubTitle' 
     end> 
     FillHeaderExpressions = <> 
     FillBreakGroups = <> 
    end 
    object LinkFillControlToField2: TLinkFillControlToField 
     Category = 'Quick Bindings' 
     Control = ListBox1 
     Track = True 
     FillDataSource = PrototypeBindSource2 
     FillDisplayFieldName = 'ContactName1' 
     AutoFill = True 
     BufferCount = -1 
     AutoBufferCount = False 
     ListItemStyle = 'MetropolisUI' 
     FillExpressions = < 
     item 
      SourceMemberName = 'FloatField1' 
      ControlMemberName = 'SubTitle' 
     end 
     item 
      SourceMemberName = 'ContactBitmap1' 
      ControlMemberName = 'Icon' 
     end> 
     FillHeaderExpressions = <> 
     FillBreakGroups = <> 
    end 
    end 
    object PrototypeBindSource2: TPrototypeBindSource 
    AutoActivate = True 
    AutoPost = False 
    FieldDefs = < 
     item 
     Name = 'ContactBitmap1' 
     FieldType = ftBitmap 
     Generator = 'ContactBitmaps' 
     ReadOnly = False 
     end 
     item 
     Name = 'ContactName1' 
     Generator = 'ContactNames' 
     ReadOnly = False 
     end 
     item 
     Name = 'FloatField1' 
     FieldType = ftSingle 
     Generator = 'Floats' 
     ReadOnly = False 
     end> 
    ScopeMappings = <> 
    Left = 1232 
    Top = 448 
    end 
end 

Есть ли у кого-нибудь предложения, как справиться с этим?

ответ

0

Я нашел ответ, установив ListBox1.CanFocus := false;. В некоторых случаях (сзади) ошибка повторяется.

Смежные вопросы