I have form2, with a control on it called edit2. I want to set the value of edit2 to a control on another form (edit1 on form1).
In the properties dialog of form2.edit2 I have set the text value to be every possible combination I can think of (eg form1.edit1, form1.edit1.text, form1.edit1.value, tform.edit1. Ihave used [] brackets, used an = sign before all to no avail.
The "properties dialog" you refer to is usually called the Object Inspector.
Its Properties tab is a two-column grid, which has no header.
But if it did have a header, the first column would be called "Property name" and the second column would be headed "Property value".
Each row of the second column is an editor. The values you type (or choose) in each row's editor are text values.
Some of the editors interpret that text as an integer value or as a set item value or an enumeration value etc., but for string properties the value entered is always interpreted as simple text (a string).
As ASerge writes, this text is not interpreted or analysed in any way. It is merely copied - at design time, before your app runs - to the applicable string property you are editing.
So inserting into Edit2.Text the value "Form1.Edit1.Text" merely copies that static 16-character string to the Edit2.Text property.
The Lazarus IDE and the Object Inspector has no notion that such a string can be interpreted by a human as referring to an edit control on another form.
When your app starts, Edit2 will display that 16-character string.
To access at runtime the actual value of Form1.Edit1.Text (a variable, whose value may be continuously changing) requires writing code, as the examples given show.