Par exemple, dans un programme MFC, j'ai ma principale application et une 'classe'. Que dois-je faire si je veux mettre à jour un contrôle (par exemple, une zone de liste) situé sur mon application principale à partir de cette 'classe'?Comment mettre à jour un contrôle en dehors d'un dialogue?
Répondre
Votre classe peut être conçue pour déclencher un événement que votre application principale peut écouter. Ensuite, un écouteur/gestionnaire d'événements/délégué peut être appelé pour gérer l'événement et mettre à jour la liste. En règle générale, la plupart des formats d'événements transmettent une référence de l'expéditeur, dans ce cas votre «classe», ainsi qu'un objet contenant des arguments d'événement. Ces arguments peuvent être utilisés pour transmettre la liste des éléments que vous souhaitez ajouter à votre listbox.
Si vous avez l'objet handle to dialog dans votre classe, vous pouvez utiliser GetDlgItem(ResourceID) pour obtenir l'objet de contrôle de liste.
Cela s'applique uniquement aux contrôles dans les boîtes de dialogue - pas dans les fenêtres principales. –
Mais la documentation MSDN dit que le premier paramètre (handle de fenêtre) n'a pas besoin d'être une boîte de dialogue. – Naveen
L'approche la plus simple consiste à exposer la liste à partir de votre formulaire/fenêtre d'application aux classes qui l'utilisent. Vous pouvez le faire en passant l'objet listview (ou la fenêtre parente) au constructeur de la classe, ou en le stockant dans une variable statique accessible par la classe.
Pour une meilleure encapsulation, vous pouvez mettre une méthode dans l'application que la classe peut appeler, par ex. "AddItemToListBox()". Cela permet à l'objet application de conserver le contrôle de l'accès à la liste. Encore une fois, vous pouvez le faire comme une méthode statique, ou passer le pointeur «this» de l'objet principal dans le constructeur de la classe.
à savoir
class CApplication
{
CListBox m_ListBox;
public:
static void CApplication::AddItemToListBox(CString itemText)
{
// Add the item as you wish here
}
}
class CMyClass
{
afx_msg void CMyClass::OnMouseDown(...)
{
CApplication::AddItemToListBox("This is a test");
}
}
Heres un exemple qui a fonctionné pour moi
theApp.m_pMainWnd->GetDlgItem(IDC_BUTTON6)->SetWindowTextW(L"Run Auto Test");
- 1. Comment pouvez-vous mettre un contrôle à l'avant en mfc
- 2. Comment mettre à jour datagridview
- 3. Comment mettre à jour un nœud XML?
- 4. Comment mettre à jour un dataset en utilisant datagridview?
- 5. Comment mettre à jour mysql?
- 6. Mettre à jour le contrôle DataGrid WinForm dans .Net 2003
- 7. Comment insérer/supprimer/mettre à jour dans un arbre ordonné
- 8. Comment mettre à jour à Ruby 1.8.7
- 9. Comment utiliser AJAX pour mettre à jour un contrôle utilisateur simple?
- 10. LINQ mettre à jour un XDocument
- 11. Mettre à jour un programme d'installation
- 12. Comment mettre à jour le code PowerBuilder?
- 13. Comment mettre à jour ce code
- 14. Zend_Db Question ... mettre à jour un incrémenteur
- 15. Comment mettre à jour en utilisant la valeur dropdownlist
- 16. Comment mettre à jour un MapView avec une adresse?
- 17. Comment mettre à jour une table relationnelle?
- 18. Comment mettre à jour le chemin MATLAB?
- 19. Comment mieux mettre à jour un site Web de subversion
- 20. Quelles autorisations sont nécessaires pour installer et mettre à jour un contrôle ActiveX?
- 21. Comment mettre à jour un élément existant d'une ObservableCollection?
- 22. Comment mettre à jour une ligne MySQL en PHP?
- 23. comment obtenir usercontrol pour mettre à jour
- 24. Mettre à jour plusieurs lignes
- 25. Comment mettre à jour une table automatiquement?
- 26. Comment contourner le besoin de mettre à jour un dictionnaire
- 27. Comment mettre à jour un fichier Jar préexistant?
- 28. Mettre à jour le tableau avec un processus multithread et mettre à jour certaines lignes en fonction de la priorité
- 29. Comment mettre à jour un jointable dans CakePHP, manuellement
- 30. Comment puis-je mettre à jour ScriptManager à partir d'un contrôle d'utilisateur Web .ascx dans DNN?
Comment puis-je faire cela? Désolé, juste un débutant ici. –
Soviut parle en termes de C#, pas de MFC. –
Jason a raison. Je fais de mon mieux pour vous donner l'essentiel sur la façon de communiquer entre deux entités distinctes. Dans le monde C#/ActionScript/Java, cela signifie généralement utiliser des événements personnalisés. – Soviut