Q&A

  • DBGrid에서 Enter key를 눌러서...???
DBGrid에서 Enter key를 눌러서 셀을 이동하고 싶은데요...???

예를 들어서 디비그리드의 내용을 수정후 엔터키를 치게되면

수정된내용이 바뀌지 않고 원래 값이 그대로 있거든요...

수정후에 화살표키를 움직여야 수정이 되더라구요...

그것을 엔터키를 쳐서 할수 없는지요...

그리고...

엔터키를 처서 셀이동을 좌우...아래위로 하고 싶거든요...

어떻게 하면 되나요...???



고수님들의 가르침을 기다리겠습니다.....

감사합니다...

설 잘보내세요...!!!!

6  COMMENTS
  • Profile
    이재식 2000.02.05 05:07
    살아있는 의문부호? wrote:

    > DBGrid에서 Enter key를 눌러서 셀을 이동하고 싶은데요...???

    > 예를 들어서 디비그리드의 내용을 수정후 엔터키를 치게되면

    > 수정된내용이 바뀌지 않고 원래 값이 그대로 있거든요...

    > 수정후에 화살표키를 움직여야 수정이 되더라구요...

    > 그것을 엔터키를 쳐서 할수 없는지요...

    > 그리고...

    > 엔터키를 처서 셀이동을 좌우...아래위로 하고 싶거든요...

    > 어떻게 하면 되나요...???

    >

    > 고수님들의 가르침을 기다리겠습니다.....

    > 감사합니다...

    > 설 잘보내세요...!!!!



    이재식 Wrote :

    안녕하세요?



    말씀하신대로 디비그리드에서 입력내지 수정을 할때는

    현재 레코드에서 커서가 이동해야 입력내지 수정이 완료됩니다.

    즉, 다른 레코드로 상하 화살표이동을 해야 되는 거죠.

    이것을 해결하기 위해서는 이렇게 하시면 될 것 같습니다.

    디비그리드 keyPress이벤트에 다음처럼 코딩하세요.

    if (key = #13) and (DBGrid1.SelectedIndex = 3) then

    begin

    Table1.Post ;

    end ;



    이렇게 하면 사용자가 현 레코드에서 마지막까지 필드까지

    다 입력을 하면 저장을 하는 거죠.

    여기서 SelectedIndex의 값이 어떤건지 아시겠죠?

    3이라고 하는 것은 현재 디비그리드에 4개의 필드가

    보여졌다고 하는 가정입니다.

    그런데, 꼭 맨 마지막 필드를 입력했을때만 저장을해야

    되는가? 첫번째 필드를 입력했다해도 저장을 하고 싶다면

    위의 형식처럼 코딩하시고 Table1.Post를 남발(?)하시면

    될 것입니다.





    그리고, 엔터를 쳐면 다음 셀로 이동을 하지 않습니다.

    이것을 엔터를 쳐서 다음셀로 이동하고 싶다면 이렇게

    한번 해보세요.

    이것역시 디비그리드의 KeyPress이벤트에 ...



    if (key = #13) and (SelectedIndex = 0) then

    begin

    SelectedIndex = 1 ;

    end;



    이런식의 코딩을 하는거죠. 물론 case문을 이용해서 할수도

    있고요, Sender의 Tag타입을 이용해서 좀 깔끔하게 할 수 있고요,

    아니면, 사용자 함수를 만들어서 할수도 있고요...



  • Profile
    최원실 2000.02.04 03:02
    살아있는 의문부호? wrote:

    > DBGrid에서 Enter key를 눌러서 셀을 이동하고 싶은데요...???

    > 예를 들어서 디비그리드의 내용을 수정후 엔터키를 치게되면

    > 수정된내용이 바뀌지 않고 원래 값이 그대로 있거든요...

    > 수정후에 화살표키를 움직여야 수정이 되더라구요...

    > 그것을 엔터키를 쳐서 할수 없는지요...

    > 그리고...

    > 엔터키를 처서 셀이동을 좌우...아래위로 하고 싶거든요...

    > 어떻게 하면 되나요...???

    >

    > 고수님들의 가르침을 기다리겠습니다.....

    > 감사합니다...

    > 설 잘보내세요...!!!!



    안녕하세요..

    지나가다가 몇 글자 적어봅니다.

    => OnKeyPress 이벤트에 다음과 같이 코딩해주면 됩니다.



    If Key = #13 then

    begin

    SelectNext(Sender As TwinControl,True,True);

    Key := #0;

    end;



    그럼 조금이나마 도움이 되었으면 좋겠네요...

    그럼 이만...



  • Profile
    jseok 2000.02.03 21:21
    그리드의 오브젝트 인스펙트의 키프레스 함수에

    if key = #13 then //#13 리턴키값일 겁니다.

    begin

    이부분에 그리드의 셀렉트를 다른곳으로 옮겨주는

    코딩을 해주시면 될 겁니다.

    end;



    살아있는 의문부호? wrote:

    > DBGrid에서 Enter key를 눌러서 셀을 이동하고 싶은데요...???

    > 예를 들어서 디비그리드의 내용을 수정후 엔터키를 치게되면

    > 수정된내용이 바뀌지 않고 원래 값이 그대로 있거든요...

    > 수정후에 화살표키를 움직여야 수정이 되더라구요...

    > 그것을 엔터키를 쳐서 할수 없는지요...

    > 그리고...

    > 엔터키를 처서 셀이동을 좌우...아래위로 하고 싶거든요...

    > 어떻게 하면 되나요...???

    >

    > 고수님들의 가르침을 기다리겠습니다.....

    > 감사합니다...

    > 설 잘보내세요...!!!!

  • Profile
    조규춘 2000.02.03 20:53
    이건 6752번 말고 다른 방법인데요! 글씨 저는 안해 봤는데 된다데요!

    1번과 2번은 보통 엔터로 tab키의 기능을 하는 거구요

    3번이 그리드에서 하는 거래요!



    1번 Form의 KeyPreview속성을 True로 설정

    2번 Form의 Button의 Default속성을 모두 False로 설정

    3번 Form의 OnKeyPress 이벤트 프로시져를 다음과 같이 작성.

    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

    begin

    if Key=#13 then begin {엔터키가 눌렸다면}

    Key=#0;

    if (Sender is TDBGrid) then {DBGrid에서 Enter키가 눌린 것이라면}

    TDBGrid(Sender).Perform(WM_KeyDown, VK_TAB, 0)

    else

    Perform(WM_NEXTDlgCtl, 0, 0);

    end;

    end;



    그리고 그리드의 마지막에서 엔터하면 데이터를 추가하는 것이 낫겠죠?

    그런데 저도 잘 몰라도 아무렇게나 만들었었지요! 되긴 되는데..

    하여간 저도 초보 잔아요~! 히! 그래도 보실라면



    if table1.RecNo = table1.RecordCount then

    //이렇게 하면 그리드의 마지막줄을 인식하더라구요

    begin

    table1.append; //물론 이 명령어는 쉽지요

    table1Kind.FocusControl;

    (컴포넌트)(필드이름) //table컴포넌트 이름에 바로필드이름을 붙인거지요

    //우선 table컴포넌트를 더블클릭하면 field eidtor가

    //나오더라구요 거기서 add all field 맞나? 하여간

    //단축키가 ctrl+f 인데 그렇게 하면 쓸수 있구요

    //FocusControl이 그쪽으로 커서가 이동하더라구요

    end

    else

    begin

    table1.Next; //하하 다음으로... 너무 쉽나요? 하기야 저도 이게 제일

    쉽더라구요

    table1Kind.FocusControl;

    end;



    나도 같은 초보로서 도움이 되었나 모르겠군요! 하여간 행복한 프로그래머가 되셔요

    흐~! 새해복마니받아유(대전에서)



  • Profile
    조규춘 2000.02.03 21:00


    위 의 설명에서 제목만 수정할려고 하는 데 안되더라구요! 하여간 죄송합니다.



    다음부터 조심하겠습니다. 부디 용서를.....

  • Profile
    유효종 2000.02.03 20:09
    살아있는 의문부호? wrote:

    > DBGrid에서 Enter key를 눌러서 셀을 이동하고 싶은데요...???

    > 예를 들어서 디비그리드의 내용을 수정후 엔터키를 치게되면

    > 수정된내용이 바뀌지 않고 원래 값이 그대로 있거든요...

    > 수정후에 화살표키를 움직여야 수정이 되더라구요...

    > 그것을 엔터키를 쳐서 할수 없는지요...

    > 그리고...

    > 엔터키를 처서 셀이동을 좌우...아래위로 하고 싶거든요...

    > 어떻게 하면 되나요...???

    >

    > 고수님들의 가르침을 기다리겠습니다.....

    > 감사합니다...

    > 설 잘보내세요...!!!!



    DBGrid 의 OnKeyDown Event 에

    if Key = #13 then begin

    DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1

    end;



    이렇게 하시면 되구요

    마지막 컬럼에서는 어떻게 해야 할까요?

    그건여









    직접 해 보세요



    프리랜서 유효종