为什么不让我更改ComboBox中的Text内容(这是我第一次来,请各位多多关照)(50分)

  • 主题发起人 主题发起人 callxuelin
  • 开始时间 开始时间
C

callxuelin

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
[:)] ...
Str:array[1..15] of String;
procedure TForm4.FormShow(Sender: TObject);
begin
Str[1]:=ComboBox1.Text ;
Str[2]:=ComboBox2.Text ;
Form4.Button1.SetFocus
end;
Procedure TForm4.ComboBox1Click(Sender: TObject);
begin
if Str[1]<>ComboBox1.Text then
begin
if (MessageDlg('整流'+Label8.caption+'由 '+Str[1]+' 转换为'+#13+ComboBox1.Text
+',是否执行?',mtconfirmation,[mbok,mbcancel],0)=mrok) then
begin
Str[1]:=ComboBox1.Text ;
//修改数据库内容
end
else
begin
ComboBox1.Text:=Str[1];
//修改数据库内容
end;
end;
end;
运行结果,在ComboBox1选择时点Cancle结果还是我选的那个值,
 
ComboBox1.Text 中的内容应该为ComboBox1.strings中包含的内容。

ComboBox1.Text:=Str[1]; => ComboBox1.ItemIndex := XX;

 
试试在combobox1的change事件中执行.........
 
Combobox1的style是什么?不会是csDropDownList吧。
 
你的逻辑错误:如果STR[1]:='AAA',你选的COMBOBOX1.TEXT:='AAA',那么判断时,认为
str[1]=combobox1.text,于是,执行combobox1.text:=str[1],于是,combobox1.text现实为
AAA,你就认为还是你选的那个值
 
没用的,只要你选择Combobox中列出的值,那么无论你在它的click还是change事件
中试图改变它的text,都是没有用的,它照样列出的都是你选定的值。你只能在别的控
件里对它进行判断修改。
 
property Text: TCaption;

Description

Use the Text property to read the Text of the control or specify a new string for the Text value. By default, Text is the control name. For edit controls and memos, the Text appears within the control. For combo boxes, the Text is the content of the edit control portion of the combo box.

Note: Controls that display text use either the Caption property or the Text property to specify the text value. Which property is used depends on the type of control. In general, Caption is used for text that appears as a window title or label, while Text is used for text that appears as the content of a control.
老大,你自己没有看帮助文件的习惯么?TEXT的属性是READ,怎么可以更改呢?
 
是不是只要Select事件激发,ComboBox1中的Text就改不了了呢,
OnChange,OnSelect,OnClick结果都一样啊;
能不能不用别的控件来判断,
To 816:Combobox没有OnlyRead属性
To xdf_hubei:If Str[1]<>ComboBox1.Text已经排除你的那种可能,
[:)]
 
不因该啊!
我做下来怎么是对的呢?
 
哦,明白了,同意:HunterTeam
只要你选择Combobox中列出的值,那么无论你在它的click还是change事件
中试图改变它的text,都是没有用的,它照样列出的都是你选定的值。你只能在别的控
件里对它进行判断修改。
 
combobox1的style应为csDropDown才可以,csDropDownlist不行
 
我试过
combobox1的style应为csDropDown才可以,csDropDownlist不行
好象两者没什么,只是一个点击时只充满文本框的字,而另外一个充满框,
还有别的办法没,由于我做的监控系统在对系统进行遥控时,为了确定更换
开关的重要性,所以想弄成这样,不知大伙有什么别的更好的方法
 
我也同意weekboy,因为我也试过这种情况,Debug了很久才知道是上述原因。
 
不知我的代码对不对,大伙帮忙看看
Str:array[1..15] of String; 全局变量,
在窗体显示时保存初始的Text值,
接着就是根据所选的值判断与原先值是否相等,
不等弹出对话框,按Yes更改并将Text的内容赋予Str[1],
为下一次选择提供原始值,按Cancle则给Text付原始值而不是
所选的值,思路这样子
 
不会啊,我用的时候都没问题。
你把style的属性设成CsDropDown试试
 
帖出你的代码看看,好吗?
 
拜托大家了,结果还是没改变,可以帖帖你们的代码让小弟看看,好吗?
求你们了,项目很紧!
 
给你2种解决方法
1.
procedure TForm1.ComboBox1Click(Sender: TObject);
var i:integer;
begin
i:=ComboBox1.ItemIndex;
if Str[1]<>ComboBox1.Text then
begin
if (MessageDlg('整流由 '+Str[1]+' 转换为'+#13+ComboBox1.Text
+',是否执行?',mtconfirmation,[mbok,mbcancel],0)=mrok) then
begin
Str[1]:=ComboBox1.Text ;
//修改数据库内容
end
else
begin
ComboBox1.Items.Strings:=str[1];
ComboBox1.ItemIndex:=i;
//修改数据库内容
end;
end;
end;
2.
procedure TForm1.ComboBox1Click(Sender: TObject);
var i:integer;
begin
i:=ComboBox1.ItemIndex;
if Str[1]<>ComboBox1.Text then
begin
if (MessageDlg('整流由 '+Str[1]+' 转换为'+#13+ComboBox1.Text
+',是否执行?',mtconfirmation,[mbok,mbcancel],0)=mrok) then
begin
Str[1]:=ComboBox1.Text ;
//修改数据库内容
end
else
begin
ComboBox1.Items.Delete(i);
ComboBox1.Items.Insert(i,str[1]);
ComboBox1.ItemIndex:=i;
//修改数据库内容
end;
end;
end;
 
当combobox1的style为csDropDownlist,Text的内容不能被赋值、修改,只能添加;
当style为csDropDown虽可以被赋值,但当触发事件发生时,其值也是不能改变的,
不过可以通过ComboBox中的ItemIndex值来控制,Weekboy的方法很好,虽然昨晚小弟
对原来的的程序耍了点小聪明,由于涉及到开关状态,只有两种状态,
.... ....
begin
Str[1]:=ComboBox1.Text ;
//
end
else
begin
if Combobox1.ItemIndex=0 then
Combobox1.ItemIndex:=1
else
Combobox1.ItemIndex:=0;
end;
不过,灵活性没有Weekboy的方法好,值得注意的是
procedure TForm1.ComboBox1Click(Sender: TObject);
var i:integer;//不应该在这,应定义为全局变量且初始值应在FormShow时保存

在此非常感谢所有的回复者,希望以后能多多指教。
 
后退
顶部