我是Delphi的菜鸟,但请帮忙。
我在表单上有7个TComboBoxes。使用来自名为Numbers的同一表的SQL查询将它们的值分配给它们。
procedure TForm3.Button4Click(Sender: TObject);
begin
Q2.Close;
Q2.SQL.Clear;
Q2.SQL.Add ('Select num');
Q2.SQL.Add ('FROM numbers.dbf');
Q2.RequestLive := true;
Q2.Open;
cb1.Items.Add(q2.FieldByName('num').value);
cb1.Text:= '? ? ?';
cb2.Items.Add(q2.FieldByName('num').value);
cb2.Text:= '? ? ?';
...
...
...
end;
其中cb1,cb2 ....是TComboBoxes。
当您单击它们时,我试图让它们相互测试它们的值(所有值均为文本)。具体来说,如果您从下拉列表中选择cb1 = 1,那么如果您选择cb2 = 1 ... etc并分配了相同的数字,则应该给您一条错误消息
MessageDlg('Check Values: CB 1 and CB 2: Same Values Entered.',mtError, mbOKCancel, 0);
您会推荐我使用哪种方法,我已经战斗了两天。
提前致谢!
最佳答案
用七个组合框(带有Style := csDropDownList
)创建一个新表单。然后,创建一个
var
combos: array[1..7] of TComboBox;
并启动它:
procedure TForm1.FormCreate(Sender: TObject);
begin
combos[1] := ComboBox1;
combos[2] := ComboBox2;
combos[3] := ComboBox3;
combos[4] := ComboBox4;
combos[5] := ComboBox5;
combos[6] := ComboBox6;
combos[7] := ComboBox7;
end;
那你就可以做
procedure TForm1.VerifyUniqueness(Sender: TObject);
begin
if LongBool(TComboBox(Sender).Perform(CB_GETDROPPEDSTATE, 0, 0)) then
Exit;
for i := low(combos) to high(combos) do
if (Sender <> combos[i]) and SameStr(TComboBox(Sender).Text, combos[i].Text) then
raise Exception.CreateFmt('The fields %s and %s have the same value.', [TComboBox(Sender).Name, combos[i].Name]);
end;
并将
VerifyUniqueness
分配给每个组合框的OnChange
事件。此外,您还需要procedure TForm1.ComboBoxesKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then VerifyUniquness(Sender);
end;