[VC++] Typenüberprüfung?

the incredible Leitman

Erfahrenes Mitglied
Hallo Leute :)

Ich möchte folgendes bewerkstelligen und hoffe, ihr habt Ideen oder leistet mir Erste Hilfe:
Habe ein CustomControl erstellt, das als Basisklasse für andere Controls gelten soll.
Jetzt soll jedesmal, falls zur Laufzeit ein falscher Wert an das Control übergeben wird, keine Fehlermedlung erscheinen sondern einfach die Übergabe ignoriert und ein standartwert gespeichert werden!
Ist das halbwegs klar :confused:

ungefähr sowas:
Code:
...
System::Windows::Forms::Label^  m_label1; // for Text
...
// TextLabel Property
public:
[
	Category("ZLSControl Properties"),
	Description("Sets, if the Text is visible"),
	DefaultValue("false")
]
property bool ZLSTextVisible
{
	bool get()
	{
		return this->m_label1->Visible;
	}
	void set(bool value)
	{
		// Falls value keinen bool wert hat, => Visible = false
		if (value.GetType() != m_label1->Visible.GetType())
			this->m_label1->Visible = false;
		this->m_label1->Visible = value;
	}
}
Aber so funktioniert das halt nicht... :(
Kann ich das irgendwie lösen, oder muss ich gar nicht?
Ist die Typenüberprüfung schon so strikt in MSVS 2005, dass ich gar keinen falschen Wertetypen mehr übergeben kann?

Bitte Hilfe ;-(
 
leitman hat gesagt.:
Hallo Leute :)

Ich möchte folgendes bewerkstelligen und hoffe, ihr habt Ideen oder leistet mir Erste Hilfe:
Habe ein CustomControl erstellt, das als Basisklasse für andere Controls gelten soll.
Jetzt soll jedesmal, falls zur Laufzeit ein falscher Wert an das Control übergeben wird, keine Fehlermedlung erscheinen sondern einfach die Übergabe ignoriert und ein standartwert gespeichert werden!
Ist das halbwegs klar :confused:

ungefähr sowas:
Code:
...
System::Windows::Forms::Label^  m_label1; // for Text
...

// TextLabel Property
public:
[
	Category("ZLSControl Properties"),
	Description("Sets, if the Text is visible"),
	DefaultValue("false")
]
property bool ZLSTextVisible
{
	bool get()
	{
		return this->m_label1->Visible;
	}
	void set(bool value)
	{
		// Falls value keinen bool wert hat, => Visible = false
		if (value.GetType() != m_label1->Visible.GetType())
			this->m_label1->Visible = false;
		this->m_label1->Visible = value;
	}
}
Aber so funktioniert das halt nicht... :(
Kann ich das irgendwie lösen, oder muss ich gar nicht?
Ist die Typenüberprüfung schon so strikt in MSVS 2005, dass ich gar keinen falschen Wertetypen mehr übergeben kann?

Bitte Hilfe ;-(

//EDIT: 11:10
Code:
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
	this->zlsControl_W2RU1->ZLSTextVisible = Convert::ToBoolean(this->textBox1->Text);
}
doch, so gehts :eek: Ich kann in ein Textfeld, "true" oder "false" eingeben,dann passt alles, aber sobald ich einen anderen Wert eingebe, stürzt das Programm ab :(

Kann ich irgendeine Typenüberprüfung direkt in meinem Control einbaun? geht das?
und wenn ja, wie sieht das ungefähr aus?

Grüße, der verplante Leitman :confused:
 
Hi.

Versuch's mal so:
C++:
bool val;
try {
  val = Convert::ToBoolean(this->textBox1->Text);
} catch (System::FormatException*) {
  val = false; // textBox1->Text war nicht System::Boolean::TrueString bzw. System::Boolean::FalseString
}
Gruß
 
deepthroat hat gesagt.:
Hi.

Versuch's mal so:
C++:
bool val;
try {
  val = Convert::ToBoolean(this->textBox1->Text);
} catch (System::FormatException*) {
  val = false; // textBox1->Text war nicht System::Boolean::TrueString bzw. System::Boolean::FalseString
}
Gruß

Ja, Danke so gehts, aber das war mir klar ;-)
Ich suche aber nach einer Möglichkeit, das direkt in den CustomControl Properties implementieren zu können, da ich viele viele Controls habe und jedesmal wenn ich einen Wert übergebe sonst direkt schaun muss, ob er legal ist!

Gehts das?

mfG
der Leitman

//EDIT: 11:52
Ahja, und in MSVS 2005 gibt es kein * mehr für managed, das ist jetzt ^
also catch (System::FormatException^) ;)
 
Wenn du alle deine Properties als Object deklarieren würdest, dann könntest du zuweisen was du willst. Denn leider lassen sich Properties nicht wie Methoden überladen.

/edit: Obwohl, in C++.NET kenn ich mich nicht aus. Evtl. kannst du ja die set Methode der Property doch überladen?
C++:
property bool ZLSTextVisible
{
	bool get()
	{
		return this->m_label1->Visible;
	}
	void set(bool value)
	{
		this->m_label1->Visible = value;
	}
        void set(String value) {
           try { ... }
        }
}

Gruß
 
Zuletzt bearbeitet:
hm... Danke, werd ich probieren, meld mich wieder!
Bin aber zurzeit ziemlich im Stress, kann sein, dass es noch dauert, bis ich das ausprobiert habe!

Thx Pro

keep it real
Leitman
 
Zurück