Combobox OnChange事件无效

时间:2017-03-21 16:38:48

标签: delphi combobox

我遇到了 Combobox onchange 事件的问题: 基本上,如果我从combobox1手动选择一个项目,它会按计划加载/写入/保存文件,但如果我想在我点击 UpdateBtn 时用循环执行同样的操作,它会部分工作。 (循环工作,并在最后一个元素上停止,但不创建所需的文件。)

如果我按 UpdateBtn 然后 Timer2 启动,触发(或模拟手动选择)Combobox的onChange事件,我想做,并创建文件手动工作。

我可能错过了什么吗?

此致

combobox1的代码(OnChange事件,样式:csDropDown):

    procedure TForm1.ComboBox1Change(Sender: TObject);
      var sl : TStringList;
    begin
     if
   ComboBox1.ItemIndex = ComboBox1.Items.IndexOf('')
      then
SetCurrentDir('C:\Net-AdminUpdater\') ;
sl := TStringList.Create;
sl.LoadFromFile('Ugloader.ini');
sl[3] := 'AppPath=c:\users\'+ ComboBox1.Text +'\AppData\Local\Systemica';
sl[5] := 'LASTUPGRADE=';
sl[10] := 'AppPath=c:\users\'+ ComboBox1.Text +'\AppData\Local\Systemica';
sl[12] := 'LASTUPGRADE=';
sl[17] := 'AppPath=c:\users\'+ ComboBox1.Text +'\AppData\Local\Systemica';
sl[19] := 'LASTUPGRADE=';
sl[24] := 'AppPath=c:\users\'+ ComboBox1.Text +'\AppData\Local\Systemica';
sl[26] := 'LASTUPGRADE=';
sl[31] := 'AppPath=c:\users\'+ ComboBox1.Text +'\AppData\Local\Systemica';
sl[33] := 'LASTUPGRADE=';
sl[38] := 'AppPath=c:\users\'+ ComboBox1.Text +'\AppData\Local\Systemica';
sl[40] := 'LASTUPGRADE=';
sl[45] := 'AppPath=c:\users\'+ ComboBox1.Text +'\AppData\Local\Systemica';

SetCurrentDir('C:\Users\'+ ComboBox1.Text +'\WINDOWS\');
sl.SaveToFile('Ugloader.ini');
sl.LoadFromFile('Ugloader.ini');

sl.Free;

end;

Timer2(默认情况下Enabled = false,间隔50):

ComboBox1.ItemIndex := (ComboBox1.ItemIndex + 1)

UpdateButton(UpdateBtn)(做循环):

procedure TForm1.UpdateBtnClick(Sender: TObject);
begin
   Timer2.Enabled := True;

1 个答案:

答案 0 :(得分:1)

这是预期的和documented。以编程方式更改ItemIndex不会导致OnChange事件被触发。它仅在响应用户交互时触发。

  

注意:仅在响应用户操作时发生OnChange。以编程方式更改Text属性不会触发OnChange事件。

OnChange处理程序的内容解压缩为单独的方法,并从OnChange处理程序和修改ItemIndexText等的任何代码中调用该方法。

从更广泛的角度看你的代码,看起来你已经将逻辑与UI捆绑在一起,而不是理想的。如果要遍历名称列表以将转换应用于文件,则不应涉及任何UI元素。您最好将逻辑与UI分开,以便您的代码变得更具可组合性。