Autor Beitrag
makena76
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Fr 13.06.03 22:38 
Hallo,

Also ich steh grad ziemlich auf der Leitung, wohl schon zu spät :-(

Ich rufe von einem Form1 ein zweites Form auf (Form2):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
 with TfmForm2.Create(Self) do begin
  Label1.Caption:='...'
  ShowModal;
 end;

Nix spektakuläres :D

Aber nun möchte ich in Form2 z.B. ein Editfeld in Form1 ändern. Hab schon mit GetParent, GetParentForm etc. herumexperimentiert. Nix funktioniert. Achja, Form1 gibt es in der Anwendung auch noch öfters.

Für einen Tipp wäre ich sehr dankbar.

Gute Nacht
makena

Moderiert von user profile iconUGrohne: Delphi-Tags hinzugefügt
inselberg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458



BeitragVerfasst: Fr 13.06.03 23:06 
form1.edit1.text := 'hallo welt';

??

_________________
hans bist du das ?
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Fr 13.06.03 23:18 
Hallo inselberg,

nein das geht so leider nicht :(. Sorry wenn ich mich ein wenig unklar ausgedrückt habe.

Noch paar Zusatzinfos:

Also in meiner Anwendung (MainForm) rufe ich Form1 auf.

In Form1 wird dann bei entsprechendem Klick ein 2. Form aufgerufen (Form2, ein Dialog zum Konfigurieren).

In Form2 können z.B. Farben verändert werden, die dann in Form1 gleich entsprechend angepasst werden.

cu makena
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Sa 14.06.03 16:50 
@Makena: Doch, das geht. Wenn du z.B. in Form2 etwas eingibst, es aber in einer anderen Form zu einer Änderung kommen lassen willst, setzt du einfach den Namen der Form davor, wie in normalen Prozeduren, also z.B.:

Du hast 3 Edit-Felder in Form2, die alle mit Zahlen gefüllt werden sollen und Panel1 in Form1 soll eine entsprechende Änderung in der Eigenschaft Color erhalten:

ausblenden Delphi-Quelltext
1:
Form1.Panel1.Color:=RGB(StrToInt(Edit1.Text), StrToInt(Edit2.Text), StrToInt(Edit3.Text));					


Das Beispiel von Inselberg habe ich nicht getestet, aber ich sehe da auch keinen Fehler. Das muß so gehen..

_________________
Hasta La Victoria Siempre
Nimloth
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 15.06.03 10:48 
Hallo

Darf ich dir einen Tipp geben? Ich weiss zwar nicht wie gross deine Anwendung ist, bzw. wie Komplex, aber ich würde dir anraten hier MVC zu verwenden. Du musst zwar selber abschätzen ob du das brauchst bzw. ob sich der Aufwand in Flexibilität lohnt oder nicht....

Grüsse
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mo 16.06.03 00:13 
@all: Gut ihr meint das geht mit Form1.Edit1.Text. Dachte ja eigentlich auch, dass es so gehen sollte. Aber ich bekomme in meiner Anwendung immer eine Zugriffsverletzung in Adresse xxxxxx. Also wenn das so gehen sollte, dann habe ich ein Problem :-( Habt ihr eine Idee wieso es bei mir zu der Zugriffsverletzung kommt?

Egal ob ich das Form2 aus Form1 mit Show oder ShowModal aufrufe, immer gleicher Fehler... ich bin ratlos :( Form1 wird aus dem MainForm mit Show aufgerufen.

@Nimloth: Dumme Frage, was ist denn MVC? In der Suche hier im Forum kam auch nur dieser Thread als Ergebnis... Komplex ist meine Anwenung nicht. 1 Hauptform, 20 weitere Forms etwa. Datenbankanbindung + Grafik. Ich bräuchte das mit den Forms auch nur in 2 Fällen, eben Setupdialoge.

Danke Euch schonmal.

cu makena
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mo 16.06.03 00:37 
Nachtrag:
Die Zugriffsverletzung ist eine EAccessViolation
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mo 16.06.03 07:32 
aber das form1 ist zu dem zeitpunkt bei dem du das eidt ändern willst schon createtd und sichtbar oder ?


PS: mich würde auch mal interressieren, was MVC ist

_________________
In the beginning was the word.
And the word was content-type: text/plain.
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mo 16.06.03 07:51 
@Matze:
Ja klar, denn man klickt einen Eintrag in einem PopupMenu (eine TAction) in Form1, dann wird Form2 erstellt, dort soll man die Änderungen vornehmen können, die dann in Form1 direkt sichtbar sind.
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mo 16.06.03 08:10 
Wieder ein Nachtrag:
Als das mit dem CREATEd hat mir dann doch zu denken gegeben. Scheinbar liegt echt hier der Fehler drin. Wenn ich Form1,Form2 unter Projekt > Optionen ind die Box "automatisch erzeugen" schiebe dann geht es bzw. es gibt keine ZUgriffsverletzung. Allerdings wird dann bei Start eben schon das Forn1 nutzloserweise geöffnet, so dass ich das so auch nicht gebrauchen kann.

Also muss der Fehler bei den Creates liegen, oder?

Im MainForm liegt die Aufrufroutine im class(TForm)-Teil, also nicht im public-Bereich. In Form1 ebenfalls im class(TForm)-Teil. Sollte ich vielleicht beide jeweils in den public verschieben?

cu makena
Nimloth
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 16.06.03 08:59 
Hallo

MVC steht für "Model View Controller". Die Idee besagt, das man die Darstellung der Daten (view) von den Daten selbst (Model) trennen sollte. Um dies Umzusetzen werden verschiedene Entwurfsmuster

wie Observer angewendet. Eine View meldet sich als Obeserver auf einem Model an. Wird das Model geändert, werden alle Views darüber informiert und wissen, "aha, ich muss mich aktualisieren." Der

Controller meldet sich auf der View als Observer an. Ändert der User die Daten (mittels View) , allamiert der Controller alle Models. Und die Models allamieren dann wieder die andern Views. Wo wir also wieder beim Anfang wären... :-) Warum dieser Aufwand?

1. Konsistenz Hast du viele Views auf die gleichen Daten (sei es ein Diagramm, eine Tabelle etc.) so müssen sie immer die aktuellen Daten darstellen.

2. Testbarkeit Eine View ist schwirieg zu testen. Ist das Model losgelöst von der Darstellungslogik, ist es leichter nur die Daten(verarbeitung) (Model) mittels UnitTests zu testen.

Die View sollte reine Darstellungslogik haben, keine Datenlogik.

3. Koppelung Dein Form2 ist enggekoppelt an das Form1. Etwahige Controll Änderungen haben Code Änderungen in dem Form2 zur folge.

Lose Koppelung ist der Schlüssel zur Wiederverwendung!

4. Anpassungsfähigkeit Eine View ändert sich schnell. Neue VCs die schöner Aussehen, der User will nicht das es so aussieht etc. Ist die ganze Logik direkt auf den Controlls, also direkt auf der View, sind solche Änderungen schwireig und mit viel Aufwand verbunden.
Des weiteren, vielleicht kommen eines Tages noch weitere Views dazu?

MVC kommt auch dem Open-Closed Prinzip entgegen.
www.empros.ch/vielfa...closedprinciple.html

So nach dieser etwas längeren Liste der Vorteile, kommen jetzt die Nachteile:

1. Aufwand MVC zu implementierung ist viel Aufwand. Alles zu trennen, mehrer Klassen etc. und manchmal ist dieser Aufwand nicht gerechtfertigt. Das ist eine Sache des Gefühls. Für wenn ist die Applikation? Was ist die ungefähre Lebensdauer? Wievele Menschen werden sie benutzen? Wie hoch ist die Chance das diese Menschen änderungen wünschen/verlangen? Aus den ersteren Fragen erschlisst sich wie hoch die Chance ist, dass sich die Applikation im laufe der Zeit verändern muss.
Eine Sache des Gefühls und was um was für eine Applikation es sich handelt.

Dein Beispiel:
Dein Form2 ist die View auf die Daten zum Bearbeiten. Form1 stellt die Daten ebenfalls dar nur können sie da nicht bearbeitet werden. Ein weiteres Prinzip kommt hier zutage: DRY - Don't repeat yourself. Der Teufel liegt in der Wiederholung! Ein anderes Beispiel - wie oben erwähnt - eine Tabelle welche Daten enthält und ein Diagramm das die Daten graphisch darstellt.

Ich wünsche noch ein guten Start in die Woche
Grüsse