nos*_*osx 1 delphi replace delphi-7
我有一个由两个TComboBox和一个TEdit控件组成的表单,我希望能够TEdit使用组合框中的值更新控件中的单词,但不太确定如何使其工作.
例:
Combobox#1有以下几项: sue, bill, andy, chris
Combobox#2有以下几项: 1, 2, 3
该TEdit控制开始时看起来像这样: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;
Run Code Online (Sandbox Code Playgroud)
如果'... has ... car(s)'不是固定字符串,则没有明确定义的问题.产生明确定义的问题和解决方案的最简单方法是添加第二个TEdit控件.现在,让两个组合框和第一个编辑控件共享同一个OnChange事件:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Edit2.Text := Format(Edit1.Text, [ComboBox1.Text, ComboBox2.Text]);
end;
Run Code Online (Sandbox Code Playgroud)
现在,用户可以输入,例如,%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;
Run Code Online (Sandbox Code Playgroud)
要尝试此操作,请将组合框设置为Sue和2,然后编写Sue and I have 3 cats. Sue is cute..现在尝试改变组合框!
只需用新的组合框替换旧的组合框文本,就可以使其更加健壮.要完成此操作,您需要将以前的值保存在组合框中.无论如何,即使在理论上,你也不能完全强大.事实上,如果这个字符串是'比尔在5天前心脏病发作支付他的电费时叫911那么.' 这个字符串很可能最终成为'当他26天前因为心脏病发作支付他的电力苏而被称为26岁的苏.
更巧妙的是,如果其中一个组合框是'car'而另一个是'train',那么'carnage'可能会转变为'trainnage'.
| 归档时间: |
|
| 查看次数: |
2838 次 |
| 最近记录: |