Forum: PC-Programmierung Vb.Net Auf Propertys Referenzieren?


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Profis,
ich versuche derzeit eine art "Bearbeiten-Rückgängig"-Funktion zu 
implementieren. Jeder Benutzer-Vorgang (z.B. Setzen eines Propertys) 
soll per Klick wieder Rückgängig gemacht werden können)

Das eigentliche Problem bei der Sache ist nun, dass ich keine simple 
Möglichkeit finde, aus einer Property-SetMethode, dieses besagte 
Property "an sich" in einen Paremeter einer anderen Methode zu 
übergeben. In einem kleinen Test habe ich das dann mit "ByRef" versucht, 
was auch funktioniert, jedoch nicht aus einem Property-Setter herraus.

Zum Screenshoot: Was ich vor habe, ist es, z.B. das 'Name'-Property aus 
dem oberen PropertyGrid (der UserClass) in eine Property-Value von 
EventLogEntry (dem unteren PropertyGrid) zu bekommen.

Abschnitt:
1
Private _Name As String = "UserClass"
2
Public Property Name As String
3
   Get [...] End Get
4
   Set(ByVal value As String)
5
      [...]
6
      Dim Entry As EventLogEntrys = New EventLogEntry(Me, Name, [...])
7
      _Name = value
8
   End Set
9
End Property
1
Warnung  1 Der Ausdruck ruft rekursiv die enthaltende Name-Eigenschaft auf.

Ich hoffe das Bild ist selbsterklärend, und ihr wisst was gemeint ist.
Meine erste Idee ist, das mit 'PropertyInfos' zu lösen, oder mit dem 
'Type', aber muss man das? - macht man das so? - oder geht das irgendwie 
besser und eleganter?

Liebe Grüße, und danke schon mal im voraus.
TS

edit: Ich glaube die Überschrift des Threads trifft das Thema nicht so 
ganz. Wie nennt man das eigentlich?

: Bearbeitet durch User
von Hans (Gast)


Lesenswert?

Schau dir mal das Memento Pattern an.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hans schrieb:
> Schau dir mal das Memento Pattern an.

Memento- Das trifft´s! Ein Kompletter Klon macht natürlich Sinn. Ich 
wollte zuerst eigentlich nur den betroffenen geänderten Zustand eines 
Objektes zwischenspeichern, und nicht das ganze Objekt.

Timmey S. schrieb:
> Meine erste Idee ist, das mit 'PropertyInfos' zu lösen,

Es läuft jetzt mittlerweile auch mit 'Type' und 'PropertyInfo', aber 
einen direkten Klon werde ich auch mal versuchen.

Dankeschön
Gruß, TS

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Das wäre die Traum-Lösung, bei der das Property per Attribute 
weitergegeben wird:
1
Public Event PropertyChanged As PropertyChangedEventHandler _
2
       Implements INotifyPropertyChanged.PropertyChanged
3
4
Private Sub NotifyPropertyChanged(<CallerMemberName()> Optional ByVal propertyName As String = Nothing)
5
   RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
6
End Sub
7
8
Private NameValue As String = String.Empty
9
Public Property Name() As String
10
   Get
11
       Return NameValue 
12
   End Get
13
   Set(ByVal value As String)
14
           NameValue = value
15
           NotifyPropertyChanged()  ' <----- OK!
16
       End If
17
   End Set
18
End Property


Das geht aber leider erst ab Net4.5! Im 4er muss man den Namen der 
Property noch "manuell" übergeben - Dies wollte ich vermeiden:

1
Public Property Name() As String
2
   Get
3
       Return NameValue 
4
   End Get
5
   Set(ByVal value As String)
6
           NameValue = value
7
           NotifyPropertyChanged("Name")  ' <----- NoGo!
8
       End If
9
   End Set
10
End Property

Gruß, TS

von msgbox (Gast)


Lesenswert?

MsgBox((New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name)

MsgBox(System.Reflection.MethodBase.GetCurrentMethod.Name())

von Programmierer (Gast)


Lesenswert?

VB.NET benutzt man heutzutage nicht mehr. Such dir eine richtige 
Programmiersprache (also ohne .NET).

von Borislav B. (boris_b)


Lesenswert?

Programmierer schrieb:
> VB.NET benutzt man heutzutage nicht mehr. Such dir eine richtige
> Programmiersprache (also ohne .NET).

Fail.

von Hans S. (nettworker)


Lesenswert?

Programmierer schrieb:
> VB.NET benutzt man heutzutage nicht mehr. Such dir eine richtige
> Programmiersprache (also ohne .NET).

Ist da jemand, der .Net nicht mag?
Weil die Ausage Blödsinn ist ( Entschuldigung, aber ist so ), es gibt 
sogar Behörden und / oder Einrichtungen, die VS als Standard deklariert 
haben.

von Programmierer (Gast)


Lesenswert?

Hans S. schrieb:
> Weil die Ausage Blödsinn ist

Na wenn du das sagst...

Hans S. schrieb:
> es gibt
> sogar Behörden und / oder Einrichtungen, die VS als Standard deklariert
> haben.

Es gibt sogar Behörden und Einrichtungen die noch WinXP oder älteres 
benutzen. Die benutzen fast nur veraltete Sachen.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

msgbox schrieb:
> MsgBox(System.Reflection.MethodBase.GetCurrentMethod.Name())
Danke, genau das habe ich gesucht! Damit lässt sich 
"Bearbeiten-Rückgängig" ganz gut implementieren ("Vorher und Nachher" 
eines Propertys abspeichern), ohne das ganze Objekt sichern zu müssen...

Hans schrieb:
> Memento Pattern
Durch Memento Pattern wurde der Speicher sehr schnell voll [max ca. 50x 
UnDo´s], oder ich habe wohl irgend einen Fehler dabei gemacht. 
Jedenfalls Danke nochmal für die Tipps, vorallem für GetCurrentMethod.




_____
Programmierer schrieb:
> VB.NET benutzt man heutzutage nicht mehr.

@Programmierer:
Achso, ja ne, is klar - heutzutage...

Heutzutage "hängen" einem die Provider jedes Jahr ein neues Smartphone 
(oder ISP-Router) an die Backe. Heutzutage kommen viel zu viele Sachen 
gleichzeitig auf den Markt. Heutzutage kocht jeder sein eigenes 
Süppchen, und das Schaffen von gemeinsamen "Standards" wird fast 
vergessen. Heutzutage schaut erstmal jeder auf sich selbst. Heutzutage 
wird Korruption nicht mehr wirklich ernst genommen. Heutzutage kann man 
auch nichts mehr dagegen machen.

Programmierer schrieb:
> Such dir eine richtige Programmiersprache

Heutzutage ist Qualität nur noch eine Frage (-und keine Antwort mehr!). 
Denn als 'richtig' bezeichnet man heutzutage übrigens auch, lieber 
Analog-Käse oder Instant-Fleisch zu essen. Heutzutage halten die meisten 
Pop-Stars unserer Zeit nur noch ein Jahr lang. Heutzutage redet man 
Entwicklern beständige und bewährte Sachen aus - ganz egal ob diese nun 
super funktionieren, ihren Zweck erfüllen, oder (eventuell durch ihr 
Alter) extrem günstig zu beschaffen sind...

Programmierer schrieb:
> Es gibt sogar Behörden und Einrichtungen die noch WinXP oder älteres
> benutzen. Die benutzen fast nur veraltete Sachen.

...denn man soll heutzutage ja lieber was anderes / neues versuchen: 
z.B. die heutige Wegwerf-Gesellschaft unterstützen, sich immer wieder 
auf neue, und noch kürzere /sinn freie Beschäftigungen und 
Produkt-Lifetime´s einlassen, und schlicht das tun was andere sagen 
(oder meinen, oder glauben, oder... ): Aber darin wollte ich eigentlich 
keine Erfahrung sammeln!! (Wozu auch?) - Dann doch lieber VB. Und von 
mir aus auch das von MS/VS, weil es Spaß macht. Wenn es einen Couter 
geben würde, für Aussagen wie deine oben: "richtige Programmiersprache" 
- wie viele uInt64 hätten wir auf "modernen Systemen heutzutage" schon 
zum überlaufen gebracht??? Hängt das eigentlich irgendwie zusammen? Hat 
das eigentlich irgendwas mit dem Thread zu tun? Wer weiß denn schon, wie 
lange sich das noch verbreitet; - unterstützt, geupdated oder supported 
wird - heutzutage - oder erst in 3 Jahren?? WTF:
Deshalb bin ich ja (wieder) bei VB.NET gelandet... Ist das irgendwie 
Widersprüchlich? Interessiert dich das überhaupt?

Worauf ich hinaus wollte: Was denn für eine super-duper neue gute, und 
kostenlose, professionell supportende und ständig weiterentwickelte, - 
genau so komfortable, einfache und von einem breiten Spektrum an 
Personen gewollte, (mehr oder 
weniger)-Crossplattform-fähige-nicht-.Net-Alternative, die heutzutage 
als "richtig" anzusehen ist, meinst du denn genau???

QT oder was? Du hast es ja noch nicht mal erwähnt!!!?? Aber interessiert 
mich das??? NEIN!

Was ist eigentlich so schwer daran zu begreifen, dass jeder seine 
eigenen Vorlieben hat, und diese irgendwann beherrscht? (Vielleicht auch 
du?) Klar würde ich auch gerne in einer Welt leben, in der wir uns auf 
ein paar Systeme und Sprachen einigen können oder gar darauf 
beschränken. (Allein schon der Umwelt zuliebe) ASM, ActionScript und C++ 
vielleicht? Im JSON + ECMA-Style (?) zu Coden und zu Schreiben macht auf 
jeden Fall Sinn... Das - und eben Basic, um ab und zu die Hände und 
Finger vor den ständigen Sonderzeichen-'{.[]/}'-Verkrampfungen (trotz 
ergonomischen Arbeitsplatz) zu schonen...

Es gibt sogar Behörden und / oder Einrichtungen, die ...
... (staatlich geförderte!!) Schulungen (z.B. für C#.Net) für 
Wider-Einsteiger in die Materie(!), und zur "Erfrischung" der 
geforderten Kenntnisse (ja, heutzutage!) anbieten...

Und jetzt? Bloß nicht den Spaß daran verlieren - egal zu welcher Zeit.
Ob das nun auf einem Single-Core X86 Win98Se Rechner passiert, kann dir 
doch auch egal sein. Abwrack-Prämie für PC-Hardware gibts auch noch 
nicht, deshalb fahren bestimmt noch einige ihren X86 samt alter 
Software.

JAAA NAA UND: malloc(XD+LOL^256/ROFL);
IMMER DAS GLEICHE!
tsx

<Edit wegen Schnellschreib-Exception>

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.