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)