Laden...

Forenbeiträge von Jompikumpi Ingesamt 61 Beiträge

07.02.2023 - 21:18 Uhr

ich habe eine Desktop-App mit Windows Forms entwickelt, welche öfters Probleme mit dem Skalierungen auf hochauflösenden Monitoren hat.

Ich weiß nicht welche Probleme du meinst, aber meist bedeutet dies, dass die Anwendung in irgendeiner Weise als DPI aware deklariert ist.

Wäre sie DPI unaware, dann sollten matschige Bilder/Grafiken und Schrift dein größtes Problem sein, da Windows die Skalierung übernimmt. Und genau das möchtest du anscheinend.

05.01.2023 - 20:47 Uhr

Der erste Versuch wäre Visual Studio neu zu starten.

Wenn es hart auf hart kommt, kannst du auch den Designer mit der problematischen Form debuggen.
https://learn.microsoft.com/en-us/dotnet/desktop/winforms/controls/walkthrough-debugging-custom-windows-forms-controls-at-design-time?view=netframeworkdesktop-4.8

Ansonsten, ein paar Unklarheiten sind vorhanden: Z.B. sind deine Forms alle im gleichen Projekt? Welche VS Version? .NET oder .NET Framework?

29.12.2022 - 21:42 Uhr

Mein Tipp: Debugger benutzen!

Auch wenn ich das DGV nicht kenne, so erwarte ich, dass im CellValidating Ereigniss der vom Nutzer eingegebene Wert noch nicht in der Zelle gesetzt ist. Denn vorher muss der neue vorgeschlagene Wert ja erst noch geprüft werden.

Daher vermute ich, dass


DataGridViewFarbe.CurrentCell.Value.ToString()

durch


e.FormattedValue.ToString()

ersetzt werden muss.

13.06.2022 - 06:04 Uhr

Ja, falls sinnvoll den TreeView um ein paar Spalten erweitern.

Dann könnte man auch z.B. sofort die Adresse eines Standorts sehen.

12.06.2022 - 20:46 Uhr

Jetzt muss ich mich mit MVVM wieder auseinander setzten, da ich die Pages dementsprechend für die Eingaben rechts anzeigen und steuern muss.

Warum nicht den Inhalt der „Pages“ direkt als Zellen in der TreeList benutzen?

10.06.2022 - 20:33 Uhr

D.h. für Standorte müsste es ein Window geben, mit dem ich eine Halle hinzufüge und für die Halle müsste es ein Window geben mit dem ich dann ein Tor hinzufüge. Wenn ich das allerdings so aufbaue habe ich , wenn ich bei den Toren angekommen bin 4 Fenster geöffnet:

-Das Hauptwindow
-Das Window für die Standorte
-Das Window für die Hallen
-Das Window für die Tore

Braucht es die Hallen und Tore überhaupt dort?

So wie es oben dargestellt ist, ist das für den Anwender bloß eine Liste mit Namen. Nichts weiter. Irgendwo werden diese Namen wohl benötigt. Der Nutzer könnte sie ja auch dort einfach erzeugen, falls der passende Name nicht vorhanden ist.

Rein zur Übersicht könnte man die Hallen und Tore in der Standortsansicht zeigen.

09.06.2022 - 20:53 Uhr

Vielleicht wäre ein Grid in einer Master-Detail Darstellung etwas. Die Hauptdaten sind die Standorte, die Detaildaten die Bereiche und Tore.

Ich stelle mir so etwas vor: https://docs.devexpress.com/WPF/images/wpf_grid_masterdetail_tabs.png18160.png

29.04.2022 - 18:52 Uhr

Ich verstehe nicht wirklich deinen Beitrag. Wo liegt genau das Problem?
Welches ist das erwartete Verhalten, welches Verhalten beobachtest du?
Du vermengst am Anfang verschiedene Sachen.

Wenn du zwischen verschiedenen Formen wahlweise wechseln willst, dann bin ich mir nicht sicher ob du die Formen wirklich schließen willst.

Beim Schließen (Close) werden die Formen zerstört, beim Verstecken (Hide) bleiben sie erhalten, sind aber nicht sichtbar.

Wobei ich mich frage, ob du gerade etwas versuchst, was sich besser als MDI Anwendung eignet.

https://docs.microsoft.com/en-us/dotnet/desktop/winforms/advanced/multiple-document-interface-mdi-applications?view=netframeworkdesktop-4.8

Und die „Startbild“-Klasse, soll das ein Splashscreen oder eine Startseite sein?

30.01.2022 - 20:51 Uhr

Ich kann deinen Standpunkt nachvollziehen.

Aus meinen Erfahrungen steckt jedoch primär Politik dahinter. Die besten Cash Cows haben kaum noch RnD.

29.01.2022 - 18:56 Uhr

Das ist primär eine Quelle die Weiterentwicklung einer Anwendung gewährleisten zu können.

Sagen wir je nachdem.

Für große börsennotierte Unternehmen ist die Planbarkeit und Stabilität auf der Einnahmenseite der wichtige Punkt. Die Gewährleistung der Weiterentwicklung der Anwendungen spielt, bestenfalls, eine untergeordnete Rolle.

28.01.2022 - 23:36 Uhr

Grundsätzlich sollte die Preisgestaltung der Software so sein wie von Abt geschrieben, dass ein Abo mittelfristig merklich günstiger ist als eine Einmalzahlung. Dadurch lohnt sich ein Kauf kaum noch.

Und weil es hier noch nicht ausgeschrieben wurde: der wichtigste Punkt für ein Abomodell sind planbare Einnahmen für den Softwarehersteller.

Also bist Du bereit, eine Version zu einem hohen Festpreis (3-4 stelliger Bereich, ich hab irgendwas von 6000€ im Kopf) zu kaufen und danach keine Updates, weder neue Funktionen noch Bugfixes zu erhalten?

Mir ist durchaus klar, dass es einen Unterschied zwischen Recht haben und Recht bekommen gibt.

Bugfixes sind ein Fall für die Gewährleistung. Auch fehlende Features können ein Fall für die Gewährleistung sein, wenn der Vertrieb beim Marketing den Mund zu voll genommen hat.

Die meisten Hersteller stellen daher Bugfixes bereit, unabhängig davon, ob ein Abo oder ein Servicevertrag abgeschlossen ist.

21.01.2022 - 20:24 Uhr

Im Endeffekt ist eine Lösung ein Prozess pro Framework. So wie man auch 32bit DLLs in 64Bit Anwendungen benutzen kann.

Das ist natürlich mit deutlich mehr Aufwand verbunden. Aber wenn es wichtig ist, nimmt man den Aufwand auf sich.

Das ist zumindest für mich der Weg nach vorne um die Anwendung auf .NET 6 zu bringen. 3 Prozesse: .NET, .NET Framework 64bit und .NET Framework 32bit.

27.12.2021 - 10:08 Uhr

Wenn man eine Fehlermeldung bekommt und man sie nicht versteht, kann man sie einfach bei Google eingeben.

Dann bekommt in deinem Fall conversion-failed-when-converting-date-and-or-time-from-character-string-while-i.

T-Virus hat dir schon eine gute Lösung präsentiert. Baue nicht den String selbst zusammen, sondern benutze SQL Parameter.

10.12.2021 - 18:43 Uhr

Aber wenn ich jetzt eh schon dabei bin mich zu blamieren: Gibt es eine Möglichkeit alle Labels die "label1" heißen auf "" zu setzen? Ich meine das was man bei "Text" einträgt, nicht bei "(Name)".

Was soll der Sinn sein?

Füge noch ein Label in das Formular und es wird automatisch „label2“ heißen. Und dann möchtest du das ganze auch für „label2“ haben.

Und wenn man gut lesbaren, selbsterklärenden Code hat, dann hat man kein „label1“ oder „label2“, sondern z.B. „printerNamesLabel“.

Deine Liste wird so länger und länger.

Eigentlich musst du nur vor der Schleife den Text des Labels auf string.Empty setzen.

07.12.2021 - 19:04 Uhr

Was mir zuerst auffällt, ist, dass dein Währungsrechner anscheinend Geld vermehrt.

So wie ich das lese, bekomme ich für 1 EUR 85 GBP dafür bekomme ich etwas über 100 EUR. 😁

Und bei GBP zu USD ist es ähnlich, nur sollte man dort nur kleine Beträge zwecks Geldvermehrung wechseln.

Eigentlich sieht man daran bereits schön, dass testen, testen, testen anscheinend ausgelassen wurde. Das sollte man zügig ändern.

Auch der Fall bei input / output größer 3 oder kleiner 1 wird nicht abgehandelt.

Der Code selbst dürfte zügig praktisch unwartbar werden, wenn du weitere Währungen hinzufügst.

Du hast eine lange if / else if Kette, dass lässt sich deutlich eleganter lösen. Als ersten Schritt könnte man z.B. die Wechselkurse in einem Array vorhalten.

30.11.2021 - 19:01 Uhr

Soweit ich es verstehe, sollte man aufgefordert werden, .NET 3.5 (inkl. 3.0 & 2.0) zu installieren.

Installieren von .NET Framework 3.5 unter Windows 11, 10, 8.1, 8

30.11.2021 - 16:16 Uhr

Bei ShowDialog wird ein Schuh aus dem using.

Ein modaler Dialog hält die Abarbeitung im GUI-Thread auf, wird beim Schließen versteckt, dann verarbeitet man das Ergebnis und benötigt die Form danach nicht mehr.

27.11.2021 - 09:31 Uhr

Was spricht gegen ein simples Wiederbenutzen des btnSwitch Buttons?

Den aktuellen Zustand kannst du in einem Boolean Flag hinterlegen und bei jedem Klick entsprechend ändern.

So etwas wie


bool isSwitchBackVisible;

private void btnSwitch_Click(object sender, EventArgs e)
        {
            if(isSwitchBackVisible)
                 btnSwitch.Text = „Text“;
            else
                 btnSwitch.Text = „Test-Text“;
            isSwitchBackVisible = ! isSwitchBackVisible;
        }


24.11.2021 - 10:37 Uhr

Je nachdem was man benutzt, kann man durchaus einfach updaten.

Ich persönlich finde den Upgrade Assistant | .NET sehr hilfreich. Ob es einem weiterhilft, ist aber projektabhängig.

21.11.2021 - 16:58 Uhr

Falls Standardkonstruktor hier missverstanden wird, dann nennen wir es eben parameterlosen Konstruktor.

Ändert aber eben nichts an der Situation.

21.11.2021 - 09:55 Uhr

Der Winforms Designer benutzt ausschließlich Standardkonstruktoren.

Du benutzt


base(new CheckBox())

und dies ist kein Standardkonstruktor.

Siehe auch: how-to-avoid-error-constructor-on-type-mytype-not-found-when-inheriting-a-ba

19.11.2021 - 21:08 Uhr

Edit: Die Größe der PictureBox wird trotzdem noch verändert: nämlich von 600x600 auf 480x480, eben die das 1/1.25 - fache, da meine Skalierung ja auf 125% ist. Das passt jedoch, da es mir nur um das Verhältnis der beiden Längen ging.
Ich verstehe zwar noch immer nicht, weshalb die box so skaliert wurde, aber egal ^^

Du musst deine Anwendung als „DPI-aware“ deklarieren. Ansonsten wird sie für 96DPI erzeugt und von Windows skaliert. Dadurch wirken Anwendungen bei einer hohen Skalierung verschwommen.
Setting the default DPI awareness for a process (Windows) - Win32 apps

19.11.2021 - 19:49 Uhr

Versuche mal den AutoScaleMode auf DPI zu setzen, wenn du den Designer benutzt.

19.11.2021 - 19:19 Uhr

Was ist die DPI-Skalierung deines System? Ich vermute du benutzt eine Einstellung größer als 100%.

13.11.2021 - 16:34 Uhr

Typisierte Datasets nimmt man eigentlich nicht mehr.

Entweder untypisierte und selber auf eine Klasse mappen

Steht „typisiert“ hier für „stark typisiert“, also ein generiertes Dataset?

Weil wenn ich ein Dataset manuell abbilde, dann verstehe ich nicht, warum man dabei nicht einfach ein typisiertes Dataset erstellt. Bei Definition ist ein typisiertes Dataset einfach ein abgeleitetes Dataset.

13.10.2021 - 10:04 Uhr

Setze einen Breakpoint in der Erweiterungsfunktion Permute, dann erstelle eine Liste mit mehreren Elementen, rufe damit Permute auf und erfreue dich am Debugger, der alles Schritt für Schritt mit dir durchgeht.

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

29.09.2021 - 19:04 Uhr

Grundsätzlich verstehe ich nicht, warum so etwas überhaupt funktionieren sollte. Irgendwo muss doch eine Logik in Code enthalten sein, die die Einträge deiner beiden Datenquellen verknüpft.

Zum Fehler: was sagt denn der Debugger? Damit kommt man dem Pudels Kern doch sehr nah.

Und woher kommt übrigens die Datasource Eigenschaft der DataGridViewTextBoxColumn? Ich finde sie nicht in der Dokumentation.

26.09.2021 - 08:58 Uhr

Wenn ich den Java Code von RosettaCode.org anschaue, steht dort vor dem Timer ein Kommentar


// animate about 24 fps and shift hue value with every frame

Jetzt weißt du, was.du machen musst.

25.09.2021 - 10:34 Uhr

Hallo,

du meinst eine Animation? Dann benötigst du einen Timer, der alle x ms das Bild neu berechnet und anzeigt.
Für Windows Forms:
>

Egal ob mit oder ohne Timer, das Bild wird sich mit seinem Code oben nicht ändern. Es macht natürlich trotzdem Sinn einen Timer zu benutzen.

25.09.2021 - 09:07 Uhr

Woran hapert es?

Es hat mich keine Minute gekostet um mit Google eine Ahnung zu bekommen, was der Plasma Effekt ist, und kurz danach hatte ich Java und JavaScript Code. Von da sollte es nicht mehr weit sein.

Google Suche nach "plasma effect code" => erstes Ergebnis, RosettaCode

Auf den ersten Blick schön erklärt Making plasma effects

22.09.2021 - 12:20 Uhr

Offensichtlich hast du dir den Link in meinem Beitrag nicht ernsthaft zu Gemüte geführt. Da steht das Wesentliche drin, was du brauchst.

Der Rest ist Transferleistung.

21.09.2021 - 19:01 Uhr

Ohne deine Benutzeroberfläche zu kennen denke ich, dass du wahrscheinlich ein grundsätzliches Design- bzw. Layoutproblem hast. Und du versuchst es gerade eher umständlich mit ein paar Pflastern verschwinden zu lassen.

Zum Berechnen der Textgröße kannst du z.B. bei determine-label-size-based-upon-amount-of-text-and-font-size-in-winforms-c gucken.

Ich würde aber eher die Weite der CheckBox ändern, wenn der Text sich ändert.

18.09.2021 - 21:50 Uhr

Soweit ich es sehe, deckst du die natürlichen Zahlen inklusive der 0 ab. Ganze Zahlen können auch negativ sein. Und z.B. -10^-1 (=-0,1) ist eine legitime Dezimalzahl.

Meine Frage ist daher, was die Aufgabenstellung ist.

(Es ist natürlich auch möglich, dass dem Aufgabensteller das nicht ganz bewusst war 🙂)

18.09.2021 - 18:28 Uhr

Ein Beispiel wäre z.B. das ich eine Dezimal Zahl eingebe Z.b 13 und die Konsole gibt mir davon dan die Binär und Hex Zahl aus.

Das habe ichh auch geschafft.

Falls es um Dezimalzahlen geht, funktioniert deine Lösung auch für z.B. 13,2 oder -13?

14.09.2021 - 17:09 Uhr

Dass das Schreiben nicht wie von dir erwartet funktioniert, liegt daran, dass z.B. beim Ergebnis 3 „nur“ 3 betrachtet wird. Bei Ergebnis 1 betrachtest du 1 und 3.

Die Abarbeitung des Codes ändert eben nicht einfach durch Substraktion bei „result“ die Richtung.

14.09.2021 - 15:08 Uhr

Auch wenn ich dir auf die Schnelle nicht weiterhelfen kann, aber

  
  
for (int i = 0; i < 8; i++) //Erstelle zum Testen 9 Kämpfer  
  
  

sind 8 Durchläufe, also nur 8 Kämpfer.

10.09.2021 - 20:18 Uhr

Ich bin zwar nicht in der Datenbankentwicklung, aber bei uns wird VistaDB Database Engine verwendet.

09.09.2021 - 19:30 Uhr

Die einzige wirklich sichere Variante ist ein nativer Weg, zB. mit Rust, C++ oder .NET Native (das seit .NET Core 3 (maßgeblich) über den sogenannten Ready to Run Weg funktioniert).

>

Wie erzeugt man ausschließlich .NET Native mit ReadyToRun?

Denn ist nicht üblicherweise auch der IL Code enthalten? Wo liegt da der Vorteil bzgl. Obfuscation?

05.09.2021 - 20:46 Uhr

Mit Google bekomme ich sending-a-caret-with-system-windows-forms-sendkeys-send-will-send-ampersand

Also entweder auf englisches Tastaturlayout umstellen oder den Ansatz aus dem Link ausprobieren.

27.08.2021 - 09:14 Uhr

Das ist mir Bewusst. Gehen wir aber mal davon aus, dass ich keine Wertüberprüfung, aber schon eine Kapselung möchte. Bei Deinem Beispiel gibt es dann das eine öffentliche Feld Name. Meine Frage war, ob es dadurch auch implizit ein privates Feld (bspw. _Name) gibt, welches ich in der Klasse verwenden kann. Dem ist nicht so, oder?

Steht im Stackoverflow-Link oben, offensichtlich hast ihn nicht gelesen.

Also ganz doof gefragt: Welchen Vorteil hat

  
public string Name { get; set; }  
  

gegenüber

  
public string Name;  
  

In beiden fällen kann ich doch von außen lesend und schreibend auf Name zugreifen.

Grüße
Sven

Versuch mal Databinding mit dem Feld zu benutzen.

22.08.2021 - 08:45 Uhr

VS bietet Pre-build und Post-build Events. Damit kann man sehr viel automatisieren.

How to: Specify build events (C#)

21.08.2021 - 14:37 Uhr

Vielleicht sollte man an der Stelle VS von .NET trennen. Ich habe Bernds Beitrag nicht gegen die Entwicklung von .NET aufgefasst, sondern von VS.

Insofern wäre der Beitrag wohl besser bei VS2022 Preview aufgehoben statt bei .NET.

18.08.2021 - 16:56 Uhr

Microsoft hat wahnsinnig viel in die Performance-Verbesserungen von .NET investiert, was nun in einem riesigen Blog-Post für Entwickler veröffentlicht wurde.
Wer also mal Zeit und Lust hat:
>

Warnung: ausgedruckt ist der Blog Post 118(!) DIN A4 Seiten lang - aber sehr beeindruckend!

Danke, sehr interessant, auch wenn es ganz schön Zeit in Anspruch genommen hat.

Bei

grab a large mug of your favorite hot beverage, and settle in

frage ich mich, wie groß die Tasse sein muss. Und kalt ist das Getränk wohl auch nach Lesen eines Viertel des Textes.

17.08.2021 - 17:46 Uhr

Wie schon von Th69 geschrieben, du setzt nirgends den Inhalt deines Textfeldes. Deine Variable „Gesamt“ existiert nur im Bereich deiner Methode, die kannst du nirgendwo anders auslesen.

17.08.2021 - 17:39 Uhr

Einfach in der Methode einen Breakpoint setzen… da gibt es kein „Es tut sich irgendwie gar nischt.“

06.06.2021 - 15:20 Uhr

Das Verhalten im obigen Code ist ein Bug, eigentlich sollte auch die Zuweisung von „0“ nicht funktionieren.

Siehe why-can-i-assign-0-0-to-enumeration-values-but-not-1-0

02.01.2021 - 15:55 Uhr

Aus deinem Bild entnehme ich, dass die Startkoordinate (X,Y) nicht passt.

Ein bisschen Verschieben und die Größe anpassen, dann sollte es gut sein.

02.01.2021 - 14:07 Uhr

Benutzt du die korrekten Koordinaten?

Malst du mit einem dicken Stift?