为什么会出现E2362 Cannot access protected symbol TControl.Text?

Why does the E2362 Cannot access protected symbol TControl.Text appear?

这是导致错误的代码:

procedure TfrmQuoteTemp.showData;
 begin
  lblFirstName.Text := query.FieldByName('First Name').AsString;
  lblLastName.Text := query.FieldByName('Last Name').AsString;
  lblAddress.Text := query.FieldByName('Address').AsString;
  lblTown.Text := query.FieldByName('Town').AsString;
  lblCounty.Text := query.FieldByName('County').AsString;
  lblPostcode.Text := query.FieldByName('Postcode').AsString;
  lblTelNo.Text := query.FieldByName('TelNo').AsString;
 end;

此错误仅发生在 Tlabel 上,我根本无法更改其文本 属性。

如果您正在编写基于 VCL 的应用程序,则错误消息非常清楚 - TextTLabel 中受到保护(未发布),它发布了 Caption 属性 代替。更改您的代码以使用 属性.

lblFirstName.Caption := query.FieldByName('First Name').AsString;

为了将来参考,这可以在对象检查器中看到(这表明 TLabel 有一个已发布的 Caption 属性 而不是 Text 属性) 并在 IDE 中使用 Code Insight(键入 lblFirstName. 并按 Ctrl+Space),它不提供 Text 属性,但如果您滚动选择,则会显示 Caption 属性。

(此外,作为一般经验法则(至少在 VCL 中如此):如果控件像 TEditTMemo 一样接受用户输入(用户可以输入),它发布 Text 属性;如果没有(例如 TLabelTButton),它会发布 Caption 属性。如 TLabel 不接受用户输入,它发布 Caption 而不是 Text。)