Avatar billede meilby Nybegynder
25. januar 2003 - 16:51 Der er 18 kommentarer og
1 løsning

SetFocus

Hejsa

jeg kæmper med at få sat focus tilbage til en bestemt Dialog Item efter jeg har kørt noget kode.

jeg koder i MS Visual C++ 6.0

jeg går ud fra at jeg skal bruge SetFocus() og den kræver en CWnd * så har prøvet med følgende kode men den virker ikke.

CWnd *item;
item = GetDlgItem(IDC_MESSAGE);
item->SetFocus();

kan nogen sige mig hvad jeg gør galt ?
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:01 #1
Jeg ville lave en control variabel på det dialog element  og kalde SetFocus() med den variable. Det virker ..
Avatar billede meilby Nybegynder
25. januar 2003 - 17:21 #2
det var sådan her du mente ik ?

m_message.SetFocus();

det virker heller ikke selvom m_message er lavet som en control til Edit boxen.
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:25 #3
ja... det er da mystisk.. du har lavet variablen med ClassWizarden ik?
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:31 #4
har lige selv testet .. og det virker.. man skal vælge variable type Control når man knytter variablen med ClassWizarden..
Avatar billede meilby Nybegynder
25. januar 2003 - 17:33 #5
Jo jag lavede det med ClassWizarden
Avatar billede meilby Nybegynder
25. januar 2003 - 17:34 #6
jeg køre noget kode når man trykker på tabulator knappen og i bunden af den kode skulle den sætte focus tilbage til edit boxen men det vil den ikke
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:37 #7
hmmmm... fatter ikke hvad der er galt så..
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:38 #8
Ok.. efter du har kaldt SetFocus.. kalder du UpdateData(FALSE); ??
Avatar billede meilby Nybegynder
25. januar 2003 - 17:43 #9
BOOL CTabDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_TAB)
{       
  CString strMessage, strTemp;
  CRecordset rs(&db);
  int i,n;
  GetDlgItemText(IDC_MESSAGE, strMessage);
  if(strMessage != "" && strMessage.Left(1) != "/"){
    i = strMessage.Find(" ",1);
    if(i == -1){
      rs.Open(AFX_DB_USE_DEFAULT_TYPE, "Select username from users where username like '"+ strMessage +"%' limit 1");
      if(!rs.IsEOF() && !rs.IsBOF()){
      rs.GetFieldValue("username", strTemp);
      strMessage = strTemp +" ";
      SetDlgItemText(IDC_MESSAGE, strMessage);

      m_message.SetFocus();

      }
    }
    }
    db.Close();
  }
  return CDialog::PreTranslateMessage(pMsg);
}
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:43 #10
never mind .. har lige testet .. det virker aligevel.. troede hvis man opdaterede en felt at den vil automatisk SetFocus på den .. men det er ik tilfældet
Avatar billede meilby Nybegynder
25. januar 2003 - 17:44 #11
det vil ikke virke når man kalder den nede fra PreTranslateMessage :-/
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:47 #12
Fatter ikke at det ikke virker.. har testet det .. det virker hos mig..
Avatar billede meilby Nybegynder
25. januar 2003 - 17:50 #13
hmm så er det nok bare min C++ kompilere der fucker up igen :-(
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:50 #14
dumt spørgsmål.. men du er sikker at du kommer ind i den kode hvor du kalder SetFocus ?? har du debugget?
Avatar billede meilby Nybegynder
25. januar 2003 - 17:53 #15
ja jeg har debugget og den køre også setfocus
Avatar billede killer_bee Nybegynder
25. januar 2003 - 17:55 #16
virkelig mystisk.. har desværre ikke flere ideer lige nu..
Avatar billede meilby Nybegynder
25. januar 2003 - 17:57 #17
Det er bare i orden du har fået pointene alligevel for besværet. må bare slå min kompiler indtil det virker
Avatar billede killer_bee Nybegynder
25. januar 2003 - 18:00 #18
takker :o) håber du finder ud af det.. og gerner poster her hvad der var galt.
Avatar billede jpk Nybegynder
26. januar 2003 - 11:01 #19
prøv:

BOOL CTabDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_TAB)
{       
  CString strMessage, strTemp;
  CRecordset rs(&db);
  int i,n;
  GetDlgItemText(IDC_MESSAGE, strMessage);
  if(strMessage != "" && strMessage.Left(1) != "/"){
    i = strMessage.Find(" ",1);
    if(i == -1){
      rs.Open(AFX_DB_USE_DEFAULT_TYPE, "Select username from users where username like '"+ strMessage +"%' limit 1");
      if(!rs.IsEOF() && !rs.IsBOF()){
      rs.GetFieldValue("username", strTemp);
      strMessage = strTemp +" ";
      SetDlgItemText(IDC_MESSAGE, strMessage);

      m_message.SetFocus();

      }
    }
    }
    db.Close();
return TRUE;
  }
  return CDialog::PreTranslateMessage(pMsg);
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester