菜鸟来问个有关问题!实现不了想要的结果
初学者来问个问题!实现不了想要的结果!
对应的教程:
第一个视频http://tech.163.com/08/1014/10/4O77E4TP000915SU.html
第二个视频http://tech.163.com/08/1014/10/4O77I3P9000915SU.html
上面的编译没有错,但出现当选中左边的右边出现对应的单词,反过来就不行;还有当选中后删除,右边的最后一个删除不了的,这个到底怎么回事啊,哪位高人给个解释,谢谢了!
------解决方案--------------------
1. ComboBox也应该使用Click事件,而不是Change事件(Change事件是由你在ComboBox中输入才触发的)。
2. (这一点我不确定,因为手边没有Delphi。我印象中是这样的,你自己检验一下)当你删除ListBox中的一项后,ListBox会更改ItemIndex,由此又会触发ListBox.OnClick,并因此修改了ComboBox的ItemIndex。当你删除ListBox最后一项时,ListBox.ItemIndex变成-1,因此ComboBox.ItemIndex也跟着变成-1,然后你再去删当前选中项,肯定是删不到了。
3. 你按照第1点修改了代码,而第2点又是象我说得那样,那么你的代码会造成死循环:ComboBox和ListBox的OnClick事件不停地触发新的OnClick事件……小心!!!
- Delphi(Pascal) code
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; ComboBox1: TComboBox; Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form2.ShowModal; end; procedure TForm1.Button2Click(Sender: TObject); begin listBox1.Items.SaveToFile('chinese.txt'); ComboBox1.Items.SaveToFile('english.txt'); end; procedure TForm1.Button3Click(Sender: TObject); //当按下删除时删除所选 begin listBox1.DeleteSelected; ComboBox1.DeleteSelected; end; procedure TForm1.FormCreate(Sender: TObject); //从文件导入列表 begin listBox1.Items.LoadFromFile('chinese.txt'); ComboBox1.Items.LoadFromFile('english.txt'); end; procedure TForm1.ListBox1Click(Sender: TObject); //对应显示 begin ComboBox1.ItemIndex:=listBox1.ItemIndex; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin listBox1.ItemIndex:=ComboBox1.ItemIndex; end; end.
对应的教程:
第一个视频http://tech.163.com/08/1014/10/4O77E4TP000915SU.html
第二个视频http://tech.163.com/08/1014/10/4O77I3P9000915SU.html
上面的编译没有错,但出现当选中左边的右边出现对应的单词,反过来就不行;还有当选中后删除,右边的最后一个删除不了的,这个到底怎么回事啊,哪位高人给个解释,谢谢了!
------解决方案--------------------
1. ComboBox也应该使用Click事件,而不是Change事件(Change事件是由你在ComboBox中输入才触发的)。
2. (这一点我不确定,因为手边没有Delphi。我印象中是这样的,你自己检验一下)当你删除ListBox中的一项后,ListBox会更改ItemIndex,由此又会触发ListBox.OnClick,并因此修改了ComboBox的ItemIndex。当你删除ListBox最后一项时,ListBox.ItemIndex变成-1,因此ComboBox.ItemIndex也跟着变成-1,然后你再去删当前选中项,肯定是删不到了。
3. 你按照第1点修改了代码,而第2点又是象我说得那样,那么你的代码会造成死循环:ComboBox和ListBox的OnClick事件不停地触发新的OnClick事件……小心!!!