The Tab functionality to switch between control fields seems to be not working with C++ Builder 10.4 (with patch 1, 2 and 3), if a form control which contains some taborder fields, gets another parent form control programmaticly.
This can be reproduced very easily by creating a Multi-Device Application, with just 2 TLayout
-controls and 2 TEdit
-controls on a form:
Steps to reproduce:
- Create a new Multi-Device Application, Blank Application. This will create a
Unit1
with a blank form. - For the generated
Unit1
, just drop aTLayout
from the Palette to the form and resize this to match almost the left half of the form. - Drop a second
TLayout
control on the form (Layout2) and resize this layout to match the right half of the form. - Drop 2
TEdit
control fields on Layout1 (Edit1 and Edit2). - For Layout1, set the
TabOrder
property to 0, and make sure the propertyTabStop
is set toTrue
. - For Layout2, set the
TabOrder
property to 1, and make sure the propertyTabStop
is set toTrue
. - For Edit1, set the
TabOrder
property to 0, make sure the propertyTabStop
is set toTrue
, and set text to "edit1". - For Edit2, set the
TabOrder
property to 1, make sure the propertyTabStop
is set toTrue
, and set text to "edit2". - Build and run the project: The form with 2 edit fields appears and with Tab you can switch between the fields. This is OK! If the value of the
Layout1
propertyTabOrder
is kept to be -1, the Tab is also working, but only after selecting 1 of the edit fields with a mouse-click. - Now, in the constructor of
TForm1
programLayout2
as the parent ofLayout1
:
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Layout1->Parent = Layout2;
}
- Build and run the project again. The position of the edit fields on the form is now changed to the right as expected. But there the Tab functionality is gone!
Why? If the same steps are executed in C++ Builder 10.2, the Tab functionality keeps working after setting the parent of Layout1
to Layout2
.
Content of Unit1.fmx, as requested by "Schneider Infosystems Ltd":
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 480
ClientWidth = 640
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnShow = FormShow
DesignerMasterStyle = 0
object Layout1: TLayout
Position.X = 8.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 305.000000000000000000
Size.Height = 409.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
object Edit1: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
TabOrder = 0
Text = 'edit1'
Position.X = 64.000000000000000000
Position.Y = 72.000000000000000000
end
object Edit2: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
TabOrder = 1
Text = 'edit2'
Position.X = 64.000000000000000000
Position.Y = 112.000000000000000000
end
end
object Layout2: TLayout
Position.X = 328.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 305.000000000000000000
Size.Height = 409.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
end
end
Yes! It works after installing "C++ Builder 10.4.1" ! So, it was a bug in 10.4.
I have to do a lot more actions to build and test all existing software I care about, but I am happy that the TAB-key functionallity seems to be solved! :)
I had to do a complete deïnstall and install of RadStudio. Also third party software has to be integrated again in the IDE. A lot of work. I keep wondering why this was necessary, and could not be solved with patch updates with "GetIt" in version 10.4.