Entwickler-Ecke
WinForms - Dialogfeld initialisieren
Hobbyprg - Sa 07.02.09 20:36
Titel: Dialogfeld initialisieren
Hi 8)
Mal ne Anfängerfrage.
Bin von Delphi auf Visual C# umgestiegen.
Möchte jetzt ein Dialogfeld mit Daten voreinstellen und dann anzeigen.
Bei der Zeile
C#-Quelltext
1:
| Projekt.Label.Text = Program.PDaten[Program.x].Name; |
Projekt = Instanz von Form2.
im Code des Menüpunktes in Form1
erscheint die Meldung "Zugriff aufgrund der Sicherheitsebene nicht möglich"
Hab ich da einfach nur irgendwo ein public vergessen oder
muß ich das anders realisieren?
Ich hoffe, man versteht was ich meine :roll:
jaenicke - Sa 07.02.09 21:31
Du solltest z.B. einen Setter benutzen, d.h. eine public Methode SetIrgendwas, der du die Daten übergibst. Dann hast du das Problem nicht und kannst nebenbei auch bspw. den Label gegen etwas anderes austauschen ohne beim Ansprechen der Form von außen etwas ändern zu müssen.
JüTho - So 08.02.09 12:43
Titel: Re: Dialogfeld initialisieren
Noch zur Erläuterung:
Hobbyprg hat folgendes geschrieben : |
Hab ich da einfach nur irgendwo ein public vergessen oder
muß ich das anders realisieren? |
Controls innerhalb eines Formulars sind grundsätzlich
private deklariert und sind deshalb nach außen hin nicht sichtbar, auch nicht für das erzeugende Formular. Das könnte zwar geändert werden, würde aber den Bedingungen der OOP widersprechen (Kommunikation zwischen Klassen erfolgt über Schnittstellen; hier macht sich bemerkbar, dass Delphi nur teilweise nach OOP arbeitet).
Du benötigst ein
public-Element in Form2 als Schnittstelle gegenüber Form1. Das kann eine Eigenschaft/Property sein, die den übergebenen Text direkt in das betreffende Label schreibt, oder (wie Sebastian vorschlägt) eine Methode. Die Methode ist vor allem dann praktischer, wenn mehrere Angaben festgelegt werden sollen.
Gruß Jürgen
Hobbyprg - Mi 11.02.09 22:31
Ok - hab mal probiert, da das alles noch etwas neu für mich ist.
Also hab jetzt in Form 2 als Test für ein Label mal folgenden Code eingesetzt
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| public string QText { get { return labQ.Text; } set { labQ.Text = value; } } |
und es funktioniert 8)
Tja :roll:
und wie mach ich das jetzt in einer Methode? -
hierbei kann ich ja jeweils nur ein Wert ändern.
Kann ich alle Werte auch in einem "Wisch" einstellen?
Also ne Methode a la "SetDlgData" und "GetDlgData"
schwebt mir da irgendwie vor.
Oder packe ich da alle getter und setter in eine Methode
und rufe die nach dem Muster Methode.(Setter/Getter) = Wert; auf?.
Bräuchte da noch mal ein Denkanstoss. :oops:
jaenicke - Mi 11.02.09 23:14
Im Grunde hast du es doch schon gesagt. ;-)
C#-Quelltext
1: 2: 3: 4: 5:
| public SetDlgData(string paramX, string paramY) { labQ.Text = paramX; ... paramY } |
Zum Zurückgeben mehrerer Werte kannst du diese zum Beispiel als Referenz mit dem Zusatz out übergeben.
C#-Quelltext
1: 2: 3: 4: 5:
| public GetDlgData(out string paramX, out string paramY) { paramX = labQ.Text; paramY = ... } |
Beim Aufrufen übergibst du dann Variablen, in denen die Werte gespeichert werden sollen.
Oder du benutzt structs:
http://msdn.microsoft.com/de-de/library/ah19swz4.aspx
Dann kannst du einen struct mit allen dazugehörigen Werten benutzen.
Hobbyprg - Do 12.02.09 13:06
Mit einem struct hatte ich mir das auch gedacht.
Den struct hab ich eigentlich schon.
Jetzt muß ich das nur noch zusammenbasteln.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!