gpt4 book ai didi

delphi - 从组合框中更新 TEdit 文本

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

我有一个由两个 TComboBox 组成的表格和一个 TEdit控件,我希望能够更新 TEdit 中的单词使用组合框中的值进行控制,但不太确定如何使其工作。

例子:

组合框 #1 包含以下项目:sue, bill, andy, chris
组合框 #2 包含以下项目:1, 2, 3TEdit控件开始看起来像这样:andy has 3 cars
现在,我想做的是能够更改andy这个词与组合框 #1 中当前选定的项目和编号 3使用组合框#2 中当前选定的项目,但我似乎无法理解如何完成此操作,并认为我会向专家寻求一点建议。

最佳答案

将相同的事件处理程序分配给两个组合框的 OnChange事件:

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Edit1.Text := ComboBox1.Text + ' has ' + ComboBox2.Text + ' car(s)';
end;

如果 '... has ... car(s)' 不是固定字符串,则您没有明确定义的问题。产生明确定义的问题和解决方案的最简单方法是添加第二个 TEdit控制。现在,让两个组合框和第一个编辑控件共享相同的 OnChange事件:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Edit2.Text := Format(Edit1.Text, [ComboBox1.Text, ComboBox2.Text]);
end;

现在用户可以输入,例如, %s has %s car(s).在第一个编辑框中。

但是,如果您知道用户在编辑框中输入的字符串将只包含每个组合框中的一个项目,并且字符串的其他部分与组合框项目不重合,那么当然可以动态替换该项目在编辑框中。然后让组合框共享此事件:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComboBox1.Items.Count - 1 do
if Pos(ComboBox1.Items[i], Edit1.Text) > 0 then
begin
Edit1.Text := StringReplace(Edit1.Text, ComboBox1.Items[i],
ComboBox1.Text, [rfReplaceAll]);
break;
end;
for i := 0 to ComboBox2.Items.Count - 1 do
if Pos(ComboBox2.Items[i], Edit1.Text) > 0 then
begin
Edit1.Text := StringReplace(Edit1.Text, ComboBox2.Items[i],
ComboBox2.Text, [rfReplaceAll]);
break;
end;
end;

要尝试此操作,请将组合框设置为 Sue2 , 并写下 Sue and I have 3 cats. Sue is cute. .现在尝试更改组合框!

您可以通过仅用新的组合框文本替换旧的组合框文本来使其更加健壮。为此,您需要将先前的值保存在组合框中。无论如何,即使在理论上,你也不能使它完全健壮。事实上,如果字符串是“5 天前支付电费的比尔心脏病发作时调用了 911”。这条字符串很可能以“Sue 26 天前心脏病发作时打给 26 的情况而告终”。

更微妙的是,如果一个组合框项目是“汽车”而另一个是“火车”,那么“大屠杀”可能会转换为“火车”。

关于delphi - 从组合框中更新 TEdit 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216724/

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