litlein
09.04.2010, 12:17
Hallo,
ich will den Text eines Labels außerhalb der Form1 Klasse, z.B. in der main()-Funktion ändern.
Ausgangslage: Ein einfaches label auf der Form. Dann den Modifier des labels auf "Public" gesetzt.
Der Code:
Mainfunktion
// Hauptfenster erstellen und ausführen
Form1 ^f1 = gcnew Form1();
Application::Run(f1);
f1->label1->Text = "Hallo";
f1->setLabel1("Hi");
Dann die Form1:
#pragma once
namespace abc {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
}
protected:
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
public: System::Windows::Forms::Label^ label1;
protected:
private:
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
void InitializeComponent(void)
{
this->label1 = (gcnew System::Windows::Forms::Label());
this->SuspendLayout();
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(109, 84);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(35, 13);
this->label1->TabIndex = 0;
this->label1->Text = L"label1";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Controls->Add(this->label1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);
this->PerformLayout();
}
//Die eigene Funktion zum verändern des Labels, der rest ist unverändert
public: void setLabel1(System::String ^abcde)
{
this->label1->Text = abcde;
}
#pragma endregion
};
}
Bei dem ganzen Code kommen keine Fehlermeldungen. Das label bleibt nur auf dem Standartwert "label1" stehen, also es verändert sich nicht.
Laut googlesuche sollte beides, einmal die Möglichkeit mit der funktion und das publik setzen und direkte Aufrufen funktionieren...
Gibt es noch andere Möglichkeiten?
ich will den Text eines Labels außerhalb der Form1 Klasse, z.B. in der main()-Funktion ändern.
Ausgangslage: Ein einfaches label auf der Form. Dann den Modifier des labels auf "Public" gesetzt.
Der Code:
Mainfunktion
// Hauptfenster erstellen und ausführen
Form1 ^f1 = gcnew Form1();
Application::Run(f1);
f1->label1->Text = "Hallo";
f1->setLabel1("Hi");
Dann die Form1:
#pragma once
namespace abc {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
}
protected:
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
public: System::Windows::Forms::Label^ label1;
protected:
private:
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
void InitializeComponent(void)
{
this->label1 = (gcnew System::Windows::Forms::Label());
this->SuspendLayout();
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(109, 84);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(35, 13);
this->label1->TabIndex = 0;
this->label1->Text = L"label1";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Controls->Add(this->label1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);
this->PerformLayout();
}
//Die eigene Funktion zum verändern des Labels, der rest ist unverändert
public: void setLabel1(System::String ^abcde)
{
this->label1->Text = abcde;
}
#pragma endregion
};
}
Bei dem ganzen Code kommen keine Fehlermeldungen. Das label bleibt nur auf dem Standartwert "label1" stehen, also es verändert sich nicht.
Laut googlesuche sollte beides, einmal die Möglichkeit mit der funktion und das publik setzen und direkte Aufrufen funktionieren...
Gibt es noch andere Möglichkeiten?