gpt4 book ai didi

德尔福XE : TDBMemo Text Disappears

转载 作者:行者123 更新时间:2023-12-03 15:46:33 31 4
gpt4 key购买 nike

我有一个相当奇怪的问题,我无法找到相关文档。我有一个使用 Delphi 内置 TDBMemo 组件的 Delphi 程序,因为该组件需要从数据库中的字段中提取数据。用户还必须能够编辑此信息,即将信息添加到组件的字段中。在字段中输入的文本可见并且不会消失;然而,这不是我的问题。

该表单为用户提供了从列表中发布预定义评论的选项,可通过由 TBitButton 触发的弹出窗口进行访问;但是,一旦将选定的文本添加到 TDBMemo 中并且用户单击任意位置,添加的值就会消失 - 再次,不是键入的文本。

这是作业的代码:

var NoteString: String;
if DBMemo1.Text <> '' then
begin
NoteString := frmSelectNoteCodeView.GetTextfromField + ' - ' + User.ID
+ ' on ' + FormatDateTime('mm/dd/yyyy', Now);
DBMemo1.Text := dbedComments.Text + #13#10 + NoteString;
end;

这是一个特意的代码片段(如果该字段空白,则刚刚分配该值)。我发布此代码片段是因为我相信这就是问题所在,即常规分配不能与 TDBMemo 一起使用?

事情是这样的:没有处理用户点击的事件。关于为什么发布的文本消失有什么想法吗?

最佳答案

正如我在评论中所说,TDBMemo 是一个数据感知控件,这意味着它被设置为显示数据集中关联字段的文本;您不能只是将值填充到其文本属性中,因为每当 TDBMemo 被告知刷新自身(通过其 TDatalink)时,它都会从字段中检索文本,覆盖您认为分配给它的任何内容。 p>

我会做这样的事情

var 
ADataSet : TDataSet;
begin
ADataSet := DBMemo1.DataSource.DataSet; //just to reduce typing
if not (ADataSet.State in [dsInsert, dsEdit) then
ADataSet.Edit;
ADataSet.FieldByName(DBMemo1.FieldName).AsString := 'your text goes here';
ADataSet.Post;
end;

或者您可以让用户调用 Post。

如果 .Post 位于 finally block 中可能会更好。

顺便说一句,您的问题源于 Delphi 的数据库感知框架对数据库感知控件的屏幕显示施加的严格控制。一般来说,这会阻止你尝试直接改变这些控件的显示内容;如果您想更改数据集数据,请更改它,而不是更改关联控件显示的内容。

关于德尔福XE : TDBMemo Text Disappears,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764353/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com