Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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 :(

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?!

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.

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

... ich brauch diese abgeleitete Klasse gar nicht...

für diejenigen, die's interessiert wie das mit dem TabControl funktioniert - hier

http://docs.rinet.ru:8083/SeeDDB/vcg11.htm#E69E186

hab ich die Lösung gefunden...

Grüße,

Technician :)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.