Autor Beitrag
Hobbyprg
Hält's aus hier
Beiträge: 7


VS C# 2008
BeitragVerfasst: Sa 07.02.09 20:36 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 08.02.09 12:43 
Noch zur Erläuterung:
user profile iconHobbyprg hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 7


VS C# 2008
BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 11.02.09 23:14 
Im Grunde hast du es doch schon gesagt. ;-)
ausblenden 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.
ausblenden 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:
msdn.microsoft.com/d...ibrary/ah19swz4.aspx
Dann kannst du einen struct mit allen dazugehörigen Werten benutzen.
Hobbyprg Threadstarter
Hält's aus hier
Beiträge: 7


VS C# 2008
BeitragVerfasst: 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.