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.
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 ...
naja - wenn deine Form "nackt" angezeigt wir - würde ich fast vermuten, dass deine Stammmaske zwei Konstruktoren hat und du beim erben den aufrufst, der nicht "InitializeComponent" aufruft. (Eine vom Forms-Designer generierte Methode)
Strike! manchmal sieht man den Wald ...
Zitat
Unabhängig davon wird das alleine dir auch nichts helfen, da die vom Designer erstellten Controls mit "private" markiert sind im Standard. (Wirst du dann für jedes Control anpassen müssen, damit du in der erbenden Form irgendwas daran schrauben kannst)
Und wie stelle ich das an ?
Beispiel Navigationsleiste:
Im Designer.cs habe ich die entsprechenden Objekte "public" gemacht ...
public System.Windows.Forms.BindingNavigator Navigationsleiste;
public System.Windows.Forms.ToolStripButton bindingNavigatorAddNewItem;
public System.Windows.Forms.ToolStripLabel bindingNavigatorCountItem;
public System.Windows.Forms.ToolStripButton bindingNavigatorMoveFirstItem;
public System.Windows.Forms.ToolStripButton bindingNavigatorMovePreviousItem;
public System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator;
public System.Windows.Forms.ToolStripLabel positionsanzeige;
public System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator1;
public System.Windows.Forms.ToolStripButton bindingNavigatorMoveNextItem;
public System.Windows.Forms.ToolStripButton bindingNavigatorMoveLastItem;
public System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator2;
public System.Windows.Forms.ToolStripButton loeschen_button;
public System.Windows.Forms.ToolStripButton speichern;
public System.Windows.Forms.ToolStripButton rueckgaengig;
trotzdem kann ich nicht darauf zugreifen ... (beim TabControl übrigens hervorragend ...)
Navigationsleiste.AddNewItem.Click += new EventHandler(bindingNavigatorAddNewItem_Click);
darauf zugreifen, oder gibt es doch noch andere Möglichkeiten ???
Zitat
Dein Verständnisproblem kann ich nicht nachvollziehen in puncto Konstruktoren. Was verstehst du nicht? Die Kernaussage des Threads ist nämlich im Prinzip:
"Eine Form muss eine parameterlosen Konstruktor haben, damit der Designer funktioniert."
Ich habe die Worte verstanden u. es auch umgesetzt, nur verstehe ich den Sinn dahinter nicht ... =)
@Abt: wenn ich ehrlich bin, habe ich mir deinen Link angeschaut u. nicht verstanden was da passiert ... X(
nachdem nich mich den ganzen Morgen hier durch die Vererbung durchgelesen habe;
auch das Problem mit Der Konstruktor für den Typ ... gefunden gefunden, korrigiert, aber nicht wirklich verstanden habe (vielleicht kann mir jemand dazu auch noch ein verständliches Beispiel nennen ...),
habe ich das nächste Verständnisproblem:
Ausgangslage:
1) eine Basis-Form ("Stammmaske"), die einen Binding-Navigator, ein Tab-Control und eine Statusleiste u. diverse Methoden enthält.
2) eine Form (Kundenstamm), die von der Basis-Form erbt
...
public partial class Kundenstamm : Stammmaske
/
...
Wenn ich die Form "Kundenstamm" ausführe, dann sehe ich, wie erwartet, den Binding-Navigator, das Tab-Control u. die Statusleiste; u. es werden die enthaltenen Methoden ausgeführt.
Öffne ich aber den "Kundenstamm" mit dem Designer, so sehe ich "nur" eine nackte Form
Eigentlich hätte ich auch jetzt hier erwartet die o.g. Controls zu sehen u. bearbeiten / erweitern zu können ...
Die Basisform soll mir eigentlich als Vorlage für dauernd (in jeder Form) wiederkehrende Methoden und Eigenschaften dienen, so das ich dann nur noch die jeweils individuellen Controls, Eigenschaften u. Methoden hinzufügen muß ...
Irgendwie tue ich mich da wohl mit c# etwas schwer, auch finde ich, das die ganze Vererbung doch wesentlich komplexer als in FoxPro ist (in VFP z.B. wurden die geerbten Methoden im Designer niemals aufgerufen nur in der Ausführung ...)
Wer kann mir da helfen, bzw. wo kann ich mich verständlich einlesen ???
ich beschäftige mich gerade mit WPF, zu diesem Zweck habe ich mir ein kleines Projekt vorgenommen, in dem es unter anderem möglich sein soll, eine Datum/Zeit (schreibt man das so ?) auszuwählen.
Ich bin dann ziemlich schnell auf WPF DateTimePicker gestoßen, komme aber leider bei einigen Dingen nicht weiter
Weiß irgendjemand eine Quelle an der ich Hintergrundinformationen zum WPF DateTimePicker finden kann ?
Konkret suche ich folgendes:
- verhindern des Kontextmenüs der enthaltenen Textbox ( ich möchte über den Rechtsklick einfach die aktuelle Datum/Zeit einfügen (ist ja kein Problem...) aber immer kommt diese bl... Kontextmenü hoch
- wenn ich mich mit den Pfeiltasten im Textfeld bewege, wird immer ein entsprechender Block(Tag, Monat, Jahr, Stunden oder Minuten) markiert, welches ja eigentlich gut ist; aber wenn ich dann z.B. im Block Stunden "15" eingeben will, dann ersetzt er mir den ganzen Block mit "1", die "5" überschreibt dann den ":"
Deshalb die Frage nach Quellen, ich habe leider auch unter Google nichts gefunden (jede Wette sind mir wieder nicht die richtigen Schlüsselwörter eingefallen ...)
Also das heißt dann im Klartext, das so ziemlich jedes Objekt auf einer Form das OnKeyDown-Ereignis auslöst, unabhängig, ob es den Fokus hat, oder nicht - welcher Sinn steckt dahinter ?
Dank deinem Hinweis "jump to reference source" konnte Tante "Google" hierfür die Seite MS Reference Source ermitteln, auf der ich dann auch OnKeyDown finden konnte ...
Und diese Seite kann man in VS für jedes Control individuell aufrufen oder nur gesamt und dann suchen, oder gibt es gar eine Offline-Version davon ???
Gibt es eigentlich eine Möglichkeit in VS in den Eigenschaften direkt anzuzeigen, das da Methoden sind, die aus der Klasse kommen ??? (auch wenn VFP leider tot ist, aber so etwas war unter Eigenschaften sofort zu sehen...)
Aber ich verstehe immer noch nicht, warum das für das TabControl ausgeführt wird, wo doch die TextBox den Fokus hat ...
Erklär mal bitte, denn ich für mich ist es das nicht, da definitiv die TextBox den Fokus hat - u. somit das TabControl nicht den Fokus haben kann, oder ?
(geht das unter .NET doch ? - bei VFP war das jedenfalls ausgeschlossen !)
System.Windows.Forms.TabControl, TabPages.Count: 6, TabPages[0]: TabPage: {Kuh}
System.Windows.Forms.MaskedTextBox, Text: 276 05 366 96090
Eine Ausnahme (erste Chance) des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.
Eine Ausnahme (erste Chance) des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.
Wie gesagt die Pageframe feuert noch vor der TextBox ...
Was dieses "ArgumentOutOfRangeException" in diesem Zusammenhang bedeutet - k.A.
Ich habe das ja mit "e.Handled = true" lösen können, nur verstehen würde ich das jetzt auch noch gerne ...
OK, das löst das Problem, erklärt aber immer noch nicht, warum eine Pageframe, die nicht den Fokus hat, auf das KeyDown einer Textbox reagiert, und das auch noch vor der Textbox ...
Trotzdem Danke für den Tip (kannte ich noch nicht ...)
Wenn ich nun in einer Textbox "{Enter}" drücke wird diese Funktion zweimal(!) durchlaufen, einmal für die Pageframe(?) und einmal für die Texbox, die den Focus hat...
Kann mir jemand erklären, warum das so ist ? (Die Pageframe hat ja nicht den Focus; und die Form macht das nicht ...)
Im Moment habe ich mir geholfen, in dem ich das KeyPress-Event der Pageframe zurückgesetzt habe, aber das kann ja eigentlich nicht die Lösung sein, zumal die Pageframe ja auf Keys.Escape reagieren soll !
- nicht erst das expandieren / verbergen, und den Knotenpunkt programmieren muss
- auch optisch der Treeview besser aussieht (zumindest bei meinen Tests...)
Weiterhin weiß ich im Moment auch gar nicht, ob mit deinem Vorschlag (eingebettete ListBox/ListView) so einfach Drag&Drop möglich wäre (habe ich noch nie gemacht ...) ?
Hättest Du ein Besipiel / Bild von deinem Vorschlag ?
P.S.:In dem Bild ist der Kunde die Gruppe und der Artikel das Item ...
irgendwie stehe ich gerade wohl auf der Leitung ...
Ich suche ein Control, welches im Prinzip so aufgebaut ist, wie das Toolbox-Control im Designer.
Ich muß Kunden (also die Gruppen) und deren dazugehörigen Artikel (also Elemente) dynamisch anzeigen können, zudem muß es auch noch Drag&Drop-fähig sein.
Dafür scheint mir ein solches Control ideal, zumal es ja auch noch eine Scrollbar enthält...
Ich weiss, das ich das auch mit einem ToolStrip und DropDown-Buttons machen könnte, das ist aber schon rein optisch nicht so schön ...
da ich vor dem selben Problem stehe, wollte ich mal nachfragen, wie Du das jetzt gelöst hast ?
Für mich kommen eigentlich auch nur Verbindungen ohne Internet in Frage.
Zu Zeiten von Window Mobile gab es ja noch die Möglichkeit mit Hilfe vom WindowsMobileDeviceCenter und BalticSD.WindowsMobile.dll zu prüfen, ob ein MDE angeschlossen war, aber so etwas scheint es ja bei Windows Phone nicht mehr zu geben und unter Windows 10 lässt sich das WindowsMobileDeviceCenter ja auch nicht mehr installieren
Alles nur noch Online
Das sieht zwar alles nach schöner neuer Welt aus (immer und überall Zugriff, etc.), aber die Firmenkunden wollen das nicht ("meine Daten bleiben hier im Haus")
private static Exception GetDateTimeParseException(ref DateTimeResult result) {
switch (result.failure) {
case ParseFailureKind.ArgumentNull:
return new ArgumentNullException(result.failureArgumentName, Environment.GetResourceString(result.failureMessageID));
case ParseFailureKind.Format:
return new FormatException(Environment.GetResourceString(result.failureMessageID));
case ParseFailureKind.FormatWithParameter:
return new FormatException(Environment.GetResourceString(result.failureMessageID, result.failureMessageFormatArgument));
case ParseFailureKind.FormatBadDateTimeCalendar:
return new FormatException(Environment.GetResourceString(result.failureMessageID, result.calendar));
default:
Contract.Assert(false, "Unkown DateTimeParseFailure: " + result);
return null;
}
Du hast völlig Recht, es funktioniert auch im Debugger, wenn ich die entsprechende Ausnahme deaktiviere...
Aber kann man das nicht hinbekommen trotz aktivierter Ausnahme ?
Denn die Frage die jetzt auftaucht, ist doch: ist das "sauberer Quellcode" oder etwas was man so eigentlich nicht machen sollte, denn damit habe ich doch jede Möglichkeit beendet, diesen Fehler (egal wo im Quellcode) mittels Debugger zu finden ...
Gedanklich denke ich an einen Befehl der nur innerhalb der Klasse wirksam ist ...
Unter FoxPro hatten wir diese Möglichkeit mit Hilfe von Set-Systembefehlen.
schreibe, erhalte ich einen Fehler "ArgumentException wurde nicht vom Benutzercode behandelt. Der Wert liegt außerhalb des erwarteten Bereichs." - was ich dahingehend interpretiere, das die MaskedTextBox eine Exception nicht verarbeiten kann , richtig ?
public class ohrmarke
{
string x_ohrmarke;
public static ohrmarke Parse(string xx_input)
{
if (xx_input.Length < 13)
{
// validierung ungültig
return null;
}
else
{
return new ohrmarke();
}
}
}
und diesen Typ auch bei der MaskedTextBox als
ValidatinType = typeof(ohrmarke)
hinterlegt habe, hätte ich jetzt eigentlich erwartet, das beim return null das Ereignis TypeValidationCompleted nicht mehr ausgelöst wird - MaskedTextBox.TypeValidationCompleted - wird es aber dennoch und auch e.IsValidInput ist true ...
Was habe ich da denn jetzt wieder nicht verstanden ???