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

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von MoaByter
Thema: Fehler beim Schreiben ins ToolStripStastusLabel
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke für eure Antworten!

Also: Ich habe geschlampt, ich hab' 'nen Fehler gemacht - wobei das Schlampen auch schon 'n Fehler ist - und eine Frage ist noch offen.

@hypersurf: Das irritierte mich eben an der Sache.
@Stefan.Haegele: Deswegen schrieb ich 'VS2017':. Alle Controls werden im Designer erzeugt, sind also != null. War zu knapp erklärt, Scusi.
@Abt - und auch die beiden anderen:
ich sollte einfach nicht mehr um 2 Uhr morgens programmieren...

Die Elemente im DGV[] a_dgv können nicht null sein, es wird als erstes im Form_Load-Event erstellt.
Beim Debuggen war CurrentCell nicht null und trotzdem wurde der Disassambler in Zeile 11 aufgerufen, auch wenn ich statt dgvc.CulumnIndex eine Integer eingesetzte. Warum das? Das ist die offene Frage.
Mein Fehler lag allerdings in der - neuen - Klasse, die die DGVs mit Daten füllt. Es gibt 5 DGVs, das sechste hatte ich per Code ausgeklammert, wg. eines Tippfehlers wurde das aber doch wieder bearbeitet (for-Schleife). Das habe ich übersehen.
Und die Schlampigkeit, dgvc nicht auf null zu prüfen ... Früher war's nicht nötig, es war nie null. Der Code stammt aus meinen Anfangszeiten, als ich gerade C# lernte. Ein schlechte Entschuldigung.
Jetzt - mit Null-Prüfung - nötig, da die Zeilen der DGVs mit dgv.Rows.Clear() gelöscht werden, funktioniert's tadellos.
Die Prüfung am Schluss bezieht sich eigentlich nur auf 'Value', das 'dgvc != null' stand nur zur Vervollständigung drin. Der 'Value != null'-Test war entscheidend.

Ich hab's jetzt also geändert:


actCol[aSTab] = actC = dgvc == null ? -1 : dgvc.ColumnIndex;	// aktuelle CurrentColumn oder -1
tsslColValue.Text = actC + 1 + "/" + dgv.ColumnCount;			// ToolStripStatusLabel: Text eintragen
(dto. für .RowIndex), alles andere bleibt so. Ich brauche in actCol[]/actRow[] einen verwertbaren Wert, deswegen so.

Fehler
Also bleibt nur noch die Frage, warum beim Debuggen der Disassembler aufgerufen wird, das verstehe ich nicht.

Wie gesagt, beim Normalbetrieb stört's nicht, mich hat's gestern/heute-morgen nur völlig iriitiert, weswegen ich den Ablauf gar nicht erst getestet hatte.

Mit dem nullable-System beschäftige ich mich gerade, hatte es bisher nur teilweise verwendet (string s = dgv[x,y].Value? "abc"; )

Danke nochmals, viele Grüße, bleibt gesund - ...lypô

Thema: Fehler beim Schreiben ins ToolStripStastusLabel
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe in meiner Anwendung - erstellt mit VS2017 - ein ToolStripStatusLabel, das mit einem Text vorbelegt ist: "-". In dieses Label werden im Verlauf die Koordinaten der CurrentCell einer Tabelle eingetragen, das ging über 7 Jahre auch ohne Probleme. Ich habe jetzt einige Variablennamen global geändert ... und schon gibt's Ärger.



		/// <summary>
		/// Setzt System-Variablen und Statusanzeige auf die Adresse der aktiven Zelle
		/// </summary>
		/// <date>210406-2330</date>
		void SetStatusLabel()                                               // Anzeige der Statusleiste setzen
		{
			DataGridView dgv = a_Dgv[aSTab];							    // a_Dgv: DGV-Array
			DataGridViewCell dgvc = dgv.CurrentCell;						// dgvc: DGV-Zelle CurrentCell

			actCol[aSTab] = actC = dgvc.ColumnIndex;						// aktuelle CurrentColumn
			tsslColValue.Text = actC + 1 + "/" + dgv.ColumnCount;			// ToolStripStatusLabel: Text eintragen -> FEHLER!

			actRow[aSTab] = actR = dgvc.RowIndex;						    // aktuelle CurrentRow
			tsslRowValue.Text = actR + 1 + "/" + dgv.RowCount;				// ToolStripStatusLabel: Text eintragen -> FEHLER!

			if (dgvc != null && dgvc.Value != null)							// wenn CurrentCell und CC-Value != null...
				tsslWertValue.Text = (dgvc.Value + "").Replace("&", "&&");  // Ampersand im Text ersetzen
			ststMid.Refresh();											    // Aktualisieren
		}

Die Variablen stimmen alle, die Werte sind: dgvc != null, aSTab = 4, dgv.ColumnCount = 6, .RowCount = 1. Die Struktur, der Aufbau, ist über all die Jahre gleich geblieben - was sollte ich auch ändern? Das Verrückte: Manchmal funktioniert's, allerdings nur beim Debugging.

Folgende Fehlermerldung:
Fehler
StackTrace:
System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei trotto.Trotto.SetStatusLabel() in ...\Trotto.cs:Zeile 769. (Das ist die erste tssl-Zeile, 11)

Nur ist da nix null. Das einzige, das null sein könnte, ist dgv.ColCount und .RowCount, die sind aber klar definiert != null: Wert = 6 bzw. 1.
In Zeile 11 bzw. 14 (tssl) springt der Debugger dann in den Disassembler. Siehe Anhang.

Was also ist da los? Was übersehe ich? Es hatte doch funktioniert, warum jetzt nicht mehr?

Ich habe die Screenshots vom Disassembler und der Aufrufliste angehängt.

Thema: mit Task.Factory.StartNew eine class aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ein interessanter Artikel - warum hab' ich den bei meiner Suche nicht gefunden? Bedankt jedenfalls!
Mal sehen, ob ich das so bei mir einbauen kann, einige Anpassungen muss ich vornehmen, da die Tabellenformatierung bei mir in der jeweiligen Datei notiert ist. Und ich muss die Zeilen-, Zellenfarbe ändern können, könnte klappen.

Den Bearbeitungscode in meinem Programm muss ich regelmäßg prüfen und b.B. anpassen, da die Webseiten, die ich - erlaubt - auslese, auch weiterentwickelt werden.
Tatsächlich könnte ich mit DataBinding auch an anderen Stellen viel Code vereinfachen/ersparen.

Teilweise bzw. in Ansätzen ist das 3-Schicht-Modell schon realisiert, da ziemlich schnell klar wurde, dass es kompliziert wird. Mangels Informationen - und Zeit - habe ich es leider auf "später...!" verschoben, jetzt rächt sich das ... naja, is' ja noch nicht zu spät.

Also euch allen herzlichen Dank für eure konstruktiven Beiträge, sie haben mir sehr geholfen. Manchmal braucht's eben ein paar Gedankenanstöße - fertige Lösungen bringen nichts, da ich's dann nie lerne. Schließlich hab' ich mit dem Bau des Programms C# in der praktischen Anwendung gelernt. So ist's doch eher überraschend, dass das Programm jetzt seit 8 Jahren recht problemarm läuft.

Thema: mit Task.Factory.StartNew eine class aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Abt
Dass Tasks und das Async/Await-System erstmal eine Lernhürde darstellen: absolut!
Das meinte ich. Aber durch muss ich, wenn's mit dem Programm was werden soll. Ich geh' mal davon aus, dass ich den Minijob auch bei Rente behalten werde.

Verstehe ich das mit dem DataBinding richtig: Wenn sich die Datenquelle ändert, wird diese Änderung automatisch ins Dgv übernommen? Ich habe für meine Tabellen eine textbasierte Datenbankdatei, Erweiterung .mtgt. Da stehen die Tabellenformatierungsdaten drin, 9 Zeilen, und die Zelleninhalte (Text). Die kann ich aber nicht anbinden/auswählen, vermutlich weil kein definiertes Protokoll existiert. Ich habe allerdings eine Klasse, mit der ich die Tabellen aus den Dateien lade und in einer Variable speichere, aber ob man das Protokoll nennen darf? Übrigens werden die Datenbankeinträge tatsächlich nur und ausschließlich programmgesteuert vorgenommen. wenn da was schief läuft, muss ich die Software ändern, da die aufegrufene Quelle/Webseite sich geändert hat. Ich benötige also keine Eingabemaske für die Datenbank.

Da denke ich mir, ich könnte in dem Feld für die Variable eine Exception starten, wenn sie geändert wird - oder wie startet man ein Event? Aufgrund dieses Events/dieser Exception müsste dann die zugehörige Tabelle neu geladen werden. Ginge sowas? Ich bastele gerade daran.

Ah: event – C#-Referenz
Ich könnte auch pro Tabelle ein verstecktes Textfeld anlegen mit "OnTextChange"-Event.



Thema: mit Task.Factory.StartNew eine class aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Erst einmal ein braves Dankeschön an euch alle: Abt, Th69, FZelle, inflames2k!

Bisher hatte ich in meinem Programm mit BackgroundWorkern gearbeitet, bei dem das ReportProgress schwierig und aufwändig war, bis man mir sagte, der sei veraltet, besser seien Threads oder Tasks. Mit Threads funktierte alles recht gut, nur die Datenüber- und -rückgabe gestaltete sich problematisch. Also Tasks? Die sind offensichtlich auch nicht ganz ohne, zu denen fehlt mir noch das Wissen. Auch wenn Abt meint, das sei auch mit Tasks super einfach ... wenn man weiß wie's geht, stimmt das wohl, wenn nicht, muss man sich durchbeißen und lernen.

Zu meiner Person: Ich komme aus der HTML/javascript-Ecke, davorvorvor TI-58 (programmierbarer Taschenrechner), Schul-, Studienzeit Mitte 70er Jahre).

Mit diesem meinem Programm begann ich 2013 C# zu lernen - es sollte drei Aufgaben erledigen, dann kamen Webseitenanalysen mit Down- und Uploads dazu. Mittlerweile ist es auf eine Größe angewachsen, bei der es mir echt schwerfällt, den Überblick zu behalten: etwa 2,5MB an selbstgeschrieben .cs-Dateien.
Deswegen dachte ich auch schon an das:

3-Schicht-Modell: Ich bin am Umbau. Da das Programm aber weiter täglich funktionieren muss, ist das nicht ganz trivial. Und da ich es damals noch nicht kannte, hatte ich den KISS-Weg gewählt - überaus erfolgreich, wesegen ich jetzt vor dem Dilemma stehe.

Parallele Programmierung: mit Tasks, TPL, await & Co. sind für mich noch sehr neu - mal abgesehen vom BackgroundWorker.

Deadlock: Irgendwas in dieser Richtung vermutete ich schon, konnte nur nicht den Grund dafür finden, stellte aber schon fest, dass das Programm einfach stehen blieb und nur mit dem Taskmanager abschaltbar war. Der Hauptthread schien tot.

DataBinding: Das habe ich bisher noch nicht genutzt, sondern alle Daten brav & artig in die Tabellen und parallel dazu in Variablen geschrieben, müssen halt nur gleichermaßen aktuell gehalten werden. Nicht ganz einfach, aber mit etwas Sorgfalt zu schaffen.

Async Antipatterns: Bin noch am Lesen, vieles ist mir allerdings schon klar - und davor gewesen, auch wenn ich diese Probleme noch nicht hatte.

ObservableCollection: Das klingt interessant. Mal sehen, was ich darüber erfahre.

Im Moment kämpfe ich allerdings noch mit VS2019Com, davor VS2017Com, das Debugging ist mir kaum möglich, ich bekomme jede Menge Meldungen, "Der Wert der Variable kann nicht angezeigt werden, da sie wegoptimiert wurde". Auch Haltepunkte werden mal eben übersprungen. Aber das gehört zu einer anderen Anfrage, die ich noch erstellen muss. Jetzt muss erstmal mein Programm wieder laufen, sonst gibt's Ärger vom Chef.

Gehabt euch wohl, bleibt gesund - wie gut, dass ein Computer sich nicht mit C. infizieren kann :-)), viel Erfolg bei euren Aktivitäten,
viele Grüße - ...lypô aus Moabit.

Thema: mit Task.Factory.StartNew eine class aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Auha! Danke für deine ausführliche Antwort, ich werde etwas Zeit brauchen, um alles zu durchforsten.

Die Zeile 6, "string.IsNullOrEmpty..." ist doch aber nötig. Ich muss das Resultat auf null prüfen, denn es wird weiter verarbeitet, und bei task.Result == null stürzt das Programm ab.
Das Realisieren mit dem Zwischenspeicher ist mit noch nicht klar, ich belese mich weiter.
Mit Task.Run... kam ich nicht weiter, sollte wohl von selbst starten, tat es aber nicht. Meine Vorlage:
Task Klasse

Es läuft ja die gesamte for-Schleife in dem Task. An der Stelle ist nix parallel. Ich wollte noch zwei Prozesse zusätzlich parallel laufen lassen, aber wenn ich nicht mal mit einem klarkomme ......schluchz! :-))

TPL hatte ich schon gesehen, aber noch nicht gelesen.

Die Notwendigkeit der Prüfung des Invoke habe ich unterlassen, da das Ergebnis auf jeden Fall true ist. Auslesen aus 'nem DGV geht ohne, einschreiben nur mit.

Ich wollte eigentlich, dass das Dgv seine zeilen aktuell bekommt - als eine Art deutlich sichtbarem Fortschrittsbalken. Mit Thread(newThreadStart()) funktionierte es, deswegen war ich überrascht, dass es bei Task nicht läuft.

Und jetzt werde ich lesen...
Bedankt nochmal!

Thema: mit Task.Factory.StartNew eine class aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

in meinem Programm erstelle ich einen Task, der in einer Unterklasse längere Aktionen ausführen soll: Webabrufe, Umwandlunge u.ä.
Die Ergebnisse soll das Programm mithilfs Invoke in ein DataGridView schreiben.


SubClass scl = new SubClass()
{
    dgv = MeineTabelle
};
Task<string> task = Task.Factory.StartNew(scl.Tuwat);
if(string.IsNullOrEmpty(task.Result) return;
// Weiteres in der Hauptklasse

// in der Unterklasse scl:
void string Tuwat()
{
    for (int i...)
    {
        //  Webabruf(e)...
        dgv.Invoke(...);// delegate(...) ist korrekt, dgv wurde korrekt übergeben
    }
    return "xyz";
}

Am dgv.Invoke bleibt das Programm hängen, wartet... Habe ich an den Tasks etwas falsch verstanden?
Danke für Tipps und Hinweise!

Thema: Wie kann ich die Reaktion auf Eingabe in ComboBox/TextBox verzögern?
Am im Forum: GUI: Windows-Forms

hai Leute,

ich habe eine Liste/ein Array mit reichlich Einträgen. Diese Liste möchte ich nach einem Text durchsuchen, den ich in die ComboBox/TextBox eingebe.
Über das Event TextChanged startet üblicherweise die Suche. Nun möchte ich aber eben diesen Start verzögern, wenn ich mehrere Zeichen kurz nacheinander in die TextBox eingebe. Bei Windows funktioniert das gut, in meinem Programm bekomm' ich's nicht hin, da ja jede Änderung des Textes eine neue Suche in einer neuen Instanz (?) startet.

bei meiner Internetsuche hat mir der im Titel genannte Suchbegriff (oder ähnliches) nicht geholfen. Habt ihr 'nen Tipp, wonach ich suchen muss? Den passenden Code bastele ich mir dann schon.
Ich weiß eben nur nicht, wie und wo ich ansetzen muss.

Danke im Voraus, viele Grüße, ein schönes neues Jahr an alle - ...lypô

Thema: "Die angeforderte Ressource wird bereits verwendet"
Am im Forum: Grundlagen von C#

using System.Windows.Forms;
using SWF = System.Windows.Forms;

...

SWF.Timer tm2 = new SWF.Timer { Interval = 1 };

Deswegen...

Thema: "Die angeforderte Ressource wird bereits verwendet"
Am im Forum: Grundlagen von C#

Mit meinem Programm aktualisiere ich eine Webseite, d.h. ich erhalte Texte als PDF oder *.doc-Datei, das Programm formt diese passend um und lädt sie über ein dem Browser nachgebildetes Interface in eine Datenbank hoch. Das muss einwandfrei funktionieren - auch wenn's nur ein MiniJob ist, es ist 'n Job. Mit dem Backgroundworker tut's das, Aktualisierung auf Tasks dann, wenn ich mit den Task-Geschichten klar komme. Manches findet den Weg in mein Gehirn nicht so schnell. :-( Und das ist 'ne Entschuldigung ... für mich ... vorerst.

Ich nutze den SWF-Timer. Bei den anderen muss ich mal schauen, was die bieten.

Bedankt, gehabe dich wohl - ...lypô

Thema: "Die angeforderte Ressource wird bereits verwendet"
Am im Forum: Grundlagen von C#

Ja, ich meinte System.Windows.Forms -> SWF. Mit WPF habe ich mich noch nicht beschäftigt.

Thema: "Die angeforderte Ressource wird bereits verwendet"
Am im Forum: Grundlagen von C#

Uiuiui... Soweit bin ich mit meinen Kenntnissen noch nicht. Mit anderen Tasks hab' ich's mal versucht, war aber erfolglos, kommt also noch.

Ich notiere mal deinen Beitrag in meiner ToDo-Liste. Besonders den SynchonisationContext kenne ich nur namentlich. Das UI-Framework ist VisualStudio 2017, früher -express, jetzt wohl -common oder so ähnlich, die kostenlose Version also.

Ich habe jetzt erstmal genug Gedankenanstöße bekommen, die mich 'ne Weile beschäftigen werden. Da es so im Moment gut funktioniert, kann ich mich in Ruhe mit den anderen Dingen befassen.

Dir also auch recht herzlichen Dank, ich melde mich, wenn neue Fragen auftauchen.

Macht's gut, macht's besser - ...lypô

Thema: "Die angeforderte Ressource wird bereits verwendet"
Am im Forum: Grundlagen von C#

Ist ein Timer denn ein anderer Thread?

Ich starte in der 'Form1' einen Timer, um die Prozesse zu entkoppeln, und von dort aus beschreibe ich den Browser. Wenn der dann abgelaufen ist, wird ein BackgroundWorker in einer eigenen Klasse gestartet, der verschiedene Webzugriffe durchführt und am Schluss über Invoke in den WebBrowser eine Zeile einträgt. Klingt verrückt, dass ich nicht den ReportProgress verwende, nur wird mir der zu groß - zuviele Tests, wer meldet und was getan werden soll usw...

Das funktioniert ja auch ganz gut und sehr flott, nur kam eben diese merkwürdige Meldung. Aber nun ist's ja wohl gelöst. Dank auch dir für deine Hilfe.

Viele Grüße, alles Gute - ...lypô

Thema: "Die angeforderte Ressource wird bereits verwendet"
Am im Forum: Grundlagen von C#

Danke für deine Antwort.

Ja, es sind mehrere Threads. Mittlerweile ist die Meldung aber wieder aufgetaucht: Während des Debuggens beim RechtsMausKlick auf den Browser während ein Timer die Zeitangabe alle Sekunden verändert. Ob das nun nur während des Debuggens auftritt, weiß ich nicht, im Normalbetrieb ist es noch nicht passiert.

Dennoch: Gibt es eine Möglichkeit, während des Schreibvorgangs im Timer einen threadfremden Zugriff zu erkennen? Alternativ müsste ich in der Vorlagedatei Javascript einsetzen, um die Veränderungen herbeizuführen, bin darin aber nicht sonderlich gut und habe es deswegen noch nicht probiert.

Mittlerweile konnte ich einen Screenshot der Meldung erstellen, der hängt an.

Und jetzt habe ich mal das HRESULT in die Suche eingegeben und wurde fündig:
https://stackoverflow.com/questions/2190390/how-to-fix-the-requested-resource-is-in-use-exception-from-hresult-0x800700a

Merkwürdig, dass die 'IsBusy'-Abfrage nicht funktionierte, war nämlich meine erste Idee. Also okay, wieder was dazu gelernt. damit dürfte sich das Thema erledigt haben. Danke für deine Hilfe!

Gehabt euch alle wohl, bleibt gesund - ...lypô

Thema: "Die angeforderte Ressource wird bereits verwendet"
Am im Forum: Grundlagen von C#

hai und hallo,

ich bekam beim Debuggen die im Titel genannte Meldung und wüsste jetzt gerne, ob ich mit meiner Vermutung richtig liege.

Bei der zweiten Zeile (wbInfo = WebBrowser) kam die Meldung:

string txt1 = "Aktualisierung in: " + min + ":" + s_sec + i_sec + " min";
wbInfo.DocumentText = doc.Replace(m_rplc.Groups[1].Value, txt1);
return;

Auf den WebBrowser wird in gleicher Form von mehreren Stellen aus zugegriffen, allerdings sollte das vom Ablauf her nie gleichzeitig/überschneidend passieren - eigentlich auch beim Debuggen nicht. Wie frage ich ab, ob das WebBrowser.Dokument gerade beschrieben wird? Ich finde dazu leider nichts.

Der Fehler scheint auch nicht oft aufzutreten, er ließ sich jedenfalls nicht reproduzieren.
Danke für Hilfe/Kommentare.

...lypô

Thema: html-Seite projekt-intern erstellen und über WebBrowser ausgeben
Am im Forum: GUI: Windows-Forms

Danke für Deine schnelle Antwort.
Hmja, dann muss ich den Text wie zuerst geplant in eine Textbox packen, den Rest ohne Bilder. Das kann ich dann halt nicht ändern.
Schade eigentlich...

Schöne Weihnacht und 'nen Guten Rutsch ...lypô

Thema: html-Seite projekt-intern erstellen und über WebBrowser ausgeben
Am im Forum: GUI: Windows-Forms

Hallo,
ich möchte in einem Projekt eine html-Hilfeseite projekt-intern erstellen und ausgeben. Klingt einfach, ist' wohl nicht.
Ablauf:

    Ich erstelle im VS2017 eine html-Seite - funktioniert. Nur: wie rufe ich diese per Button-Klick auf? Diese Seite liegt nur als Code vor und soll nicht gespeichert werden.
    In der html-Seite sind Grafiken, diese sollten aus den Ressourcen eingebunden werden. Wie? <img src="Resource/img.xy> wird nicht angezeigt.<
    keine Fehlermeldungen, mit "Buildvorgang: Eingebettete Ressource" wird zwar die html-Seite angezeigt, nur die notwendigen Grafiken fehlen.
Externe Webseite einzubinden ist ja nicht schwer, nur sollte hier alles in einer einzigen exe-Datei vorliegen. Geht das überhaupt?
Mit dem im Titel genannten Suchbegriff komme ich nicht weiter. Abwandlunge helfen auch nicht. Suche ich falsch?
Ich hoffe, das kommt jetzt verständlich 'rüber...
Hat jemand dazu vielleicht einen Tipp oder eine Idee? Danke!

Thema: Visual Studio legt gefühlt zufällig *.Designer.cs bzw *.Designer1.cs Dateien an
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ja, allerdings weiß ich nicht mehr, ob der Fehler direkt danach oder nur nach 'nem Drag'nDrop auftauchte. Seitdem hatte ich auch keine Grafiken hinzuzufügen. Ich probier's mal beim nächsten Projekt.
Dennoch ist's schon merkwürdig, da Drag'nDrop ja nun keine große Aktion ist. Ein Bug wär's allemal.

Schlimmer ist's da schon, dass VS manchmal - unerlaubt und ohne Meldung - im Designer 'rumfuhrwerkt. Ich hatte es jetzt schon mehrmals, dass es mir die Menüleisten geleert hatte: Das menuStrip.Items.AddRange(...) wurde gelöscht. Die MenuItems waren zwar noch alle da, ich musste sie allerdings manuell wieder zum menuStrip hinzufügen. Wenn das an einem Tag dreimal passiert, ist der Tag vorbei.

Thema: Wie bekomme ich einen Eintrag eines Projekts in "Systemsteuerung" -> "Programme und Funktionen"?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Danke für Deine Info, Abt.

32bit-Prozess/32bit-System: Is' schon klar, ich weiß halt nur nicht, wie ich das anweise, habe es allerdings auch noch nicht gebraucht.

Und dass VS die Programme nicht erstellt, ist auch klar. Da aber der Compiler - für den Anwender transparent im Hintergrund - von VS angestoßen wird, habe ich mal die kurze Definition verwendet.

Wenn man halbwegs stressfrei programmieren will, ist VS schon - mehr oder weniger - ein Muss.
Meine html-Seiten erstelle ich mit Notepad++, dazu geht's noch, nur für C# bietet es sehr wenig Unterstützung. Da lob ich mir VS, auch wenn es hin und wieder mal ganz merkwürdige Fehler an den Tag legt. Dazu hatte ich ja auch 'nen Beitrag erstellt.

Thema: Wie bekomme ich einen Eintrag eines Projekts in "Systemsteuerung" -> "Programme und Funktionen"?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Th69
Generell solltest du 32bit-Programme unter dem 32bit-Registryschlüssel eintragen und 64bit eben unter dem 64bit-Registryschlüssel.
Bei "AnyCPU" Builds würde ich es unter 32bit eintragen (da es ja auch auf reinen 32bit-Systemen dann noch laufen würde).
Gutes Argument. Es wird zwar kaum noch 32bit-Systeme geben, aber vorsichtshalber...
Ob es ein 32bit-Programm ist, weiß ich nicht. Ich hörte/las mal, VS könne nur 32bit-Programme erstellen, woran ich leise Zweifel hege. Da ich es aber unter x86 speichere, wird die 32bit-Wahl kein Fehler sein.
Zitat von Th69
PS: Mein Avatar ist die "Diablo 2 Sorcerer" (mein Alter Ego und ich nenne sie "KaiLid", nach einer Zauberin von den Eisebenen aus einem der Dragonlance-Büchern).
Hm - ich dachte, ich hätte diesen Avatar mal auf blendpolis gesehen. Eisebenen? Dragonlance-Bücher ...ähm...? :-))

Thema: Wie bekomme ich einen Eintrag eines Projekts in "Systemsteuerung" -> "Programme und Funktionen"?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ha! Fehler gefunden. Wie unschwer zu erkennen, ist das Programm im Unterschlüssel eingetragen. Wenn ich das "lypo_eu" weglasse, funktioniert's - egal ob ich es 32bit- oder 64bit-Schlüssel eintrage.
Was würdest Du empfehlen? Das Programm ist unter x86 eingetragen, im Visual Studio habe ich allerdings die "32bit-bevorzugen" (Reiter Build) 'rausgenommen. Ich könnte die Selection im Code auch weglassen, mal sehen, wo VS dann den Schlüssel einträgt. :-))

Danke für Deine Hilfe, gehab Dich wohl ...lypô

PS.: Dein Avatar - stammt der von "Blender3D"?

Thema: Wie bekomme ich einen Eintrag eines Projekts in "Systemsteuerung" -> "Programme und Funktionen"?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hm - zwei Bilder pro Antwort geht nich'? Dann eben so.
Hier also der Screenshot der Registry:

Thema: Wie bekomme ich einen Eintrag eines Projekts in "Systemsteuerung" -> "Programme und Funktionen"?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Mit meine4m Programm habe ich jetzt mal die 32Bit-View und die 64Bit-View ausgelesen, dazu gibt's noch 'nen Screenshot der Registry (regedit). Die 32Bit-Variante ist wohl ein älterer Eintrag, also von gestern. er ist aber bis auf den "EstimatedSize"-Wert identisch - naja, das NoRepair usw. fehlt, was aber nichts ändern dürfte.

Thema: Wie bekomme ich einen Eintrag eines Projekts in "Systemsteuerung" -> "Programme und Funktionen"?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Danke für Deine Antwort, pinki.

Ich wusste gar nicht, das es zwei Ansichten gibt. Leider ändert das nichts, funktioniert auch nicht:


string key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ReForm";
RegistryKey key64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey key32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);

RegistryKey newKey = key64.CreateSubKey(key);   // dieser
RegistryKey newKey = key32.CreateSubKey(key);   // oder der

usw. ...
In der Systemsteuerung/Programme und Funktionen ist beides nicht zu finden.
Hm... noch 'ne Idee?

Thema: Wie bekomme ich einen Eintrag eines Projekts in "Systemsteuerung" -> "Programme und Funktionen"?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo!

Ich habe für eines meiner Projekte ein eigenes Installationsprogramm geschrieben, das soweit auch gut funktioniert. Nur klappt das mit dem Eintrag unter Programme und Funktionen nicht. Den Betrag

"Programme und Funktionen" registrieren

habe ich gelesen, funktioniert nicht. Auf Microsofts Seiten - wie z.B.

https://docs.microsoft.com/de-de/windows/desktop/Msi/uninstall-registry-key

habe ich mich informiert und die Hinweise genau befolgt, funktioniert nicht. Ich habe bei anderen Programmen in meiner Registry geschaut und es so nachgebaut, funktioniert nicht.
Eine intensive Internetsuche förderte auch nichts hilfreiches zutage.
Hat jemand 'ne Idee, was ich falsch mache?

Hier etwas Code dazu:


using Microsoft.Win32;
...
string key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ReForm";
RegistryKey newKey = Registry.LocalMachine.CreateSubKey(key);		
newKey.SetValue("DisplayIcon", exepfad + ",0");  
newKey.SetValue("DisplayName", "ReForm (x86) 0.70");  
newKey.SetValue("DisplayVersion", "0.7");
newKey.SetValue("EstimatedSize", "1200");
newKey.SetValue("InstallLocation", exepfad + "\\");
newKey.SetValue("Publisher", "MoaByter");
newKey.SetValue("UninstallString", uninstexe);
newKey.SetValue("VersionMajor", 0);
newKey.SetValue("VerisonMinor", 7);

exepfad und uninstexe sind die Pfade zur jeweiligen exe-Datei einschließlich Dateiname. Die EstimatedSize habe ich getestet, die Zahl ausgedacht anhand annderer Einträge.

Mit externen Installer-Programmen habe ich noch nicht gearbeitet, aber die können ja auch nicht mehr tun, als den richtigen Code erstellen, oder?

Thema: Visual Studio legt gefühlt zufällig *.Designer.cs bzw *.Designer1.cs Dateien an
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Tut mir leid für die späte Antwort, ich bekam leider keine Benachrichtigung. Gibt's das hier nicht? Ich hatte es markiert.

Zitat von Th69
Abt, darum geht es dem TE nicht (das weiß er wohl).
Er fragt, warum neben der ".Designer.cs" auch eine ".Designer1.cs" angelegt wird.
Danke für Deine Hilfe, Th69. Ja, wozu der Designer gut ist, was er tut, das weiß ich, das Gleiche gilt für die .resx-Dateien.
Zitat von Th69
MoaByter, verwendest du eine Sourcecode-Versionsverwaltung? Sind die Dateien evtl. schreibgeschützt (so wie es z.B. SVN macht), so daß der Designer dann eine neue anlegt (anstatt die vorherige zu überschrieben), s.a. Weird “Designer1.cs” files created?
Kein Schreibschutz, nichts blockiert - das passiert überraschend einfach irgendwann mal, wenn ich 'ne neue Grafik per Drag'nDrop in die Ressource.resx einfüge. Nervend häufig hatte ich es, als ich auf VS2017 aktualisiert habe. Die Lösung ist denkbar einfach und sogar weniger kompliziert als bei stackoverflow beschrieben: Es ist kein externes Programm nötig, das Redigieren der csproj reicht - und natürlich die .designer.cs löschen, die .designer1.cs umbenennen. Als VS die resx verdoppelte, war's schon schwieriger. Ich hab's aber hinbekommen.

Ich wollte daher auch nur wissen, ob ich der Einzige bin, dem das passiert oder ob es weitere Erkenntnisse bei anderen gibt. Ich hatte auch schon im Microsoft-Forum nachgefragt, aber der einer dort verstand nun gar nichts und warnte mich nur, ich solle darin nicht "rumfummeln". Weltuntergang und so...
Manchmal bleibt mir gar nichts anderes übrig, da im Entwurfsmodus dann nichts mehr angezeigt wird. Blöd gemacht von Microsoft - naja, sonst ist VS ja schon toll.
Es scheint also nur(?) bei mir aufzutreten, oder?

PS.: Mit Sourcecode-Versionsverwaltung habe ich bisher noch nicht gearbeitet, kommt noch. Der ganz große Durchblick fehlt mir noch, meine Projekte funktionieren auch so ganz gut. Aber ich lerne bei jedem Projekt dazu - mächtig gewaltig.

Thema: Visual Studio legt gefühlt zufällig *.Designer.cs bzw *.Designer1.cs Dateien an
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,
ich erlebe es häufiger, dass VS2017 "nach Gutdünken" mehrere Resources.Designer anlegt. Ist das ein Bug in dieser Version? Mir passierte es mittlerweile in mehreren Projekten. Manchmal stehen beide Resouces.Designer in Properties und heißen dann ...Designer.cs und ...Designer1.cs oder sie stehen - wie gerade eben - in verschiedenen Verzeichnissen.
Ich suche schon elendig lange nach einer Erklärung, finde aber nix dazu.
Weiß jemand mehr? Wodurch kann man das verhindern? Es ist immer wieder nervig.

Thema: Warum werden Word-Dateien nicht immer gefunden?
Am im Forum: Office-Technologien

Danke für die Antwort, MrSparkle.

Klingt intereassant. Ich werd's nachher ausprobieren, bin jetzt gerade bei 'nem anderen Projekt.

Wie schon geschrieben, hatte ich das Problem zwar gelöst, aber keine Erklärung, warum es mit explizieter Programmzuordnung nicht funktioniert, ohne diese aber schon.
Mittlerweile habe ich eine dringende Vermutung:
Wenn ich das Programm - hier also WinWord.exe - direkt ansprechen, werden die Paramater auch direkt übergeben, dann greift Deine Erklärung.
Lasse ich die Programmzuordnung aber weg, sucht das System das zugehörige Programm und übergibt die Parameter wie beim Anklicken, nämlich als - sozusagen - "%1": "WinWord.exe %1". Und dabei ist das "%1" schon ein zusammenhängender String.

Was hälst Du davon?

Thema: Warum werden Word-Dateien nicht immer gefunden?
Am im Forum: Office-Technologien

Hallo,
ich möchte aus C# heraus eine Worddatei öffnen. Zuerst klappte das nicht:

Process.Start(@"C:\Programme (x86)\...\Winword.exe", @"R:\...\word\Re_lypô_29102018-010_H.docx")
Da bekam ich zwei Fehlermeldungen von Word: siehe "nicht_gefunden1,2.png"
Warum sucht Word zuerst nach der nicht vorhandenen doc-Datei (docx wurde übergeben) und dann nochmals am falschen Ort (der volle, korrekte Pfad wurde übergeben) nach der docx-Datei?

Funktionell habe ich das Problem gelöst: Ich habe im "Process.Start(...)" das zugeordnete Programm weggelassen, dann macht mein Programme alles richtig.
Interessant: wenn ich bei der ersten Version - mit WinWord.exe - eine Datei ohne "ô" übergebe, funktiert's. Das "ô" kann doch nicht den gesamten Pfad verändern?

Meine Frage nun: Wo liegt da der Unterschied? In beiden Fällen wird doch "WinWord.exe" angesprochen. Warum macht Word beim ersten Mal so einen Mist?