Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » OnEnKillfocus-Validation und CANCEL

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.11.2005, 09:36 Uhr
commanderberry



Hallo,

in einem Edit control überprüfe ich beim verlassen des feldes (OnEnKillfocus) den eingegebenen pfad. Im Fehlerfall erscheint eine Meldung usw.. soweit so gut.

Wenn der Anwender jedoch den CANCEL-Button nutzt während er im edit control ist wird die prüfung auch durchgeführt, obwohl ja abgebrochen werden soll. Wie finde ich in der OnEnKillfocus-Methode heraus, ob die cancel-taste gedrückt wurde, oder wie sonst kann ich die gültigkeitsprüfung deaktivieren?

Vielen Dank schonmal!

gruß Berry
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.11.2005, 11:46 Uhr
Spacelord
Hoffnungsloser Fall


Ich würde die Prüfung bei EN_CHANGE machen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.11.2005, 12:07 Uhr
commanderberry




Zitat von Spacelord:
Ich würde die Prüfung bei EN_CHANGE machen.



das funktioniert nicht, da sich dieses ereignis be jeder buchstabenänderung / eingabe auftritt..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.11.2005, 12:11 Uhr
Spacelord
Hoffnungsloser Fall


Na und?
Wenn da nicht gerade jedesmal ne MessageBox kommt sehe ich darin kein Problem.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.11.2005, 12:24 Uhr
Tommix



Hallo,
Er will die Gültigkeit eines eingegebenen Pfades überprüfen.
Ich hab das grad mal probiert. Wenn Du OnCancel überschreibst, wird es vor OnKillFocus aufgerufen. Du kannst also dort ein Flag setzen:

C++:
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CTestDlg::IDD, pParent)
{
    //...

    m_flag = false;
}

// ...
void CTestDlg::OnKillfocusInput()
{
    if (!m_flag)
    {
        UpdateData();  // oder was immer hier passieren soll
        m_output = m_input;
        UpdateData(FALSE);
    }
    
}

void CTestDlg::OnCancel()
{
    m_flag = true;
    
    CDialog::OnCancel();
}



Gruß, Tommix

Dieser Post wurde am 22.11.2005 um 12:25 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.11.2005, 13:09 Uhr
Spacelord
Hoffnungsloser Fall


Auf die schnelle was wiederverwendbares:

C++:
class PathEdit : public CEdit
{
// Konstruktion
public:
    PathEdit();

// Attribute
public:

// Operationen
public:

// Überschreibungen
    // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
    //{{AFX_VIRTUAL(PathEdit)
    //}}AFX_VIRTUAL

// Implementierung
public:
    bool isValid();
    virtual ~PathEdit();

    // Generierte Nachrichtenzuordnungsfunktionen
protected:
    bool isValidPath;
    //{{AFX_MSG(PathEdit)
    afx_msg void OnChange();
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
};


//Implementierung

#include "stdafx.h"
#include "Path_Tester.h"
#include "PathEdit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// PathEdit

PathEdit::PathEdit()
{
    isValidPath=false;
}

PathEdit::~PathEdit()
{
}


BEGIN_MESSAGE_MAP(PathEdit, CEdit)
    //{{AFX_MSG_MAP(PathEdit)
    ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten PathEdit

void PathEdit::OnChange()
{
    CString temp("");
    GetLine(0,temp.GetBuffer(256));
    temp.ReleaseBuffer();
    WIN32_FIND_DATA fd;
    HANDLE h = FindFirstFile(temp,&fd);
    h!=INVALID_HANDLE_VALUE?isValidPath=true:isValidPath=false;
    CloseHandle(h);
}

bool PathEdit::isValid()
{
    return isValidPath;
}




Und der Passende Dialog:


C++:
#include "PathEdit.h"

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

// Dialogfelddaten
    //{{AFX_DATA(CPfadDlg)
    enum { IDD = IDD_DIALOG1 };
    PathEdit    m_PathEdit;
    CString    m_Pfad;
    //}}AFX_DATA


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

// Implementierung
protected:

    // Generierte Nachrichtenzuordnungsfunktionen
    //{{AFX_MSG(CPfadDlg)
    virtual void OnOK();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

//Implementierung

#include "stdafx.h"
#include "Path_Tester.h"
#include "PfadDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Dialogfeld CPfadDlg


CPfadDlg::CPfadDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CPfadDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CPfadDlg)
    m_Pfad = _T("");
    //}}AFX_DATA_INIT
}


void CPfadDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CPfadDlg)
    DDX_Control(pDX, IDC_EDIT1, m_PathEdit);
    DDX_Text(pDX, IDC_EDIT1, m_Pfad);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPfadDlg, CDialog)
    //{{AFX_MSG_MAP(CPfadDlg)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CPfadDlg

CString CPfadDlg::getPfad()
{
    return m_Pfad;
}

void CPfadDlg::OnOK()
{
    if(m_PathEdit.isValid())
        CDialog::OnOK();
    else
        AfxMessageBox("Ungültige Pfadangabe!");
}




MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.11.2005, 13:14 Uhr
commanderberry




Zitat von Tommix:

Wenn Du OnCancel überschreibst, wird es vor OnKillFocus aufgerufen.


Vielen Dank! Hatte die OnClick usw. schon getestet.. Manchmal sieht man eben den Wald vor lauter Bäumen nicht. So funktioniert es auf jeden Fall.

Auf jeden Fall gibts die Lösung demnächst dann auch für die anderen Googler hier zum nachsehen! ;-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.11.2005, 13:16 Uhr
commanderberry




Zitat von Spacelord:
Auf die schnelle was wiederverwendbares:
//....
MfG Spacelord


Man da hast du Dir aber mühe gemacht. fetten dank spacelord!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.11.2005, 13:19 Uhr
Spacelord
Hoffnungsloser Fall


Nee,keine fette Mühe.
90% davon ist vom Klassenassi!
Das sind nur nen paar Zeilen Code die die Arbeit machen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: