AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Variable

Ein Thema von Gehstock · begonnen am 15. Aug 2006 · letzter Beitrag vom 15. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#1

Problem mit Variable

  Alt 15. Aug 2006, 09:34
Und zwar folgendes wir sind auf FormMain und wollen eine Variable erzeugen mit:
i:=ConfigDlg.ComboBox4.ItemIndex; ConfigDLG heißt bei mir ne andere Form

Beim Erzeugen gibts aber einen Fehler
Zitat:
Access Violation............
den man wegdrücken kann danach Läuft das Prog aber wie es soll. Kann man keine Variablen auf anderen Forms bilden?
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Problem mit Variable

  Alt 15. Aug 2006, 09:46
Klingt danach, dass Du den ConfigDlg nicht erzeugt hast.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: Problem mit Variable

  Alt 15. Aug 2006, 09:47
Zitat von Gehstock:
Und zwar folgendes wir sind auf FormMain und wollen eine Variable erzeugen mit:
i:=ConfigDlg.ComboBox4.ItemIndex; ConfigDLG heißt bei mir ne andere Form

Beim Erzeugen gibts aber einen Fehler
Zitat:
Access Violation............
den man wegdrücken kann danach Läuft das Prog aber wie es soll. Kann man keine Variablen auf anderen Forms bilden?
1. Die genaue Formulierung der Zugriffsverletzung hilft bei der Fehlersuche ungemein. Andere Nutzer sagen gerne:
Zitat:
Meine Glaskugel ist gerade kaputt.
2. Variable auf andere Forms hängen von den Zugriffsrechten ab. Standard für Controls sind private. Notfalls (vor allem als schnelle Lösung) kannst Du von ConfigDLG aus den Zugriff freigeben, indem Du die ComboBox4 anders deklarierst (public oder published).

3. Als saubere Lösung kannst Du den ItemIndex übergeben:
Delphi-Quellcode:
private function GetComboBox4ItemIndex: integer;
public property ComboBox4ItemIndex: integer read GetComboBox4ItemIndex;
...
function TConfigDLG.GetComboBox4ItemIndex: integer;
begin
  result := ComboBox4.ItemIndex;
end;
Es wird dringend empfohlen, eine solche saubere Lösung zu verwenden.

Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Problem mit Variable

  Alt 15. Aug 2006, 09:56
Zitat von Jürgen Thomas:
2. Variable auf andere Forms hängen von den Zugriffsrechten ab. Standard für Controls sind private. Notfalls (vor allem als schnelle Lösung) kannst Du von ConfigDLG aus den Zugriff freigeben, indem Du die ComboBox4 anders deklarierst (public oder published).
Bei Win32, Delphi? Nein - die sind alle published. Der Form Designer klatscht dir jede Komponente die du einfügst oben in die Klasse, direkt hinter TForm1=Class(TForm), und dort sind diese öffentlich. Es wird keine Sichtbarkeit eingeschränkt - nicht im geringsten. Die Elemente sind alle sichtbar von aussen - ausser natürlich man trägt per Hand vor den Komponentendeklarationen ein "private" ein...
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Problem mit Variable

  Alt 15. Aug 2006, 09:56
Zitat von Jürgen Thomas:
2. Variable auf andere Forms hängen von den Zugriffsrechten ab. Standard für Controls sind private. Notfalls (vor allem als schnelle Lösung) kannst Du von ConfigDLG aus den Zugriff freigeben, indem Du die ComboBox4 anders deklarierst (public oder published).
Die online Hilfe sagt da aber was ganz anderes (genauso wie es sich dann auch verhält)

Zitat von Delphi Hilfe:
Ein Element ohne Attribut erhält automatisch die Sichtbarkeit des vorhergehenden Elements in der Deklaration. Die Elemente am Anfang einer Klassendeklaration ohne explizite Sichtbarkeitsangabe werden standardmäßig als published deklariert, wenn die Klasse im Status {$M+} compiliert oder von einer mit {$M+} compilierten Klasse abgeleitet wurde. Andernfalls erhalten sie das Attribut public.
Das heißt, dass ein Control mindestens public ist, wenn man es zur Designzeit einfügt.

Zitat von Muetze:
Bei Win32, Delphi? Nein - die sind alle published. Der Form Designer klatscht dir jede Komponente die du einfügst oben in die Klasse, direkt hinter TForm1=Class(TForm), und dort sind diese öffentlich. Es wird keine Sichtbarkeit eingeschränkt - nicht im geringsten. Die Elemente sind alle sichtbar von aussen - ausser natürlich man trägt per Hand vor den
Komponentendeklarationen ein "private" ein...
Dann darfst dich aber auch nicht wundern, wenn im ObjectInspector plötzlich keine Ereignismethoden mehr zur Verfügung stehen, wenn Du private davor schreibst...
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Problem mit Variable

  Alt 15. Aug 2006, 10:12
Ok Ok Ok

Habs Behoben mit:
ConfigDLG

Delphi-Quellcode:
procedure TConfigDlg.ComboBox4Change(Sender: TObject);
var
Typ : Integer;
begin
 Typ := ConfigDlg.ComboBox4.ItemIndex
end;
und auf FormMain
i:=Typ;
Marcel
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Problem mit Variable

  Alt 15. Aug 2006, 10:30
Zitat von GuenterS:
Dann darfst dich aber auch nicht wundern, wenn im ObjectInspector plötzlich keine Ereignismethoden mehr zur Verfügung stehen, wenn Du private davor schreibst...
Ich mache sowas ja nicht, aber ein manueller Eingriff wäre der einzige Weg um zu dem von Jürgen Thomas beschriebenen Verhalten zu kommen...

Zitat von Gehstock:
Habs Behoben mit:
ConfigDLG

Delphi-Quellcode:
procedure TConfigDlg.ComboBox4Change(Sender: TObject);
var
Typ : Integer;
begin
 Typ := ConfigDlg.ComboBox4.ItemIndex
end;
und auf FormMain
i:=Typ;
Hä? Wie funktioniert denn dies? Du weist den ItemIndex einer lokalen Variable zu und dann irgendwo in einer anderen Form weist du die lokale Variable einer anderen Variable zu?

1. ist es lokale Variable die somit nicht ausserhalb der ConfigDlg Methode sichtbar ist, somit ist auch kein Zugriff möglich.
2. die lokale Variable verliert ihre Gültigkeit und ihren Inhalt mit verlassen der Methode.

Daher: Wie funktioniert dieses?
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Problem mit Variable

  Alt 15. Aug 2006, 10:36
Läuft aber wie es soll Deswegen mach ich mir jetzt keinen Kopf mehr Deswegen
Marcel
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#9

Re: Problem mit Variable

  Alt 15. Aug 2006, 10:41
@GuenterS
@Muetze1
Zitat:
Form Designer klatscht dir jede Komponente die du einfügst oben in die Klasse, direkt hinter TForm1=Class(TForm), und dort sind diese öffentlich. Es wird keine Sichtbarkeit eingeschränkt
Oh, Sch... Bei meinen anderen Beiträgen schreibe ich die Warnung hin, dass ich zz. überwiegend mit C# arbeite. Dort gilt dies aber wirklich; deshalb habe ich das (ohne Prüfung) auf Delphi übertragen.

Unabhängig davon gilt aber doch wohl trotzdem, dass man nur mit Vorsicht direkt auf Controls in anderen Formularen zugreifen sollte und einzelne Informationen durch Eigenschaften oder öffentliche Funktionen zur Verfügung gestellt werden sollen.

Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Problem mit Variable

  Alt 15. Aug 2006, 11:04
Zitat von Jürgen Thomas:
@GuenterS
@Muetze1
Zitat:
Form Designer klatscht dir jede Komponente die du einfügst oben in die Klasse, direkt hinter TForm1=Class(TForm), und dort sind diese öffentlich. Es wird keine Sichtbarkeit eingeschränkt
Oh, Sch... Bei meinen anderen Beiträgen schreibe ich die Warnung hin, dass ich zz. überwiegend mit C# arbeite. Dort gilt dies aber wirklich; deshalb habe ich das (ohne Prüfung) auf Delphi übertragen.

Unabhängig davon gilt aber doch wohl trotzdem, dass man nur mit Vorsicht direkt auf Controls in anderen Formularen zugreifen sollte und einzelne Informationen durch Eigenschaften oder öffentliche Funktionen zur Verfügung gestellt werden sollen.

Jürgen
Stimmt, hat aber auch niemand bestritten.

Zitat von Muetze1:
Zitat von Gehstock:
Habs Behoben mit:
ConfigDLG

Delphi-Quellcode:
procedure TConfigDlg.ComboBox4Change(Sender: TObject);
var
Typ : Integer;
begin
 Typ := ConfigDlg.ComboBox4.ItemIndex
end;
und auf FormMain
i:=Typ;
Hä? Wie funktioniert denn dies? Du weist den ItemIndex einer lokalen Variable zu und dann irgendwo in einer anderen Form weist du die lokale Variable einer anderen Variable zu?

1. ist es lokale Variable die somit nicht ausserhalb der ConfigDlg Methode sichtbar ist, somit ist auch kein Zugriff möglich.
2. die lokale Variable verliert ihre Gültigkeit und ihren Inhalt mit verlassen der Methode.

Daher: Wie funktioniert dieses?
Vermutlich hat er eine globale Variable die auch Typ heißt und es geht rein zufällig für die Fälle die er getestet hat.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz