radio= neues Dialogfenster? geht das?

Code:
void BASIS::OnRadio1() 
{
	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
	  m_ctrEdit1.EnableWindow(true);  //Feld wird aktiviert
}


Code:
--------------------Konfiguration: NetSend - Win32 Debug--------------------
Kompilierung läuft...
BASIS.cpp
C:\Dokumente und Einstellungen\Administrator\Desktop\NETSEND\NetSend\BASIS.cpp(62) : error C2039: 'EnableWindow' : Ist kein Element von 'CString'
        c:\programme\microsoft visual studio\vc98\mfc\include\afx.h(368) : Siehe Deklaration von 'CString'
Fehler beim Ausführen von cl.exe.

BASIS.obj - 1 Fehler, 0 Warnung(en)

also ich hab mein eingabefeld IDC_Vorname & m_vorname genannt geht aber nicht wie ihr oben sieht
 
Um die Funktionen einer CWnd-Control zu benutzen, musst du den entsprechenden Typ bei der Verknüpfung über die Eigenschaften auswählen. Du hast in deinem Fall ein CString mit der Edit verknüpft. Um an EnableWindow aus CEdit ranzukommen, musst du da auch CEdit auswählen.

Alternativ kannst du über GetDlgItem( IDC_EDIT1 )->EnableWindow arbeiten. Da hast du dann aber keinen Zugriff auf die erweiterten Memberfunktionen von CEdit, nur auf die Standardmethoden von CWnd.
 
Code:
void BASIS::OnRadio1() 
{
	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
	  IDC_VORNAME.EnableWindow(true);  //Feld wird aktiviert
}

nun hab ich diesen fehler

Code:
--------------------Konfiguration: NetSend - Win32 Debug--------------------
Kompilierung läuft...
BASIS.cpp
C:\Dokumente und Einstellungen\Administrator\Desktop\NETSEND\NetSend\BASIS.cpp(62) : error C2228: Der linke Teil von '.EnableWindow' muss eine Klasse/Struktur/Union sein
Fehler beim Ausführen von cl.exe.

BASIS.obj - 1 Fehler, 0 Warnung(en)
 
Da mußt du schon schreiben
Code:
GetDlgItem(IDC_VORNAME)->EnableWindow(true);
Aber bei deiner Variable m_ctrEdit1 ist dir ein Fehler unterlaufen. Wenn du den Assistenten zum Einfügen einer Variablen aufrufst, kannst du den Variablen-Typ wählen. Entweder "Control" oder "Value". Du hast offensichtlich eine Variable vom Typ Value eingefügt, die ist dann vom Typ CString - und dann klappt das nicht. Du mußt eine Variable vom Typ Control - das ist dann Typ CEdit - einfügen - und dann klappt auch der Aufruf.

Mfg

langer
 
Ich muss euch enttäuschen dass funktioniert immer noch nicht!

Aber ich danke trotzdem für eure Hilfe!

So heißt es jetzt bei mir
Code:
void BASIS::OnRadio1() 
{
	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
	GetDlgItem(IDC_VORNAME)->EnableWindow(true);
	GetDlgItem(IDC_NACHNAME)->EnableWindow(true);
	GetDlgItem(IDC_IP)->EnableWindow(false);
	GetDlgItem(IDC_LISTE)->EnableWindow(false);
}

wenn ich es aber als .exe Datei ausführe. und auf radio1 klicke werden die Felder Vorname und Nachname nicht aktiviert :(

Die Eingabefelder sind aber im Dialog fenster deaktiviert! kann es was damit zu tun haben?
 
Zuletzt bearbeitet:
Dann poste mal bitte, in welcher Klasse sich deine Eingabefelder befinden und in welcher Klasse (wohl BASIS) sich dein Code befindet.

Mfg

langer
 
langer1801 hat gesagt.:
Dann poste mal bitte, in welcher Klasse sich deine Eingabefelder befinden und in welcher Klasse (wohl BASIS) sich dein Code befindet.

Mfg

langer

ich verstehe zwar grad nicht was sie genau meinen aber ich poste mal meine ganze basis.cpp

Code:
BASIS::BASIS(CWnd* pParent /*=NULL*/)
	: CDialog(BASIS::IDD, pParent)
{
	//{{AFX_DATA_INIT(BASIS)
	m_nachname = _T("");
	m_liste = -1;
	m_edit4 = _T("");
	m_vorname = _T("");
	//}}AFX_DATA_INIT
}


void BASIS::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(BASIS)
	DDX_Control(pDX, IDC_IP, m_ip);
	DDX_Text(pDX, IDC_NACHNAME, m_nachname);
	DDX_CBIndex(pDX, IDC_LISTE, m_liste);
	DDX_Text(pDX, IDC_EDIT4, m_edit4);
	DDX_Text(pDX, IDC_VORNAME, m_vorname);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(BASIS, CDialog)
	//{{AFX_MSG_MAP(BASIS)
	ON_BN_CLICKED(IDOK, OnSenden)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten BASIS 

void BASIS::OnSenden() 
{
	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
}


void BASIS::OnRadio1() 
{
	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
	GetDlgItem(IDC_VORNAME)->EnableWindow(true);
	GetDlgItem(IDC_NACHNAME)->EnableWindow(true);
	GetDlgItem(IDC_IP)->EnableWindow(false);
	GetDlgItem(IDC_LISTE)->EnableWindow(false);
}
 
Zuletzt bearbeitet:
Hmm, ich kann hier erkennen, daß sich in deiner Klasse BASIS (übrigens: nach MS-Syntax beginnen Klassennamen immer mit C, also CBasis, Großschreibungen sollten für Makros vorbehalten bleiben) deine Eingabefelder befinden. Soweit so gut. Aber wo sind deine Radio-Buttons?
Zwei weitere Fragen:
1. Meckert der Compiler? Dann poste mal die Fehlermeldung.
2. Welchen Rückgabewert liefert denn die Funktion GetDlgItem(ID)?
Wenn er Null ist, dann war was nicht in Ordnung. Wenn er ungleich Null ist, wurde wenigstens das Handle des Control gefunden und dann werden wir weiter sehen.

Edit:
Wie hast du denn die Funktion OnRadio1 definiert?
Poste mal die basis.h.

Mfg

langer
 
Zuletzt bearbeitet:
die anderen zwei werden auch OnRadio2 & 3 heißen

langer1801 hat gesagt.:
Zwei weitere Fragen:
1. Meckert der Compiler? Dann poste mal die Fehlermeldung.
nein er meckert nicht!
langer1801 hat gesagt.:
2. Welchen Rückgabewert liefert denn die Funktion GetDlgItem(ID)?
Wenn er Null ist, dann war was nicht in Ordnung. Wenn er ungleich Null ist, wurde wenigstens das Handle des Control gefunden und dann werden wir weiter sehen.
werde ich demnächst mal probieren
langer1801 hat gesagt.:
Edit:
Wie hast du denn die Funktion OnRadio1 definiert?
Poste mal die basis.h.

Mfg

langer

Code:
#if !defined(AFX_BASIS_H__5C064909_3D9F_4C13_9786_FCCB100BD902__INCLUDED_)
#define AFX_BASIS_H__5C064909_3D9F_4C13_9786_FCCB100BD902__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// BASIS.h : Header-Datei
//

/////////////////////////////////////////////////////////////////////////////
// Dialogfeld BASIS 

class BASIS : public CDialog
{
// Konstruktion
public:
	BASIS(CWnd* pParent = NULL);   // Standardkonstruktor

// Dialogfelddaten
	//{{AFX_DATA(BASIS)
	enum { IDD = IDD_NETSEND_START };
	CIPAddressCtrl	m_ip;
	CString	m_nachname;
	int		m_liste;
	CString	m_edit4;
	CString	m_vorname;
	//}}AFX_DATA


// Überschreibungen
	// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
	//{{AFX_VIRTUAL(BASIS)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
	//}}AFX_VIRTUAL

// Implementierung
protected:

	// Generierte Nachrichtenzuordnungsfunktionen
	//{{AFX_MSG(BASIS)
	afx_msg void OnSenden();
	afx_msg void OnRadio1();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.

#endif // AFX_BASIS_H__5C064909_3D9F_4C13_9786_FCCB100BD902__INCLUDED_
 
Zuletzt bearbeitet:
GetDlgItem liefert ein CWnd* zurück. Wenn das NULL geben würde, hätte er einen Absturz.

Was mir noch einfällt: EnableWindow benutzt BOOL, nicht boolean. Ändere mal die true/false auf TRUE/FALSE. Sollte aber eigentlich keinen Unterschied machen.

Wie hast du denn die Eingabefelder im Dialogeditor deaktiviert? Mit Schreibgeschützt oder Disabled? Wenn du das mit Schreibgeschützt gemacht hast, klappt das EnableWindow nicht. Dann musst du dir wirklich über den Assistenten Controls (CEdit) zu den Feldern anlegen lassen und damit SetReadOnly( FALSE ) aufrufen.
 

Neue Beiträge

Zurück