2009-08-10 9 views
0

J'ai une demande de formulaire de VS2005 C un adaptateur de table et une zone de texte qui affiche les données d'une colonne spécifique. Ce que je veux faire est d'avoir changé sa couleur si le contenu est> 0 ou < 0. J'ai essayé d'ajouter ceci:Changer la couleur d'une zone de texte en fonction de son contenu

if(this->CSumTextBox->TabIndex<0) 
{ 
    this->CSumTextBox->ForeColor = System::Drawing::Color::Red; 
} 

Mais ça ne fonctionne pas ... (je ne croyais pas vraiment TabIndex était la fonction correcte, mais il semblait le seul à fermer) Aide s'il vous plaît

Editer: CSum est un double. Voici le code entier pour CsumTextBox:

// 
// CSumTextBox 
// 
this->CSumTextBox->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Bottom | System::Windows::Forms::AnchorStyles::Left)); 
this->CSumTextBox->BackColor = System::Drawing::SystemColors::Window; 
this->CSumTextBox->DataBindings->Add((gcnew System::Windows::Forms::Binding(L"Text", this->sumclosedpnlBindingSource, L"CSum", true))); 
this->CSumTextBox->Location = System::Drawing::Point(214, 632); 
this->CSumTextBox->Name = L"CSumTextBox"; 
this->CSumTextBox->Size = System::Drawing::Size(86, 20); 
this->CSumTextBox->TabIndex = 7; 

Il est dans l'en-tête de forme (tout le programme est une interface graphique, donc presque tout est là-dedans ...)

Edit: Peut-être que si je vérifie La valeur de la source de liaison de données fonctionnerait, mais comment puis-je faire cela? (Est-ce un this->sumclosedpnlBindingSource->returnvalue(CSum) ou quelque chose comme ça existe?)

+0

est CSumTextBox le nom de la variable réelle? Cela ressemble plus à un nom de classe. – DeusAduro

Répondre

3

Que voulez-vous dire par là:

... ont la couleur changé si le contenu est>) ...

Pour obtenir l'accès au contenu de la zone de texte, utilisez sa propriété Text. Pour tester une valeur numérique, vous devez le convertir en un entier (ou tout autre type de numéro) premier:

int value = System::Int32::Parse(CSumTextBox->Text); 

if (value < 0) 
    CSumTextBox->ForeColor = System::Drawing::Color::Red; 
+0

désolé signifiait> 0 (faute de frappe ...) J'ai essayé, j'ai essayé aussi une petite variation (valeur double = System :: Double :: Parse (this-> CSumTextBox-> Texte), si (valeur < 0) {this-> CSumTextBox-> ForeColor = System :: Drawing :: Color :: Red;}) mais cela me donne un FormatException – Ant

+0

Eh bien, le 'FormatException' dit clairement que votre' TextBox' ne contient pas un nombre à virgule flottante valide –

+0

Si c'est le cas ?. que pouvais-je faire – Ant

0
int val = -1; 
if(!Int32::TryParse(CSumTextBox->Text) || val != 0) 
{ 
    CSumTextBox->ForeColor = System::Drawing::Color::Red; 
} 

Cela vérifiera que la valeur dans la zone de texte il convertit en un entier, et que la valeur est 0.

+0

Vous avez oublié un '%^val' comme second paramètre à' TryParse' –

+0

... ce que je voulais dire: une référence de suivi ... quelle que soit la syntaxe pour elle (ne me souviens pas) –

+0

je suis. sûr que vous avez raison, mais je n'écrire géré C++ j'étais tellement juste l'improvisation. :) – moswald

Questions connexes