2009-03-07 1 views
0

J'ai écrit un ListView étendu dans C# WinForms. Son but est d'afficher une liste des applications en cours d'exécution en utilisant le WinAPI. Cependant, si j'essaye de peupler le ListView dans le constructeur cela fonctionne quand j'exécute l'application, mais si vous essayez de mettre le contrôle sur n'importe quelle forme il écrasera VS 2008.Quelle méthode ou quel événement dois-je utiliser pour pré-remplir un ListView étendu?

La raison de l'accident est je crois causé par l'utilisation de ThreadPool ou l'utilisation d'appels P/Invoke. J'ai essayé de l'emballer dans un conditionnel pour vérifier la propriété DesignMode, mais j'ai découvert que retournera toujours false dans le constructeur. Pour résoudre mon problème, j'ai remplacé la méthode InitLayout de la classe de base ListView et y ai ajouté mon code de population, mais je ne pense pas que ce soit le meilleur endroit pour le mettre.

Est-ce que quelqu'un sait où le meilleur endroit pour mettre mon code de pré-population dans un ListView étendu?

Merci!

Voici ce que le correctif ressemble:

protected override void InitLayout() 
{ 
    if (DesignMode) 
     return; 

    RefreshApplications(); 

    base.InitLayout(); 
} 

Répondre

2

Utilisez cette option pour distinguer entre le mode de conception et le fonctionnement Application:

if (LicenseManager.UsageMode != LicenseUsageMode.Designtime) 
{ 
} 
Questions connexes