这几天碰到个头疼的问题,实在现不明白。
我要用StringGrid做输入,比如用Label1.caption:=StringGrid1.Cells[1,1];(把StringGrid放在一个平时隐藏的窗体上)
可是老出错,输入第一次的时候正确,再输入就不行了StringGrid1.Cells[1,1]一直为空......
不太好叙述明白,我一下面的代码说明://我想说明StringGrid输入时不是直接输入到Cell中的
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  //如果是输入到cell中,那我输入'abc'结果应该是类似于"aabbcc"吧?
  StringGrid1.Cells[1,1]:=StringGrid1.Cells[1,1]+key;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  //可是结果是我只能在cell中输入一个字符
  Edit1.Text:=StringGrid1.Cells[1,1];
end;我想知道原因,StringGrid是怎么接受输入的?那个给cell传递数据的东西是什么?
可惜vcl的那些代码我看不太懂。那位大哥大姐介绍一下??
谢谢了...........

解决方案 »

  1.   

    我看了半天也不太清楚你到底想说什么,呵呵,可能我理解能力有问题!你需要解决什么问题?TStringGrid对象接受输入数据是通过其封装的TInplaceEdit对象来进行的,你可以通过TStringGrid对象的Controls属性带索引来操纵TInplaceEdit对象,这样
    (StringGrid1.Controls[0] as TInplaceEdit).SomeProperty:=SomeValue;另外,对于TStringGrid对象的输入,最好使用OnSetEditText事件,而不是OnKeyPress或OnClick事件我以前做程序的时候曾试图用Formula One或其扩展控件做录入界面,但感觉不是很灵活,所以转为使用TStringGrid,但这样必定代码量增加,不过比较灵活!
      

  2.   

    应该是你的StringGrid没有了焦点导致onkeypress事件不发生
      

  3.   

    To: FrameSniper(★吃透技术手册★№2)
    明白不明白的你已经帮我解决问题了,呵呵,目的已经达到。多谢To:jan2002(阿吉)
    谢谢参与,欢迎再来,^_^To:rustle() 
    不是那样的,不信你试一下我的代码,即使有焦点也不行虽然还不十分明白为什么,不过问题已经解决了,剩下的我自己考虑吧
    没人反对把分加给FrameSniper(★吃透技术手册★№2)吧??^_^
      

  4.   

    我的主窗体上用Label显示数据,数据用带有StringGrid的窗体进行输入。下面是实现过程,看有什么错误:点击label,输入窗体先清空(用sgList.Cols[i].Clear),设置行列,宽度,option,并由隐藏到显示。然后在StringList的MouseDown中写
    self.Hide ;
    TLabel(CurEnter).Caption:=sgList.Rows[RW][0];错误现象:
    点击Label(第一次),出现输入窗体可以直接键盘输入,如果点击StringList用于输入的行则输入窗体隐藏;隐藏后再点击该Label(第二次)出现输入窗体仍可以直接键盘输入,并且点击的如果不是用于输入的行的话同样正常保存,现象1:但偶尔会在点击其他Label时出现以前输入的内容
    现象2:如果点击了用于输入的行,输入窗体不隐藏,变为输入状态,光标一闪一闪的--生气,并且输       入并点击StringGrid其他地方后label显示为空MouseDown中改为下面代码就都正常了(为什么?):
    if sgList.Rows[RW][0]='' then
       TLabel(CurEnter).Caption :=(sgList.Controls[0] as TInplaceEdit).EditText
    else
       TLabel(CurEnter).Caption:=sgList.Rows[RW][0];
    (sgList.Controls[0] as TInplaceEdit).EditText:='';我考虑是不是第二次点击Label时,焦点在InplaceEdit上,所以点击不隐藏,但为什么输入不能传递到StringGrid中了呢?