一个员工管理系统中,有个画面,
上面有个项目就是性别.
在追加机能中,是dropdown控件(TDBComboBox),内容是男/女。
但是,在参照画面中,想让性别不能编辑。(参照和追加都用一个画面)客户的要求是:参照的时候,要和一般的textbox一样显示,能捕捉focus,不灰显,而且,不能编辑,不能更改。因此我写了下面的代码:if(参照的场合)
   TDBComboBox.DroppedDown := False;
   TDBComboBox.Style := csSimple;
   TDBComboBox.ReadOnly := false;结果:虽然是和textbox一样了(能有focus,能显示出男/女),
但是,也能修改了。比如,本来显示男,我输入女也可以了。
为什么readonly不起作用呢?提问:如何才能让它不能修改呢?(不用enabled=false,这样的话就灰显了,而且不能获得focus)

解决方案 »

  1.   

    readonly:=true;才是不能编辑吧
      

  2.   

    ReadOnly属性写反了,应该是True
      

  3.   

    对不起,我刚才写错了。
    我其实是写的
    TDBComboBox.ReadOnly   :=   true;
    可是不管用。还是能编辑。
     
      

  4.   

    这段代码是写在哪的?formshow?
      

  5.   

    是的,formshow的时候写的。
    我想到一个办法,就是说能不能设定TDBComboBox的某个属性。
    让键盘压下的时候,不去捕捉,这样能不能行呢?
    不过具体做法也不会。
    我刚接触delphi是个新手,大家帮帮忙吧
      

  6.   

    不能修改这样做
       cxDBComboBox1.Properties.DropDownListStyle := lsFixedList;
      

  7.   

    你是不想让他自己写是吧?那你就设置STYLE属性为:csDropDownList就可以了,他只能用你给的值
      

  8.   

    那不用设置属性,你直接在formshow里发SQL把当前要显示的纪录查出来
      

  9.   

    to jerry8
    cxDBComboBox没有Properties属性,编译报错。to xuangege 
    不能STYLE属性为:csDropDownList,因为,这样的话,也就能编辑了。
    比如,原来是男,也可以变成女了。
      

  10.   

    to cloudlyanhart 
    前提是必须要用cxDBComboBox显示,所以,sql显示不能做。
      

  11.   

    constructor TcxDBComboBoxEx.Create(AOwner: TComponent);
    begin
    inherited;
    //默认值
    Properties.AutoSelect := False;
    Properties.DropDownAutoSize := True;
    Properties.DropDownListStyle := lsEditList;
    Properties.DropDownRows := DROPDOWN_ROWS;
    Properties.DropDownSizeable := True;
    Properties.IncrementalFiltering := False;
    Properties.Revertable := True;
    Properties.OnChange := _OnChange;
    Properties.UseLeftAlignmentOnEditing := False;
    end;
      

  12.   

    因为不能用别的控件,也不能自己写继承控件,
    所以,就一直卡在这里了。
    to jerry8 
    你是用的TDBComboBoxTDB么?
    怎么看不太明白呢,还是新作一个constructor呢
      

  13.   

    正常的TDBComboBox.ReadOnly   :=   true;就够了,非用属性的话那就是你那个条件if(参照的场合) 有问题,你设断点看看程序到这执行了没有?
      

  14.   

    不可能啊。。
    那你把if去掉试试,TDBComboBox.ReadOnly       :=       true;
    直接如果还是能编辑我就无解了。。