Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Cách gọi biến từ dialog vào dialog khác trong MFC

  1. #1
    Ngày gia nhập
    12 2011
    Bài viết
    1

    Mặc định Cách gọi biến từ dialog vào dialog khác trong MFC

    Hiện solution của tôi có 2 dialog. Dialog 1 có 1 biến global, và khi dùng nó ở dialog 2(gọi tới để tính toán..) thì tôi gọi bằng lệnh sau :
    Code:
    dialog1:global;
    Nhưng dialog2 vẫn không nhận giá trị của nó (khi debug giá trị này vẫn là NULL )
    Còn nếu tôi khai báo global thành biến toàn cục như sau :
    Ở dialog1.cpp :
    Code:
    CString global;
    void CTestDlg::OnBnClickedOk()
    {
    	GetDlgItemText(IDC_EDIT1,global);
    	CDialog2 dlg;
    	dlg.DoModal();
    	OnOK();
    }
    Ở solution.h , dòng cuối cùng
    Code:
    extern CString global;
    Ở Dialog2.cpp
    Code:
    void CDialog2::OnBnClickedOk()
    {
    	extern CString global;
    	SetDlgItemText(IDC_EDIT1,global);
    	OnOK();
    }
    Nhưng chạy thử thì thấy biến global ở dialog2 vẫn bị reset về giá trị NULL, không giữ nguyên như ở dialog1
    Xin hỏi nên làm thế nào ?

  2. #2
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    Trong file header dialog 2 và 1 , bạn khai báo các biến muốn truyền vào 1 trong 2 phần public mình tô đỏ:
    Code:
    class Tên class Dialog 2/1 : public CDialog
    {
    
    public:
    
    protected:
    
    public:
    
    };
    Với kiểu dữ liệu là cấu trúc ( và 1 vài kiểu khác ) , bạn nên khai báo :
    Code:
    Têncấutrúc * biến ;
    biến = new Têncautruc;
    Để cấp phát bộ nhớ trên heap cho biến , nếu khai báo :
    Code:
    Têncấutrúc  biến ;
    Thì nếu mình không nhầm,chỉ cấp phát bộ nhớ trên stack. Khi dialog 2 đóng, có thể các biến nó khởi tạo ( các biến gán cho control của dialog 2 ) sẽ bị xóa.
    Đã được chỉnh sửa lần cuối bởi luc13aka47 : 16-12-2011 lúc 09:34 AM.

  3. #3
    Ngày gia nhập
    12 2009
    Bài viết
    74

    Chủ thớt thử dùng Modeless xem: http://www.codeproject.com/KB/dialog...gmodeless.aspx

  4. #4
    Ngày gia nhập
    09 2008
    Bài viết
    223

    trong Dialog2.h bạn khai báo 1 biến public

    và truyền vào thế naỳ


    Visual C++ Code:
    1. CDialog2 dlg;
    2. dlg.tenbien = giatri;  // Truyền giá trị vào ở đây
    3.  
    4. dlg.DoModal();
    5.  
    6. CString retVal = dlg.giatri;  // Lấy giá trị ra ở đây (nếu cần thiết)
    7.  
    8. OnOK()
    Ân oán giang hồ nuôi tôi lớn
    Cuộc đời khốn nạn dạy tôi khôn
    Không đâm không chém đời không nể
    Không tiền không bạc gái không theo

    ----------------------
    Visit my blog: http://nova-soft.net/

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi gianghoplus Xem bài viết
    trong Dialog2.h bạn khai báo 1 biến public

    và truyền vào thế naỳ


    Visual C++ Code:
    1. CDialog2 dlg;
    2. dlg.tenbien = giatri;  // Truyền giá trị vào ở đây
    3.  
    4. dlg.DoModal();
    5.  
    6. CString retVal = dlg.giatri;  // Lấy giá trị ra ở đây (nếu cần thiết)
    7.  
    8. OnOK()

    bạn chủ thread có thể làm thế này, nhưng theo mình cho an toàn thì tốt nhất là viết 2 hàm get, set để thiết lập giá trị cho biến, biến thiết lập là private hoặc protected
    trong hàm set , ta có thể có các đoạn mã kiểm tra nội dung dữ liệu đầu vào xem có thỏa mãn không?

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    67

    Mặc định Cách gọi biến từ dialog vào dialog khác trong MFC

    Visual C++ Code:
    1. CDialog2 dlg;
    2. dlg.tenbien = giatri;  // Truyền giá trị vào ở đây
    3.  
    4. dlg.DoModal();
    5.  
    6. CString retVal = dlg.giatri;  // Lấy giá trị ra ở đây (nếu cần thiết)
    7.  
    8. OnOK()
    Bạn có thể làm như anh @gianghoplus, tuy nhiên nếu để chắc chắn người sử dụng ấn OK hay cancel trong Dialog thì bạn có thể tạo một nút với ID là IDOK rồi sửa code trên một chút.

    Visual C++ Code:
    1. CDialog2 dlg;
    2. dlg.tenbien = giatri;  // Truyền giá trị vào ở đây
    3.  
    4. if (dlg.DoModal() == IDOK)
    5. {
    6. CString retVal = dlg.giatri;  // Lấy giá trị ra ở đây (nếu cần thiết)
    7. }
    8. OnOK()
    Khi người sử dụng ấn nút đó thì mới truyền giá trị, còn các nút khác thì ko làm gì cả

Các đề tài tương tự

  1. Dialog::DoModal trong MFC. Làm thế nào để tương tác với dialog bên dưới?
    Gửi bởi rua_con trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 29-02-2012, 03:27 PM
  2. gọi dialog từ 1 dialog trong Visual C++ như thế nào?
    Gửi bởi attain11 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 27-10-2010, 09:29 PM
  3. Mất dialog chính khi add biến trong MFC
    Gửi bởi night1211 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 08-12-2009, 06:17 PM
  4. Xử lý Dialog trong MFC | Code điều Khiển Dialog con ở đâu?
    Gửi bởi AdminPro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 08-04-2009, 10:53 PM
  5. Di chuyển Dialog khi drag and drop phần thân Dialog (Client)?
    Gửi bởi mu9991 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 07-11-2008, 10:48 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn