Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

wie kann ich eigentlich auf Steuerelemente meines TabControls zugreifen?

Beispiel:

Ich hab ein TabControl mit zwei Tabs, jedes enthält zwei Edit-Felder.

Die einzelnen Tabs sind dabei Dialogfenster.

Wenn ich jetzt auf einen (nicht auf dem TabControl gelegenen!) Button klicke, soll eine Membervariable des ersten Tabs gesetzt werden und dementsprechend das Edit-Feld befüllt werden.

Angezeigt wird mir das TabControl mit den enthaltenen Dialogfenstern bereits richtig.

In

void CMeinPRogrammView::OnButton1()

greife ich mit

TC_ITEM item;

m_TabControl.GetItem(0, &item);

auf das TabControl und hier auf den ersten Tab zu.

Aber wie greife ich jetzt auf das Dialogfeld zu - da muss ich ja die Membervariable setzen...?!:rolleyes:

:confused:

Grüße,

Technician

Geschrieben

wenn ich das jetzt so schreibe, wird mein Dialogfenster gar nicht mehr im Tab angezeigt...

:confused:


void CMeinProgrammView::OnInitialUpdate()

{

      CFormView::OnInitialUpdate();

      ResizeParentToFit();


      CTabOne* to = new CTabOne;


      TC_ITEM item;

      item.lParam = (LPARAM) to;	

      item.pszText = _T("Tab #1");

      m_TabControl.InsertItem(0, &item);



}

Please help

Technician

Geschrieben
Originally posted by Klotzkopp

Du musst die Maske der TCITEM-Struktur setzen, damit die Methode weiß, welche Teile der Struktur gültige Daten enthalten.

item.mask = TCIF_TEXT | TCIF_PARAM;

... der Titel-Text des Tabs wird angezeigt - der Steuerelemente-Dialog des Tabs nicht :(

Geschrieben
Originally posted by Klotzkopp

Seltsam. Hast Du noch was anderes geändert? Wie hast Du die Tabs vorher hinzugefügt?

... vorher war das mit einer von CTabCtrl abgeleiteten CMyTabCtrl gelöst - allerdings nicht von mir programmiert, sondern aus nem "Übungsbeispiele-Fundus".



class CMyTabCtrl : public CTabCtrl

{

// Construction

public:

	CMyTabCtrl();

	CDialog *m_tabPages[3];

	int m_tabCurrent;

	int m_nNumb


public:

	CMyTabCtrl();

	CDialog *m_tabPages[3];

...


CMyTabCtrl::CMyTabCtrl()

{

	m_tabPages[0]=new CTabOne;

	m_tabPages[1]=new CTabTwo;

	m_tabPages[2]=new CTabThree;


	m_nNumberOfPages=3;

}


CMyTabCtrl::~CMyTabCtrl()

{

	for(int nCount=0; nCount < m_nNumberOfPages; nCount++){

		delete m_tabPages[nCount];

	}

}


void CMyTabCtrl::Init()

{

	m_tabCurrent=0;


	m_tabPages[0]->Create(IDD_TAB_ONE, this);

	m_tabPages[1]->Create(IDD_TAB_TWO, this);

	m_tabPages[2]->Create(IDD_TAB_THREE, this);


	m_tabPages[0]->ShowWindow(SW_SHOW);

	m_tabPages[1]->ShowWindow(SW_HIDE);

	m_tabPages[2]->ShowWindow(SW_HIDE);


}





ganz normal das TabControl auf die View gemalt; View hat Attribut CTabCtrl m_TabControl das zum TabControl gehört; TabOne ist ein Dialogfenster...

Aaaber, mir ist jetzt grad was aufgefallen, was mir seeeehr spanisch vorkommt:

in OnInitialUpdate, also da wo ich das TabControl "füllen" will, zeigt mir der Debugger für die Zeile

CTabOne* pTo = new CTabOne;

das hier an:

pTo 0x013420a0 CDialog hWnd 0x00000000;

kommt mir komisch vor :eek:

im Header der View-Klasse steht CTabOne* pTo;

und im Konstruktur steht pTo = new CTabOne();

müsste doch normalerweise korrekt sein, oder?!

Geschrieben
Originally posted by Technician

pTo 0x013420a0 CDialog hWnd 0x00000000;

kommt mir komisch vor :eek:

Das ist normal. Eine Fensterklasse hat erst nach dem Create ein gültiges Handle.

Aber wenn Du jetzt diese abgeleitete Klasse nicht mehr benutzt, ist auch klar, warum die Dialog nicht mehr angezeigt werden: Ein gewöhnliches CTabCtrl besteht nur aus den Tabs selbst. Um die Darstellung der Dialoge musst Du Dich selbst kümmern. Wahrscheinlich hat das diese Klasse aber für Dich gemacht.

Geschrieben
Originally posted by Klotzkopp

Ein gewöhnliches CTabCtrl besteht nur aus den Tabs selbst. Um die Darstellung der Dialoge musst Du Dich selbst kümmern. Wahrscheinlich hat das diese Klasse aber für Dich gemacht.

Aha *erstaunt-bin*

Da wär ich nie und nimmer drauf gekommen.

Um ein TreeControl verwenden zu können, muss man ja auch nicht eine Klasse davon ableiten.

Danke! :)

Technician

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...