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
-
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?
-
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.
-
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.
-
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.