Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » ListBox / LBN_KILLFOCUS / Button deaktivieren

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
03.07.2004, 22:23 Uhr
Bastler



Hi Leute!

Habe folgendes Problem:
In einer dialogfeldbasierten Anwendung habe ich u.a. eine ListBox.
Wenn in der ListBox ein Eintrag ausgewählt ist, dann, und nur dann wird ein Button (Edit) aktiv geschaltet.
Durch klicken auf den Button kann dann der Eintrag in der ListBox editiert werden.
Sobald auf irgendein anderes Element im Dialogfeld geklickt wird oder die Markierung in der ListBox verschwindet, soll der Edit-Button wieder deaktiviert werden.
Hatte es jetzt probeweise so gelöst, dass ich bei allen anderen Elementen im Dialogfeld bei den jeweils zugehörigen Funktionen den Edit-Button wieder deaktiviert habe. Hat zwar funktioniert, aber finde ich persönlich als schlecht programmiert und äusserst umständlich.

Jetzt habe ich mit der CListBox-Nachricht 'LBN-KILLFOCUS' experimentiert.
Sobald irgendwo anders als in der ListBox hingeklickt wird, wird der Button durch die Funktion 'OnKillFocusListBox' deaktiviert.
Leider aber auch, wenn ich auf den Edit-Button selber klicke. Ist zwar logisch, das dieser deaktiviert wird, da ja die ListBox den Fokus verliert. Ich hatte aber gehofft, dass die Funtkion des Edit-Buttons noch aufgerufen wird. Wird sie leider aber nicht.

Hat da jemand eine Lösung, oder muss ich wirklich wie anfänglich probiert, jeweils bei jedem anderen Element im Dialogfeld den Edit-Button deaktivieren?

Vorab besten Dank für Eure Mühe,
der Bastler
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.07.2004, 15:00 Uhr
~toxic
Gast


hi, dazu könnt ich dir folgende lösung anbieten...

C++:
void CTempDlg::OnKillfocusList1(NMHDR* pNMHDR, LRESULT* pResult)
{
    if ( ((CWnd*)GetFocus())->GetDlgCtrlID() != IDC_BUTTON1 )
        GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);

    *pResult = 0;
}

void CTempDlg::OnSetfocusList1(NMHDR* pNMHDR, LRESULT* pResult)
{
    GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
    *pResult = 0;
}

das funktioniert zwar, hat aber ein anderes problem: sobald du den button1 drückst verliert die listbox den focus, dh. die onkillfocus wird dann nicht mehr aufgerufen wenn du dann ein anderes control drückst, du müsstest also am ende deiner button1-funktion der listbox den focus wiedergeben.
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.07.2004, 22:36 Uhr
Bastler



Hi!

Vielen Dank für Deine Antwort.
Hatte nur leider bisher noch keine Zeit, es auszuprobieren.

Ciao,
der Bastler
 
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: