我希望为用户提供以下选项:
- 做一点事?答案可以是是或否
- 多少次?这可以是 100、500 或 1000
- 你要总结吗?再次,是或否。
为此,我创建了一个表单,在该表单上放置了一个 ValueListEditor,其中第一列称为选项(在此列中我写问题),第二列称为选择(是/否,100/500/1000 和分别是/否)。
显然,只有当用户在第 1 行中选择“是”时,第 2 行和第 3 行才有意义。因此,我想创建第 2 行和第 3 行,并仅在用户为第 1 行选择“是”时才提供相应的选项。
我为此编写了以下代码,但这显然是错误的。顺便说一句,我一般是编程新手,我发现很难找到一本关于 Delphi 的好书。由于没有其他人在我所在的地方进行任何类型的编程,因此问题变得更加严重,因此它会变得非常令人沮丧 - 并且非常耗时(昨天我花了一整天的大部分时间才想出以下内容代码!我什至不知道 ValueListEditor;当我涉水于组织奇特的工具面板时,它看起来很有希望,所以我使用了它。)。任何指针?
这是我的代码(非常感谢):
procedure TfrmDoSomething.FormCreate(Sender: TObject);
var
I: integer;
FirstItemProp, SecondItemProp, ThirdItemProp: TItemProp;
begin
//add first row
ValueListEditor1.InsertRow('Do something?', '', True);
FirstItemProp := TItemProp.Create(ValueListEditor1);
FirstItemProp.PickList.Add('Yes');
FirstItemProp.PickList.Add('No');
ValueListEditor1.ItemProps[0] := FirstItemProp;
//now add the subsequent two rows only if the value for Row#1 is Yes
if (ValueListEditor1.ItemProps[0] = FirstItemProp.PickList[0]) then
begin
ValueListEditor1.InsertRow('Number of times', '', True);
SecondItemProp := TItemProp.Create(ValueListEditor1);
SecondItemProp.PickList.Add('100');
SecondItemProp.PickList.Add('500');
SecondItemProp.PickList.Add('1000');
ValueListEditor1.ItemProps[1] := SecondItemProp;
ValueListEditor1.InsertRow('Summary?', '', True);
ThirdItemProp := TItemProp.Create(ValueListEditor1);
ThirdItemProp.PickList.Add('Yes');
ThirdItemProp.PickList.Add('No');
ValueListEditor1.ItemProps[2] := ThirdItemProp;
end;
end;
@KenWhite,谢谢。根据您使用 ComboBox 的建议,我编写了以下代码。我想我现在的问题是我为 CB 使用了错误的事件。我的 CB 在运行时以编程方式创建得很好(顺便说一下,CB1 是全局声明的)。however, when "yes" is selected, it does not go the second procedure "OnChange", which leads me to think that OnChange is the wrong event. 我还尝试了 OnClick 和其他一些 - 无济于事。此外,第二个过程中的 ShowMessage 部分只是为了测试我选择的事件是否正确。稍后我将不得不编写代码来创建另外两个组合框。谢谢。
procedure TfrmCBDoSomething.FormCreate(Sender: TObject);
var
Label1: TLabel;
begin
Label1 := TLabel.Create(Self);
Label1.Align := alLeft;
CB1 := TComboBox.Create(Self);
CB1.Parent := Self;
CB1.Align := alRight;
Label1.Caption := 'Do Something?';
Label1.Parent := Self;
CB1.AddItem('Yes', nil);
CB1.AddItem('No', nil);
end;
procedure TfrmCBTry.CB1OnChange(Sender: TObject);
begin
if (CB1.Text = 'Yes') then ShowMessage('Got it!!');
if (CB1.ItemIndex = 0) then ShowMessage('Got it!!');
if (Cb1.Items.IndexOf('Yes') = 0) then ShowMessage('Got it!!')
end;