IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ C++/CLI et VC++.Net

FAQ C++/CLI et VC++.NetConsultez toutes les FAQ

Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013 

 
OuvrirSommaireIntéraction du C++/CLI avec le framework .NetWinFormsLabel

Il n'est pas possible d'écrire le texte d'un label avec plusieurs couleurs par défaut, mais on peut y arriver en créant un nouveau contrôle qui dérive de Label et en surchargeant la méthode OnPaint.

Tout d'abord, créer une classe dérivée de Label et surcharger OnPaint :

 
Sélectionnez
ref class MonLabel : public System::Windows::Forms::Label
{
protected:
	virtual void OnPaint(PaintEventArgs ^e) override
	{
		array<Drawing::Brush ^> ^mesCouleurs = { Brushes::Red, Brushes::Orange, Brushes::Green, Brushes::Blue};
		int br = 0;
		String ^chaine = Text;
 
		List<String ^> ^listString = gcnew List<String ^>();
		StringBuilder ^sb = gcnew StringBuilder();
		for (int i = 0 ; i < chaine->Length ; i++)
		{
			if (chaine[i] == ' ' || chaine[i] == '\'')
			{
				if (chaine[i] == '\'')
					sb->Append(chaine[i]);
				listString->Add(sb->ToString());
				sb = gcnew StringBuilder();
			}
			else
				sb->Append(chaine[i]);
		}
		listString->Add(sb->ToString());
 
		float startX = 0;
		for each (String ^s in listString)
		{
			e->Graphics->DrawString(s, Font, mesCouleurs[br], startX, 0);
			startX += e->Graphics->MeasureString(s, Font).Width;
			br++;
			if (br >= mesCouleurs->Length)
				br = 0;
		}
		Width = (int)startX;
	}
};

Ici, j'ai choisi de changer de couleur à chaque espace trouvé ou à chaque ' trouvée. J'utilise DrawString pour écrire la partie de mot avec la couleur choisie, et je n'oublie pas de mesurer sa taille pour écrire la partie de mot suivante.
Il faut également adapter la taille du contrôle à la nouvelle taille du texte.

Ensuite, il ne reste plus qu'à utiliser notre contrôle, par exemple dans le constructeur :

 
Sélectionnez
MonLabel ^ monLabel = gcnew MonLabel();
AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
monLabel->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.0F, System::Drawing::FontStyle::Regular, 
		System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0)));
monLabel->Text = "Je m'appelle Nico-pyright(c)";
this->Controls->Add(monLabel);
Créé le 9 octobre 2008  par nico-pyright(c)

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.