使用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 实力有限,我实在是看不太明白你在说什么
2 实力有限,我实在是看不太明白你在说什么
#3
Combobox出现乱码还有其他办法解决吗?
我的第二个问题可能描述得不清楚。我重新说一下,我在DBGrid控件的第1列中嵌入了一个文本框,文本框的作用是用来实现模糊查找的,因为在DBGrid中输入值和改变值时,它不像文本框有Change事件记录集的查询结果马上可以改变。
当光标离开文本框或离开DBGrid控件的第1列时,文本框隐藏。但我在按TAB键让光标离开文本框时,需要按两次TAB键,光标才会跳到第二列,因为第1次按TAB键时,光标跳到了Dbgrid控件的第1列,我希望实现按一下TAB键,光标就跳到第二列,请高手指点。
有什么办法能让DBGrid的光标选中指定列,比如默认选中第1列,我希望它一开始就选中就3列。
我的第二个问题可能描述得不清楚。我重新说一下,我在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 实力有限,我实在是看不太明白你在说什么
2 实力有限,我实在是看不太明白你在说什么
#3
Combobox出现乱码还有其他办法解决吗?
我的第二个问题可能描述得不清楚。我重新说一下,我在DBGrid控件的第1列中嵌入了一个文本框,文本框的作用是用来实现模糊查找的,因为在DBGrid中输入值和改变值时,它不像文本框有Change事件记录集的查询结果马上可以改变。
当光标离开文本框或离开DBGrid控件的第1列时,文本框隐藏。但我在按TAB键让光标离开文本框时,需要按两次TAB键,光标才会跳到第二列,因为第1次按TAB键时,光标跳到了Dbgrid控件的第1列,我希望实现按一下TAB键,光标就跳到第二列,请高手指点。
有什么办法能让DBGrid的光标选中指定列,比如默认选中第1列,我希望它一开始就选中就3列。
我的第二个问题可能描述得不清楚。我重新说一下,我在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是我定义的与网格控件相邦定的记录集,重绘文本框时,将记录集的第一个字段的值赋给文本框。让文本框与记录集当前的值同步