Laden...

Zugriff auf Form durch String

Erstellt von reloop vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.627 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren
Zugriff auf Form durch String

Hallo,

erstmal Pardon für das evtl. nicht wirklich sprechende Thema, mir ist jedoch keine wirkliche (kurze) Umschreibung eingefallen.

Und zwar habe ich folgendes Problem:

Ich habe auf meiner "Form" ein Objekt welches den Namen "txtEinkauf" besitzt.

Angenommen ich habe einen String mit dem Inhalt "txtEinkauf" - wie schaffe ich es nun mithilfe dieser Variable auf das Objekt zuzugreifen? Quasi:

myString = "txtEinkauf";
getElementByName(myString).Text = "Text für das Feld txtEinkauf";

Hintergrund ist folgender, dass ich über eine seperate Klasse steuer, welche Objekte auf der Form Pflichtfelder sind und welche nicht. Und die Verwalte ich in einer XML - Datei. Somit möchte ich vor dem speichern prüfen, ob die (vorher über die Einstellungen definierten ) Pflichtfelder auch einen Wert enthalten.

Danke für eure Hilfe,

cs.

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo cs.,

hast du noch nie Binding probiert, dort bindes du ein Objekt an die GUI und dann kannst du wenn du willsch entweger in der Klasse selbst ein CheckCorrectness einbauen, oder du arbeitest mit MultiValidatoren.
Und lies dir mal WPF Tutorials durch. Allgemein sollte die Datenklasse NICHTS von der GUI wissen, sie soll ja nicht mal wissen dass die GUI existiert.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

Wenn ich meinem Anwender die Möglichkeit bieten möchte, selbst zu entscheiden, welche Elemente einer Maske Pflicht sind und welche nicht, läuft es doch zwangsläufig darauf hinaus dass meine Klasse wissen muss, welche Objekte sich auf der Form befinden?

Bzw. diese Infos aus einer anderen Quelle (in dem Fall XML) bezieht.

Danke für deine Hilfe!

1.552 Beiträge seit 2010
vor 13 Jahren

Wenn ich meinem Anwender die Möglichkeit bieten möchte, selbst zu entscheide Dies wird aber m.e. aber nicht mit einer direkten Verbindung der Klasse mit den Namen der Elemente der GUI gelöst, sondern über z.b. wie du selbst sagtest eine XML File in der du z.b ein Element IsSurnameNeeded hineingibst und in deinem Programm den Wert des Element ausliest. Der Benutzer kann dann durch eine von dir programmierte Form diese Minimaleingaben in den Optionen festlegen oder auch direkt die Werte in der XML-File ändern.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

Ich steh gerade etwas auf dem Schlauch, wie sage ich meiner XML Datei denn, das z.B. das Feld txtEinkauf nicht leer sein darf - und lasse das durch die Form prüfen?

Ich bin folgenden Weg gegangen:

Es existiert eine DLL, die eine XML Datei einliest und in folgendes Format überträgt:

(Klasse: CheckItem)
ObjektName: "txtEinkauf"
Pflichtfeld: true
Meldung: "Individuelle Fehlermeldung bei leerem Eingang vom Kunden"

Jetzt instanziere ich die DLL in meiner EXE und bekomme von dieser eine List<CheckItem> geliefert, wo sich auch mein txtEinkauf wiederfindet.

Jetzt würde ich entweder gerne

  1. ) direkt in der Form ein MaskePrüfen() einbauen, mit folgendem ablauf: (In Pseudecode gesprochen)

for each item in List<CheckItem>
Prüfe ob das Objekt mit dem Name "ObjektName" gefüllt ist
wenn nicht, darf nicht gespeichert werden

oder

2.) Ich übergebe die Form an meine DLL und Prüfe dort die Elemente.

Ich hoffe du kannst mir folgen - und meine Gedankengänge sind nicht allzu verwirrend.

Danke nochmal, für deine Mühe.

Gruss

1.552 Beiträge seit 2010
vor 13 Jahren

Du sprichst dich zwar klar aus, jedoch ist es nicht nachvollziehbar warum du diesen Weg einschlägst.

Kurze schematische Darstellung wie man es machen könnte:

FORM
|
Databinding,Validation
|
Datenklasse

Die Datenklasse kann die XML lesen und sieht dort Welche Eigenschaften gesetzt werden müssen.

public class Foo
{
    public string Property1{get;set;}
    public string Property2{get;set;}
    public bool CheckCorrectness()
    {
        if(XML.IsProperty1Required)
            if(string.IsNullOrEmpty(Property1)
                //do something
            if(string.IsNullOrEmpty(Property2)
               ......
    }
}

Wie du siehts weiß die Foo klasse nichts von der Gui dank der Datenbindung die noch zu implementiernen ist. (Ich hoffe du bist mit diesem Thema minimal vertraut, denn dann ist es kein Problem dies zu erstellen)

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

Verstanden!

Dies würde aber vorraussetzen, dass meine Datenklasse alle Eigenschaften enthält, die ich später auf der Form ausgeben möchte, richtig?

Alles klar, danke für den Weg. Macht natürlich mehr Sinn und ist wesentlich einfacher später bei der Verarbeitung.

Ich muss mein Grundkonzept an der Stelle nochmal überdenken, aber ich weiß nun in welche Richtung es geht.

Zu meiner Anfänglichen Frage; ist es denn überhaupt möglich über einen String auf das Element zu kommen?

(Nur zum Verständnis)

myElement = "txtTest"
this.GetElement(myElement).getType().getProperty("Text").ToString()

oder ähnlich..?

Danke für deine Hilfe ( .. und Geduld!)

Gruss

1.552 Beiträge seit 2010
vor 13 Jahren

Dies würde aber vorraussetzen, dass meine Datenklasse alle Eigenschaften enthält, die ich später auf der Form ausgeben möchte, richtig?

Ja richtig

Zu meiner Anfänglichen Frage; ist es denn überhaupt möglich über einen String auf das Element zu kommen?

Ja, aber in deiner Situation eigentlich nicht nötig.
Find Control by name

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

War auch nur rein aus Interesse! Habe jetzte eine Datenklasse geschrieben, die dass ganze mit der XML Datei verarbeitet.

Vielen Dank für deine schnelle Hilfe!