Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

"Objektverweis wurde nicht auf eine Objektinstanz festgeleg" beim Kopieren in Form mit Basisklasse
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

"Objektverweis wurde nicht auf eine Objektinstanz festgeleg" beim Kopieren in Form mit Basisklasse

beantworten | zitieren | melden

Hallo Zusammen,

Ich versuche gerade mir ein Formular-Basisklassen-System aufzubauen, also eine Basisform, von der die anderen Formen abgeleitet werden - das klappt soweit wunderbar ...

Will ich nun aus anderen Forms mehrere Objekte (Panel, Textboxen, Label, etc.) per Strg+C u. Strg+V einkopieren erhalte ich immer folgende Fehlermeldung:
Fehler
Fehler beim Verarbeiten dieses Befehls.
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Kopiere ich nur ein Obkejt funktioniert es (außer bei Panel)

Gibt es eine Möglichkeit die Entwicklungsumgebung für solche Fälle in den Debug-Mode zu bekommen, um den Fehler eventuell zu korrigieren oder was kann ich sonst tun, damit ich wieder mehrere Objekte gleichzeitig kopieren kann - das spart doch einiges an Zeit ...

MfG Christian
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15704
Herkunft: BW

beantworten | zitieren | melden

Arbeitest Du wirklich noch mit VS 2010, wie es Deinem Profil hinterlegt ist?
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 655

beantworten | zitieren | melden

Ohne weiteres Infos ist es hier recht schwierig, dir genauere Hinweise zu geben. Pauschal hätte ich mal gesagt, dass in der Basisklasse irgendwo im Konstruktor oder in überschriebenen Events (zb OnPaint) die NullRef triggert, weil im Designer nicht notwendigerweise alles initialisiert ist.

Aber du könntest mal versuchen, ein zweites Visual Studio zu starten und dich ans erste dran zu hängen. Wenns in deinem eigenen Code kracht, solltest du das damit auch rausbekommen. Eventuell vorher unter Tools > Options, Debugging den Haken bei "Enable Just my Code" weg.
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
Arbeitest Du wirklich noch mit VS 2010, wie es Deinem Profil hinterlegt ist? :baby:

ja ...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ChrisProg am .
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Zitat von BhaaL
Aber du könntest mal versuchen, ein zweites Visual Studio zu starten und dich ans erste dran zu hängen. Wenns in deinem eigenen Code kracht, solltest du das damit auch rausbekommen. Eventuell vorher unter Tools > Options, Debugging den Haken bei "Enable Just my Code" weg.


Kannst Du mir das bitte mal genauer erklären ?


MfG Christian
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 655

beantworten | zitieren | melden

Zitat von ChrisProg
Kannst Du mir das bitte mal genauer erklären ?

Im zweiten Visual Studio auf Debug > Attach to Process und dort das erste Visual Studio auswählen; dann im ersten Visual Studio dein Copy&Paste durchführen.
Ab hier ist's dann dasselbe als ob du dein eigenes Programm debuggst.

Einziger Unterschied: liegt der Fehler nicht in deinem eigenen Code, kann es sein dass der Debugger nicht stehen bleibt - daher ggf. "Enable Just My Code" deaktivieren damit du auch Exceptions ohne Source bekommst.
Und für die Nummer Sicher noch aktivieren, dass der Debugger auch bei handled Exceptions stehen bleibt.
private Nachricht | Beiträge des Benutzers
123thomas
myCSharp.de - Member



Dabei seit:
Beiträge: 125

beantworten | zitieren | melden

Wenn ich das richtig verstehe, dann kopiert er im Desinger von VS 2010 die Steuerelemente hin und her. Dies sollte eigentlich auch mit mehreren Steuerelementen wunderbar funktionieren.

Die Frage ist wie genau du das machst. Hast du 2 Instanzen von dem VS offen?
Wenn ja dann versuche mal die Form, aus der du die Elemente kopieren möchtest bei deinem Zielprojekt in die Projektmappe zu importieren um sie dann zu kopieren und danach dann wieder die Form aus der Projektmappe zu löschen.

Ich weiß ist ein bisschen umständlich, aber was besseres fällt mir gerade nicht ein.

MFG
Thomas
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Hi ChrisProg,

kopiere doch einfach den vom Designer kopierten Code, anstatt die Elemente im Designer. Dann siehst du auch gleich, ob es ein Problem mit dem Code gibt.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

@BhaaL:
Leider keine Änderung ...

@123thomas:
Auch das hat leider nichts gebracht ...

@MrSparkle:
Wenn Du damit meinst, ich solle den »Form«.Designer öffnen u. mir daraus den Code kopieren - das ist ja noch umständlicher, zumal die entsprechenden Codeteile ja auch noch an diversen Stellen stehen ...

MfG Christian
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Hast du die Option, auf eine neue Visual Studio-Version zu gehen?
Erfahrungsgemäß ist der Designer in den neuen Versionen stabiler geworden.
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

leider nein ...

dann muß ich halt so weitermachen ...

Das betrifft auch komischerweise "nur" Objekte, die ich aus einer "normalen" Form auf eine Form mit einer vererbten Basisklasse kopiere; wenn ich aus einer anderen Form (oder auch der selben) mit Basisklasse kopiere, funktioniert es ...

MfG Christian
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Wenn der Windows-Forms-Designer spinnt hilft bei mir oft folgende Vorgehensweise:

- Alle offenen Dokumente schließen
- Projektmappe bereinigen
- Kompilieren
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 996

beantworten | zitieren | melden

Nur mal so ganz doof gefragt:

Sprechen wir hier über WinForms oder WPF?

Ist mir nicht ganz klar ...
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

@Sir Rufo:
Hierbei über WinForms

Das andere (WPF) ist nur für meine Weiterbildung

MfG Christian
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Du könntest das Zielform im Code so ändern dass es von Form erbt... dann scheint das kopieren ja zu funktionieren.

Nach dem kopieren änderst Du die Form wieder so ab, dass die wieder von Deiner Baseclass erbt.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Kannst du dein Projekt mal in abgespeckter Version zur Verfügung stellen?
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Zitat von Programmierhans
Du könntest das Zielform im Code so ändern dass es von Form erbt... dann scheint das kopieren ja zu funktionieren.

Nach dem kopieren änderst Du die Form wieder so ab, dass die wieder von Deiner Baseclass erbt.

Geht leider nicht, da ich aus der Basisklasse ein TabControl vererbe; und in dieses werden die Objekte kopiert ...


MfG Christian
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Mach den Designer mal im Debugger auf.. damit Du eine Ahnung hast wieso es knallt...

Hier hatte ich das mal beschrieben: UserControl kann im Designer nicht hinzugefügt werden
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Zitat von Programmierhans
Mach den Designer mal im Debugger auf.. damit Du eine Ahnung hast wieso es knallt...

Hier hatte ich das mal beschrieben: UserControl kann im Designer nicht hinzugefügt werden

Hat leider auch nicht geklappt; könnte aber auch daran liegen, das ich ja mein "anderes" Projekt gar nicht am "laufen" habe (wie Du in dem anderen Thread schreibst) ...

Ich bereite mal ´ne abgespeckte Version vor ...

MfG Christian
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

So, hier ist die abgespeckte Version:

Sie ist nicht lauffähig (zu weit abgespeckt, um die 256k zu erfüllen), aber das braucht sie auch nicht...

Es wird (hoffentlich) direkt beim öffnen die Maske "Mandantenstamm" (Formular) angezeigt.

Kopiert man nun aus einer anderen Instanz heraus mehrere unterschiedliche Felder, so erhält man die besagte Fehlermeldung ...


MfG Christian
Attachments
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Habe sowohl im Visual Studio 2017 als auch im Visual Studio 2015 keinerlei Probleme.

Kannst du testweise dem Mandantenstamm mal einen parameterlosen Konstruktor verpassen?
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Du meinst einfach so

public Mandantenstamm()

hat auch nichts gebracht...

Mich beschleicht der Verdacht, das es was mit meinem Rechner zu tun haben könnte; werde das mal am WE zu Hause probieren ...


MfG Christian
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10072

beantworten | zitieren | melden

Komplett falsche herangehensweise, aber in so ziemlich allem in dem Projekt.

Du versuchst zwar irgendwie die UI zu separieren, aber genau falsch.
Und SelectStatements haben nichts, aber auch überhaupt nichts in UI Code zu suchen.

1. Erstelle dir UserControls die in deine TabPages kommen.
2. Erstelle einen vernünftigen BusinessLayer
3. [Artikel] C#: Richtlinien für die Namensvergabe
4. Dein global ist nicht wirklich ernst gemeint, oder?
5. Du bist sicher das du verstanden hast was das Schlüsselwort ref bedeutet?

Schau dir dringends mal [Artikel] Drei-Schichten-Architektur an

if ((Tabelle_BindingSource(x_haupttabelle, ref SQL_bindings).Find(x_hauptfeld, this.feld_mandant.Text.ToString().Trim()) != Tabelle_BindingSource(x_haupttabelle, ref SQL_bindings).Position) && (global.Tabelle_BindingSource(x_haupttabelle, ref SQL_bindings).Find(x_hauptfeld, this.feld_mandant.Text.ToString().Trim()) != -1))
Wie willst du so etwas debuggen, ganz abgesehen davon das das hier so nichts zu suchen hat in der UI.
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Zitat von p!lle
Habe sowohl im Visual Studio 2017 als auch im Visual Studio 2015 keinerlei Probleme.

Bei mir (VS 2015) geht es auch ohne Probleme.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hypersurf am .
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 168
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

@FZelle:
Vorab: ich bin Autodidakt und kein Studierter (und komme noch aus der VB u. FoxPro-Ära wo ich nahezu 18 Jahre erfolgreich programmiert habe) ...
Nun bin ich seit 2 Jahren dabei, mich schrittweise in C# einzuarbeiten - obwohl ich VFP immer noch für das bessere DB-Programm halte (aber es wird nicht mehr weiterentwickelt und ist auch mit 64-Bit nicht kompatibel)

Warum soll ich nicht alles das, was ich immer wieder in allen Stammmasken brauche, in eine BasisForm packen ? Wenn ich die TabControls in ein UI-Control packe, habe ich ja nur die Hälfte in einer Klasse.

Ähnlich, wie "ErfinderDesRades" tue ich mich auch schwer darin, das Drei-Schichten-Modell als Allheilmittel anzusehen - ok, der Code ist zwar durch die optische Aufteilung schneller zu finden, aber ob das nun einfacher ist ...

Das mit "global" ist im Moment mein Ernst, bis ich was besseres gefunden habe: es beinhaltet alles Methoden die ich immer wieder brauche, aber nicht in allen Form´s u. Prg´s reinschreiben will - wenn dann nämlich eine Änderung/Anpassung kommt muss man das ja wieder an allen möglichen Stellen machen ...

Das das der gekapselten Objektprogrammierung widerspricht, ist mir klar ...

Wenn Du dafür einen besseren Vorschlag hast, ich bin ganz Ohr ...

Ich denke, ich habe verstanden was das ref-Schlüsselwort bedeutet - an der von Dir gezeigten Stelle ist es natürlich nicht zweckführend (obwohl es funktioniert) - es sind dort noch viele Optimierungen zu machen, das ist mir klar (vieles davon ist noch kopierter, abgewandelter Code) ...


MfG Christian
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

Hallo ChrisProg,

ich habe mir jetzt auch mal dein Test-Projekt angeschaut und ich stimme FZelle 100%ig zu.
Dein Code ist komplett unwartbar. Du hast viel zu viele No-Gos drin (gerade so als ob es absichtlich wäre).
Ein komplettes Refactoring des Codes würde auch die Zeilenanzahl drastisch reduzieren (obwohl es dann auf mehrere Klassen aufgeteilt wäre).

Gerade generische Programmierung würde deinen Code sinnvoll verbessern, anstatt z.B. so etwas


if ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "BUTTON" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "TEXTBOX" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "MASKEDTEXTBOX" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "NUMERICTEXTBOX" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "LINKTEXTBOX" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "CHECKBOX" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "RADIOBUTTON" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "COMBOBOX" |
   ((System.Windows.Forms.Control)controlHashtable[key.ToString()]).GetType().Name.ToUpper() == "MULTICOLUMNCOMBOBOX")

Edit: Mir scheint, du weißt anscheinend auch nicht, wie man eine vernünftige Projektstruktur aufbaut - du kannst dir mal das Beispielprojekt (Link ganz unten) von meinem Artikel Kommunikation von 2 Forms anschauen.

Du solltest max. 800-1000 Zeilen je Klasse als Obergrenze ansehen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat von ChrisProg
Ähnlich, wie "ErfinderDesRades" tue ich mich auch schwer darin, das Drei-Schichten-Modell als Allheilmittel anzusehen - ok, der Code ist zwar durch die optische Aufteilung schneller zu finden, aber ob das nun einfacher ist ...

Es geht doch nicht um die Optik, das steht auch nicht so in dem verlinkten Artikel. Ein Haus bleibt doch auch nicht deswegen stehen, weil es gut aussieht, sondern weil es eine tragfähige Struktur hat.
Zitat von ChrisProg
Das mit "global" ist im Moment mein Ernst, bis ich was besseres gefunden habe: es beinhaltet alles Methoden die ich immer wieder brauche, aber nicht in allen Form´s u. Prg´s reinschreiben will - wenn dann nämlich eine Änderung/Anpassung kommt muss man das ja wieder an allen möglichen Stellen machen ...

Deiner Argumentation zufolge gibt es entweder nur eine globale Klasse mit allen Funktionalitäten oder aber redundanten Code. Das entspricht aber nicht der Realität. Hier wäre es sinnvoll, wenn du dich erstmal mit der objektorientierten Programmierung beschäftigst.

Der erste Schritt wäre zu verstehen, warum Code, wie der von FZelle und Th69 gepostete, unbedingt zu vermeiden ist.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10072

beantworten | zitieren | melden

@ChrisProg:
Ich weis das erfinderdesrades einigen "neuen" Konzepten ( OOP gibt es seit ~1969 dem start von Smalltalk ) kritisch gegenübersteht, aber das bedeutet nicht das seine Ansicht hier gut ist.

Natürlich ist VFP einfacher als das was Du da mit der DB veranstaltest, wenn man es aber mal vernünftig macht ( OOP + ORM + Schichten) dann ist es bei weitem nicht mehr so unterschiedlich.

Hättest du lust mir das Projekt per PM zu schicken, dann schaue ich mal ob ich

1. Es verstehe
2. mal Grund rein bringe um es dir für die Zukunft zu erleichtern
private Nachricht | Beiträge des Benutzers