Datenaustausch zwischen zwei Dialogen



  • Ah ok, super! Funktioniert.

    Wenn ich auf den Button klicke, wird der Text in dem neuen Dialolg im CEdit-Feld angezeigt. Eine Sache stört mich da noch:

    Der Text wird "markiert" dargestellt, also blau hinterlegt, wie kann ich das ändern?



  • HerrMaier schrieb:

    Ah ok, super! Funktioniert.

    Wenn ich auf den Button klicke, wird der Text in dem neuen Dialolg im CEdit-Feld angezeigt. Eine Sache stört mich da noch:

    Der Text wird "markiert" dargestellt, also blau hinterlegt, wie kann ich das ändern?

    Wieso das denn? Sollte nicht sein. Zeig mal wie du das aufrufst...



  • so:

    CmeinDlg dlg2;
    
    	dlg.m_text = _T("hallo");
    
    	dlg2.DoModal();
    


  • Nachtrag:

    CmeinDlg dlg2;
    
    	dlg2.m_text = _T("hallo");
    
    	dlg2.DoModal();
    


  • HerrMaier schrieb:

    Nachtrag:

    CmeinDlg dlg2;
    
    	dlg2.m_text = _T("hallo");
    
    	dlg2.DoModal();
    

    Davon wird der Textnicht blau hinterlegt. Machst du innerhalb der Dialogklasse was mit der Variablen bzw. mit dem CEdit-Member?



  • Nein, da mach ich nichts damit, in der CmeinDlg.h stehen nur die Variablen drin:

    #pragma once
    #include "afxwin.h"
    
    // CmeinDlg dialog
    
    class CmeinDlg : public CDialogEx
    {
    	DECLARE_DYNAMIC(CmeinDlg)
    
    public:
    	CmeinDlg(CWnd* pParent = NULL);   // standard constructor
    	virtual ~CmeinDlg();
    
    // Dialog Data
    	enum { IDD = IDD_DIALOG1 };
    
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    
    	DECLARE_MESSAGE_MAP()
    public:
    	CEdit m_cedit;
    	CString m_text;
    };
    

    und in der CmeinDlg.cpp hab ich nichts verändert:

    // CmeinDlg.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "test.h"
    #include "CmeinDlg.h"
    #include "afxdialogex.h"
    
    // CmeinDlg dialog
    
    IMPLEMENT_DYNAMIC(CmeinDlg, CDialogEx)
    
    CmeinDlg::CmeinDlg(CWnd* pParent /*=NULL*/)
    	: CDialogEx(CmeinDlg::IDD, pParent)
    {
    
    }
    
    CmeinDlg::~CmeinDlg()
    {
    }
    
    void CmeinDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_EDIT1, m_cedit);
    	DDX_Text(pDX, IDC_EDIT1, m_text);
    }
    
    BEGIN_MESSAGE_MAP(CmeinDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    // CmeinDlg message handlers
    

    in der testDlg.cpp ruf ich sie dann nur durch Button-Klick auf:

    void CtestDlg::OnBnClickedOk()
    {
    	CmeinDlg dlg2;
    
    	dlg2.m_text = _T("hallo");
    
    	dlg2.DoModal();
    }
    


  • Das ist schon komisch. Dafür gibts erst mal keine Erklärung. Was ist wenn du den CEdit-Member wieder entfernst (den brauchst du anscheinend sowieso nicht)?



  • gleiches Problem 😞



  • hat niemand eine Idee? 😞



  • HerrMaier schrieb:

    gleiches Problem 😞

    Welches Element des Dialoges hat denn beim Erstellen den Fokus? Vermutlich hat dein Editfeld die 1 in der Reihenfolge. Gib mal der Ok-Schlatfläche den ersten Eintrag und dann dürfte es weg sein.



  • hab, die Member-Variable für das CEdit-Feld gelöscht, immer noch.

    Wie meinst du das mit der Reihenfolge ändern? In der Header des Dialogs der angezeigt werden soll?

    Der Ok-Button befindet sich ja in einem anderen Dialog, in Dialog1, der Text soll ja in Dialog2 angezeigt werden


  • Mod

    Der Text wird nicht blau hinterlegt wenn er nicht den Focus hat.
    Hat Dein Text Control ein WS_TABSTOP?

    Implizit hat jeder Dialog einen IDOK Button und einen IDCANCEL Button!

    Evtl. solltest Du mal ein paar Basics noch lernen...



  • schon klar, allerdings hab ich Dialog2 ok und cancel-Button rausgelöscht und hab nur das CEdit-Feld drin.

    wo seh ich das mit dem WS-TABSTOP?


  • Mod

    In Deinem Ressourcen Editor. In den Eigenschaften.



  • Ah ok, habs. Da ich nur das CEdit-Feld drin hatte, war der natürlich als Fokus.

    Hab ein static-text hinzugefügt und in den properties tabstop true, wenn tabstop meines cedit feldes false ist, funktionierts.


  • Mod

    Ist das nun eine Eingabe? Dann solltest Du auch die Selektion erlauben.
    Ist das nur eine Ausgabe, dann solltest Du ES_READONLY setzen.

    Dann musst Du auch mit WS_TABSTOP nicht rumspielen.



  • Es ist eine Ausgabe, die man nachträglich noch editieren können soll, also quasi beides, readonly ist daher nicht erwünscht. Klappt ja nun

    Vielen Dank an alle!



  • HerrMaier schrieb:

    Ah ok, habs. Da ich nur das CEdit-Feld drin hatte, war der natürlich als Fokus.

    Hab ein static-text hinzugefügt und in den properties tabstop true, wenn tabstop meines cedit feldes false ist, funktionierts.

    Also hat er doch am Fokus rumgespielt. Normalerweise hat die Ok-Schaltfläche die 1 und die Cancel-Schaltfläche die 2. Fügt man ein Editfeld hinzu würde es die 3 bekommen und damit wäre das Problem erst gar nicht entstanden.


  • Mod

    Oder in OnInitDialog, SetFocus auf das Edit Control. SetSel(0,0) und return FALSE!



  • Martin Richter schrieb:

    Oder in OnInitDialog, SetFocus auf das Edit Control. SetSel(0,0) und return FALSE!

    Wenn er im Ressourcen-Editor kein WS_TABSTOP findet wird er wohl kaum was in OnInitDialog gemacht haben können. Außerdem hat er die Controlvariable gelöscht.


Anmelden zum Antworten