请教各位大侠两个小问题,急!在线等!

时间:2021-07-07 17:38:00
问题1:
  使用ComboBox控件,从数据库中动态地添加其选项后,再在ComboBox中输入文字时,文字会变为乱码,这是怎么回事,怎样才能解决这个问题。

问题2:当我在文本框和网格之间切换时,要按两次TAB键,光标才能跳到第二列,好像按第一次时,光标跳到了第1列,但由于第1列被文本框盖住了看不到光标在哪里。我希望实现在文本框中,只按一次TAB键,光标就跳到第二列中,请问有什么办法能让DBGrid的光标选中指定列?

  我在DBGrid控件的第一列中嵌入了一个文本框,我的代码如下:
procedure TForm_yprk1.DBGrid2DrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
begin
  if(gdfocused in state)then{当数据网格处于编辑状态时}
  begin
    if (field.fieldname='ypbm')then {当数据焦点处于第1列时,在dbgirddb上画文本框}
    begin
      edit1.left:=rect.left+dbgrid2.left+1;{设置dbcheckbox的位置}
      edit1.top:=rect.top+dbgrid2.top+1;
      edit1.width:=rect.right-rect.left;
      edit1.height:=rect.Bottom -rect.top;
      edit1.visible:=true;{将文本框变为可视的}
      edit1.Text := ds_yprkmx.fieldbyname('ypbm').AsString ;
  end;
 end;
end;

procedure TForm_yprk1.DBGrid2KeyPress(Sender: TObject; var Key: Char);
begin
  if(key<>chr(9))then   //当用户按下的不是TAB键时
  begin
    if(dbgrid2.selectedfield.FieldName ='ypbm') then{如果第1列得到焦点,将按键消息发给文本框}
    begin
      if edit1.Visible =false then  edit1.Visible:=true;
      edit1.setfocus;
      sendmessage(edit1.handle,wm_char,word(key),0);
    end;
  end;
end;

10 个解决方案

#1


大家快来帮帮我呀!

#2


1 你可以先用鼠标点击一下在在输入就应该不会出现乱码
2 实力有限,我实在是看不太明白你在说什么

#3


Combobox出现乱码还有其他办法解决吗?
  我的第二个问题可能描述得不清楚。我重新说一下,我在DBGrid控件的第1列中嵌入了一个文本框,文本框的作用是用来实现模糊查找的,因为在DBGrid中输入值和改变值时,它不像文本框有Change事件记录集的查询结果马上可以改变。
  当光标离开文本框或离开DBGrid控件的第1列时,文本框隐藏。但我在按TAB键让光标离开文本框时,需要按两次TAB键,光标才会跳到第二列,因为第1次按TAB键时,光标跳到了Dbgrid控件的第1列,我希望实现按一下TAB键,光标就跳到第二列,请高手指点。
  有什么办法能让DBGrid的光标选中指定列,比如默认选中第1列,我希望它一开始就选中就3列。

#4


大家快来帮帮我呀!

#5


对于第二个问题,你可以判断当dbgrid为焦点时,指定到你想要的列!

#6


请问当dbgrid为焦点时,怎样指定到我想要的列呢?设置selectedindex=2没有效果。

#7


我有个很苯的方法,就是在 edit的onexit 里发个tab 消息,很笨的方法,治标不治本 :)

#8


ds_yprkmx是什么?

#9


怎么会有乱码呢,你删除重新换一个试一试。我接触的时间不长,从来没有遇见过这个问题。对不起,小弟主要是来和大家学习的,我说错的地方,望大家海涵。

#10


ds_yprkmx是我定义的与网格控件相邦定的记录集,重绘文本框时,将记录集的第一个字段的值赋给文本框。让文本框与记录集当前的值同步

#1


大家快来帮帮我呀!

#2


1 你可以先用鼠标点击一下在在输入就应该不会出现乱码
2 实力有限,我实在是看不太明白你在说什么

#3


Combobox出现乱码还有其他办法解决吗?
  我的第二个问题可能描述得不清楚。我重新说一下,我在DBGrid控件的第1列中嵌入了一个文本框,文本框的作用是用来实现模糊查找的,因为在DBGrid中输入值和改变值时,它不像文本框有Change事件记录集的查询结果马上可以改变。
  当光标离开文本框或离开DBGrid控件的第1列时,文本框隐藏。但我在按TAB键让光标离开文本框时,需要按两次TAB键,光标才会跳到第二列,因为第1次按TAB键时,光标跳到了Dbgrid控件的第1列,我希望实现按一下TAB键,光标就跳到第二列,请高手指点。
  有什么办法能让DBGrid的光标选中指定列,比如默认选中第1列,我希望它一开始就选中就3列。

#4


大家快来帮帮我呀!

#5


对于第二个问题,你可以判断当dbgrid为焦点时,指定到你想要的列!

#6


请问当dbgrid为焦点时,怎样指定到我想要的列呢?设置selectedindex=2没有效果。

#7


我有个很苯的方法,就是在 edit的onexit 里发个tab 消息,很笨的方法,治标不治本 :)

#8


ds_yprkmx是什么?

#9


怎么会有乱码呢,你删除重新换一个试一试。我接触的时间不长,从来没有遇见过这个问题。对不起,小弟主要是来和大家学习的,我说错的地方,望大家海涵。

#10


ds_yprkmx是我定义的与网格控件相邦定的记录集,重绘文本框时,将记录集的第一个字段的值赋给文本框。让文本框与记录集当前的值同步