dyn. Array + BN_Clicked



  • Hallo,

    ich habe bei der Initialiseirung eines Formulars 'OnInitDialog()' dyn. ein KlassenobjektArray angelegt. Das Formular hat ein Eingabefeld, ein Ausgabefeld und einen Such-Button 'OnSuche()'.
    Wenn man eine Zahle eingibt, soll nach Klicken des Suchbuttons das dyn. Array durchlaufen werden, um ein passendes Objekt zu finden.

    Leider komme ich in 'OnSuche()' nicht an das dyn. Array ran.

    Was ist zu tun??

    Manu



  • Zeig mal, wo du das Array anlegst.
    So geraten würdeich sagen, dass du das Array entweder lokal angelegt hast oder in der falschen Klasse.



  • Hallo anbei das gewünschte.

    BOOL CSemesterarbeit02Dlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Hinzufügen des Menübefehls "Info..." zum Systemmenü.
    
    	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{	
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    
    	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    
    	// START: myOwnCode **************************************************
    
    	// Anzahl der Inschriften zählen.
    	unsigned long int intAnzIns = 100; //anzahl(strDatei);
    
    	// Array für KlassenObjekte entsprechender Grösse dynamisch anlegen.	
    	class ClaInschrift * arrDaten = new ClaInschrift[intAnzIns];
    
    	// END: myOwnCode ****************************************************
    
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    
    void CSemesterarbeit02Dlg::OnSuche() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    	UpdateData(true);
    	bool bolGef = false;
    
    	// Array der KlassenObjekte durchlaufen, um nach der angeforderten Nummer zu suchen.
    	int i;
    	for (i = 0; i < intAnzIns; i++)
    	{
    		bolGef = arrDaten[i].sucheInschrift(m_strInschNum);
    		if (bolGef == true)
    			break;
    	}
    
    	// Suchergebnis auswerten.
    	// Die angeforderte Inschrift wurde gefunden.
    	if (bolGef == true)
    		m_strAnzeige = arrDaten[i].zeigeInschrift();
    	// Die angeforderte Inschrift wurde nicht gefunden.
    	else
    		m_strAnzeige =  "Zu Ihrer Anfrage [Inschrift: " + m_strInschNum + "] gibt es keinen Eintrag.";	
    
    	UpdateData(false);
    }
    


  • estartu_de schrieb:

    ...lokal angelegt hast...

    Das Array ist lokal in der OnInitDialog() definiert, daher hast du keinen Zugriff aus der OnSuchen() heraus. --> Einfache Lösung Array in der ganzen Klasse verfügbar machen = Headerdatei.



  • Also in der HeaderDatei, in der auch die Klasse steht:
    class * arrDaten;
    und in OnInitDialog():
    arrDaten = new ClaInschrift[intAnzIns];

    geht nit.



  • Und wieso?

    Liebe Manuela, es gibt unzählige Möglichkeiten, wieso das nicht funktioniert - könntest du bitte genauer beschreiben, WORAN du erkennst, dass es nicht geht?

    Und was soll das class eigentlich helfen? An der Stelle habe ich das noch nie gesehen. 😕

    Außerdem wäre es wohl einfacher, wenn du ein CArray benutzen würdest, dann müsstest du dich nicht auch noch mit Zeigern rumschlagen, wo doch schon eine Membervariable so eine Herausforderung ist.


Anmelden zum Antworten