ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 부모창에서 자식창으로..자식창에서 부모창으로 값넘기기
    .NET 2008. 12. 15. 22:22
    반응형


    - 네이버 검색

    다이얼로그 자식창에서 부모에 값 넘기기

    mongk23 2008.06.22 20:27

    답변 1| 조회 209

    다이얼로그기반 프로젝트에서

    부모창이 차일드다이얼로그를 만들었습니다.

    차일드다이얼로그에 버튼을 하나 만들고 부모창에서 차일드의 버튼이 눌렸는지를 어떻게 알수 있을까요?

     

    참고로

    왼쪽버튼클릭이벤트에서 차일드 다이얼로그 버튼위치를 알아내서 해도

    안됩니다.

     

     

    설명좀 부탁드려요

     

    신고

    의견 쓰기

    질문자 채택된 경우, 추가 답변 등록이 불가합니다.

    질문자 선택

    re: 다이얼로그 자식창에서 부모에 값 넘기기

    tipssoft

    답변채택률 52.1%

    2008.06.23 12:41

    질문자인사 좋은 답변 감사합니다. 많은 도움이 되었습니다.

    안녕하세요. Tipssoft입니다.

    '대화상자간에 데이터 주고받는 예제'가 있어 알려드립니다.

    참조하세요.

     

     

                                    [그림 1_1]

     

                                    [그림 1_2]

     

                                    [그림 1_3]

     

    개발 환경

       1. OS 환경  : WindowXP

    2. 사용 언어 : VC++ 6.0

     

    ◈ 프로그램 설명

     1. 각 에디터컨트롤에서 데이터를 입력하고 [대화상자를 생성하여 편집하기]버튼을 클릭하면

        ModifyDlg대화상자가 생성되면서 호출되는 WM_INITDIALOG 메시지에서 해당 대화상자의

        에디터컨트롤에 데이터를 설정하도록 하였습니다.

     2. ModifyDlg대화상자가 종료되기 전에 각 에디터컨트롤에서 편집된 데이터를 얻어서 멤버변수에

        저장하고 DoModal함수가 끝나는 동시에 ModifyDlg대화상자를 생성했던 부모 대화상자에

        해당 에디터컨트롤에 데이터를 설정하도록 하였습니다.

     

    ◈ 중요 소스 설명

     

     

    ................... 중간 생략 ......................

     

     

    ◈ 중요 소스 설명

     

    CDialog에서 계승받은 ExamDataExchangeDlg클래스에 OnModifyButton()함수와 ModifyDlg클래스에

    SetUserData()함수와 GetUserData()함수에 대한 코드입니다.

     
        void CExamDataExchangeDlg::OnModifyButton()
        {
            // ModifyDlg로 전달할 값을 현재 대화상자의 에디트 컨트롤에서 얻는다.
            CString name;
         
            GetDlgItemText(IDC_NAME_EDIT, name);
            int age = GetDlgItemInt(IDC_AGE_EDIT);
             
            ModifyDlg ins_dlg;
            // ModifyDlg 대화상자가 생성되기 전에 넘겨줄 데이터를 넘겨주어야 한다. 그래야지
            // 대화상자가 생성되면서 호출되는 WM_INITDIALOG 메시지에서 해당 대화상자의 컨트롤에
            // 값을 설정해줄수 있다.
            ins_dlg.SetUserData(name, age);
            // 대화상자를 생성한다.
            if(IDOK == ins_dlg.DoModal()){
                // ModifyDlg 대화상자의 "확인" 버튼을 누르면 DoModal 함수는 IDOK라는 값을
                // 반환하게 된다. 따라서 정상적으로 편집을 완료했다는 뜻이므로 ModifyDlg에서
                // 편집된 값을 얻어서 자신의 에디트 컨트롤에 반영해야한다. 하지만
                // ModifyDlg 대화상자는 이미 종료된 상태이고 편집에 사용했던 에디트 컨트롤도
                // 같이 사라진 상황이라서 직접적으로 에디트 컨트롤에서 값을 얻지 못하기 때문에
                // ModifyDlg이 사라지기 전에 멤버 변수에 저장한 값을 이용해야한다.
                // ModifyDlg에서 편집된 값을 얻는다.
                ins_dlg.GetUserData(name, age);
            
                // ModifyDlg에서 받은 값을 현재 대화상자의 에디트 컨트롤에 설정한다.
                SetDlgItemText(IDC_NAME_EDIT, name);
                SetDlgItemInt(IDC_AGE_EDIT, age);
            }
        }
     
    ====================================================================================
     
        void ModifyDlg::SetUserData(CString parm_name, int parm_age)
        {
            // 부모 대화상자에서 전달한 데이터를 멤버 변수에 저장한다.
            m_name = parm_name;
            m_age = parm_age;
        }
     
    ====================================================================================
     
        void ModifyDlg::GetUserData(CString &parm_name, int &parm_age)
        {
            // 현재 멤버 변수가 가지고 있는 값을 매개변수에 복사해준다.
            // 이 함수는 ModifyDlg를 생성한 부모 대화상자에서 호출할것이며
            // DoModal이 끝난후에 사용할 것이다.
            parm_name = m_name;
            parm_age = m_age;
        }
     
     

     

     Continue...(추가적으로 코드가 필요하신 경우에는 소스를 다운받아 참조하세요.)

     




    http://www.tipssoft.com/bulletin/board.php?bo_table=update&wr_id=245&page=4















    부모창에서 자식창으로..자식창에서 부모창으로 값넘기기

    mintx1513 2008.04.17 18:32

    답변 1| 조회 1,965

    아래는 지식인에 답변된 내용입니다.

    이 소스에서 수정좀 부탁드릴려고 다시 문의드립니다.

    아래보시면 부모창에서 입력받는 필드가 3개인데 이 입력받은 값을 팝업창으로 넘기고

    팝업창에서 또 하나의 필드를 입력받아 총 4개의 필드값을 부모창으로 다시 넘길려고 합니다.

    이때 팝업창에서 총 4개의 값을 넘기고 이 팝업창은 버튼을 누름과 동시에 닫히고

    넘겨받는 창은 아래의 부모창이 아닌 새로운 부모창으로 페이지가 이동이 되며 값을 넘겨받아야합니다. 

    아, 그리고 빠진 문의가 잇는데요.......위 부모창 스크립트중에 버튼을 두번 누르게 되어있잖아요....
    한번은 창 띄우기 한번은 값넘기기요......이거 버튼 한번에는 불가능한가요?

    제발 답변좀 부탁드립니다 고수님들 ㅡㅜ;;; 너무 어려워요.....

     

    보모창.htm ------------------------------------------------------------
    <script>
    var winObject = null;

    function popupWindow(){
    var settings ='toolbar=0,directories=0,status=no,menubar=0,scrollbars=auto,resizable=no,height=200,width=200,left=0,top=0';
    winObject = window.open("test2.htm", "test2", settings);
    }

    function submitToWindow(){
    winObject.document.all.text11.value = document.all.text1.value;
    winObject.document.all.text22.value = document.all.text2.value;
    winObject.document.all.text33.value = document.all.text3.value;

    }
    </script>
    <input type=text name="text1">
    <input type=text name="text2">
    <input type=text name="text3">

    <input type=button value="새창띄우기" onClick="popupWindow();">
    <input type=button value="팝업창으로전송" onClick="submitToWindow();">

    팝업창.htm -----------------------------------------------------------------
    <script>
    function submitToParent(){
    opener.document.all.text1.value = document.all.text2.value;
    }
    </script>
    <input type=text name=text2>
    <input type=button value="부모창으로 전송" onClick="submitToParent()">

    신고

    의견 쓰기

    질문자 채택된 경우, 추가 답변 등록이 불가합니다.

    질문자 선택

    re: 부모창에서 자식창으로..자식창에서 부모창으로 값넘기기

    yhtgogo

    답변채택률 82.4%

    2008.04.17 19:00

    질문자인사 좋은 답변 감사합니다. 많은 도움이 되었습니다.

    출처 : http://msdn2.microsoft.com/en-us/library/ms533723.aspx
    
    아래의 함수를 사용하셔서 팝업창을 띄우시면 가능하실 것입니다.
    
    vReturnValue = window.showModalDialog(sURL[, vArguments][, sFeatures]);
    vReturnValue = window.showModelessDialog(sURL[, vArguments][, sFeatures]);
    
    팝업창을 띄우실 때
    vArguments 에 들어가는 변수를 이용하여 부모창의 값을 팝업창으로 넘길 수 있습니다.
    이것을 Object나 Array 형으로 선언해서
    변수 여러개를 한꺼번에 넘기실 수 있습니다.

    자바 스크립트로 그냥 빈 클래스(객체) 만들어 사용하시는것이 가장 편할것 같습니다...

    function jsDialog(x){
        var mObject = new Object();
        mObject.xml = x;
        mObject.my_key1 = 3;
        mObject.my_key2 = 10;
        var rs = showModalDialog('files.asp', mObject, 'scroll:no;resizable:no;center:yes;status=0');
       ....
    }

    위와 같이 호출하고.. 위에서 x는 XML Object 라고 가정합니다.......
    모달창에서는 아래와 같이 사용할수 있습니다...
    부모창에서 모달창에서 수정한 my_key1, my_key2 도 받아서 다시 사용할수 있습니다.

    function test(){
     var x = window.dialogArguments.xml
     alert(x.xml);
     var k1 = window.dialogArguments.my_key1
     var k2 = window.dialogArguments.my_key2
    ...
     window.dialogArguments.my_key1 = 13
     window.dialogArguments.my_key2 = 30
    }

    출처 : http://msdn2.microsoft.com/en-us/library/ms533723.aspx











    아래는 지식인에 답변된 내용입니다.

    이 소스에서 수정좀 부탁드릴려고 다시 문의드립니다.

    아래보시면 부모창에서 입력받는 필드가 3개인데 이 입력받은 값을 팝업창으로 넘기고

    팝업창에서 또 하나의 필드를 입력받아 총 4개의 필드값을 부모창으로 다시 넘길려고 합니다.

    이때 팝업창에서 총 4개의 값을 넘기고 이 팝업창은 버튼을 누름과 동시에 닫히고

    넘겨받는 창은 아래의 부모창이 아닌 새로운 부모창으로 페이지가 이동이 되며 값을 넘겨받아야합니다.

     

    제발 답변좀 부탁드립니다 고수님들 ㅡㅜ;;; 너무 어려워요.....

     

    보모창.htm ------------------------------------------------------------
    <script>
    var winObject = null;

    function popupWindow(){
    var settings ='toolbar=0,directories=0,status=no,menubar=0,scrollbars=auto,resizable=no,height=200,width=200,left=0,top=0';
    winObject = window.open("test2.htm", "test2", settings);
    }

    function submitToWindow(){
    winObject.document.all.text11.value = document.all.text1.value;
    winObject.document.all.text22.value = document.all.text2.value;
    winObject.document.all.text33.value = document.all.text3.value;

    }
    </script>
    <input type=text name="text1">
    <input type=text name="text2">
    <input type=text name="text3">

    <input type=button value="새창띄우기" onClick="popupWindow();">
    <input type=button value="팝업창으로전송" onClick="submitToWindow();">

    팝업창.htm -----------------------------------------------------------------
    <script>
    function submitToParent(){
    opener.document.all.text1.value = document.all.text2.value;
    }
    </script>
    <input type=text name=text2>
    <input type=button value="부모창으로 전송" onClick="submitToParent()">

       히어   08-04-17 18:26  
    아, 그리고 빠진 문의가 잇는데요.......위 부모창 스크립트중에 버튼을 두번 누르게 되어있잖아요....
    한번은 창 띄우기 한번은 값넘기기요......이거 버튼 한번에는 불가능한가요?
       한희정   08-04-17 18:46  
    왜 부모창의 3개의 값을 팝업창으로 넘겨야 하죠?
    4개의 인풋폼을 만들어놓고 3개만 부모창에서 입력받고 나머지 하나는 팝업창에서 입력받은뒤
    팝업창에서 `부모창으로 전송` 클릭시 부모창으로 나머지 하나를 전송하고
    부모창에서 4개의 완전한 데이터를 submit 하면 될것 같은데요..

    그리구.. PHP Function 보단 HTML/SCRIPT쪽인듯.. ^^

    반응형

    댓글

Designed by Tistory.