Laden...

Forenbeiträge von Th69 Ingesamt 4.942 Beiträge

30.11.2022 - 14:26 Uhr

Noch mal genauer erklärt: entweder du nimmst eine SortableBindingList<T>, und dann kannst du das Sortieren mittels Sort-Eigenschaft durchführen (dein bisheriger Code) oder aber du sortierst die zugrundeliegende Liste Timings und entfernst deinen restlichen Code.

30.11.2022 - 12:32 Uhr

@BerndFfm: Warum denn jetzt Bubblesort?
Dein vorheriger Vorschlag müßte doch auch funktionieren:


Timings.Sort();
BindingSourceTiming.DataSource =  new BindingList<Timing>(Timings); // und neu zuweisen

Bei einer sehr großen Liste könnte man sicherlich noch optimieren.

Wenn man diese Funktionalität jedoch öfter braucht, dann sollte man trotzdem besser eine SortableBindingList<T> benutzen.

PS: Für verschiedene Sortierungen, kann dann Sort(Comparison<T>) benutzt werden.

30.11.2022 - 10:37 Uhr

Standardmäßig unterstützt eine BindingList<T> auch keine Sortierung: SupportsSorting sowie ApplySortCore
Man müßte also selber eine Klasse davon ableiten, s.a. SortableBindingList mit Filterfunktionalität bestücken

Oder such mal generell nach SortableBindingList.

PS: Weil mir das schon im anderen Beitrag von dir aufgefallen ist: es ist keine guter Code, den switch anhand der UI-Texte durchzuführen (was passiert bei Übersetzungen?) - besser wäre entweder der Index oder eine eigene Aufzählung (enum).

30.11.2022 - 09:03 Uhr

Hallo,

meinst du für die verschiedenen Linux-Distributionen?
Ansonsten einfach manuell über Download .NET 7.0 herunterladen bzw. installieren (s.a. Installieren von .NET unter Linux).

29.11.2022 - 15:35 Uhr

Hallo und willkommen,

wenn du beide Versionen in deinem Projekt unterstützen möchtest, dann mußt du entweder eine der Klassen umbenennen oder aber diese in verschiedene (Unter-)Namensbereiche packen.

26.11.2022 - 07:59 Uhr

Na ja, du mußt die Daten der gebundenen Liste verschieben (d.h. vertauschen).

25.11.2022 - 09:14 Uhr

Als nächsten Schritt solltest du den gesamten Server/Client Code in eine eigene Klasse auslagern, s.a. [Artikel] Drei-Schichten-Architektur (architekturtechnisch gehört dieser Code zum DAL - du kannst die (Business)Logik aber erstmal auslassen).

Statt den Invoke(...)-Aufrufen erzeugst du in dieser Klasse dann ein Ereignis (s. [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)) und abonnierst es dann vom UI-Code, welcher dann den Invoke() ausführt. Du müßtest dir dazu überlegen, welche Daten du dem Ereignis mitgibst (als erstes kannst du die Texte direkt übergeben, aber besser wäre ein enum-Statuscode o.ä. - denn lokalisierbare Texte gehören auch zum UI-Code).

Und statt einzelner Invoke-Aufrufe kannst/solltest du diese auch bündeln (es ist egal auf welchem UI-Element diese aufgerufen wird, meistens nimmt man daher gleich die Form, d.h. implizit this., z.B.


Invoke(new Action(() =>
    {
         lB_clients.Items.Clear();
         cB_clients.Items.Clear();
    }));

Edit: Und die Close()/Dispose()-Aufrufe der ServerClient-Member solltest du in eine eigene Methode auslagern.

24.11.2022 - 17:19 Uhr

Hallo,

so ganz verstehe ich nicht, warum du unbedingt casten möchtest (aus einem ElementAmount<ElementType> wird [in C#] niemals ein ElementAmount<SpecialType>).
Reicht dir denn nicht einfach:


{
   // ...
   if (amount.Type is SpecialType /*specialType */)
       DoSomethingWithSpecial(amount);
}

public void DoSomethingWithSpecial(ElementAmount<ElementType> amount)
{
  // z.B.
  Console.WriteLine(amount.Number);
}

Oder willst du auf die Eigenschaften bzw. Methoden von SpecialType darin zugreifen. Dafür hast du ja den Cast schon durchgeführt und kannst specialType als Parameter weitereichen (oder nochmals in der Methode entsprechend casten).

Aber gerade so Methoden wie DoSomethingSpecial sollten doch besser mit OOP gelöst werden, d.h. eine abstrakte (bzw. virtuelle) Methode, welche dann aufgerufen wird.

24.11.2022 - 11:30 Uhr

Hallo zusammen,

der Fehler liegt in der Verwendung des falschen (ersten) Parameters von SetValue.
Dort muß das Objekt übergeben werden, nicht der Name des Properties (dieser ist ja über PropertyInfo, d.h. die Variable p festgelegt).

24.11.2022 - 09:44 Uhr

Hallo,

wie in Prevent space bar to make CheckEdit checked/unchecked vorgeschlagen, könntest du eine eigene von Button abgeleitete Klasse erzeugen und dessen OnPreviewKeyUp-Methode überschreiben.

23.11.2022 - 16:35 Uhr

Das Problem daran ist nicht die Schleife (bzw. die Größe der Liste), sondern


a=a+Hashline.Hash;

Dadurch erzeugst du einen riesigen String (und intern wird jedesmal der vorherige String umkopiert) - also sehr schlechtes Memorymanagement.
Teste besser mit:


string a = String.Empty;
foreach (CListe hashline in Liste)
{
    a = hashline.Hash;
}
Console.WriteLine(a);
Console.WriteLine("Fertig: " + DateTime.Now);

PS: s.a. [Artikel] Strings verketten: Performance-Betrachtung

23.11.2022 - 09:29 Uhr

@NoSonOfMine: Laß ProjektBezeichnungsTabelle. weg beim Binding:


Binding SpalteBinding = new Binding(string.Format("Volumen[{0}]", j - ProgStartJahr));

Und vor dem Anfügen mußt du dann die Spalten neu erstellen (also so wie im Code von jbrown).

PS:
@jbrown: "[{0}].Jahr.Summe" ergibt so aber auch keinen Sinn (also wenn dann nur jeweils eine der drei Eigenschaften).

22.11.2022 - 21:27 Uhr

Genauso habe ich es bei meinem Beitrag verstanden.

22.11.2022 - 10:12 Uhr

Für ein einzelnes Element eines Arrays (bzw. einer List<T>) geht dies z.B. mit


{Binding Volumen[0]}

Du müßtest also (am besten per Schleife im Codebehind) die einzelnen Spalten erzeugen und entsprechend den Index zuweisen.
Ich weiß nicht, was passiert, wenn es den Index nicht gibt (also evtl. jeweils per Durchlauf mit passender Arraygröße erzeugen).

20.11.2022 - 19:42 Uhr

Es wäre schön, wenn es eine generische Schnittstelle IBindingList<T> gäbe, aber BindingList<T> implementiert nur die nichtgenerische Schnittstelle IBindingList. Daher kann man also nur IBindingList oder aber BindingList<T> benutzen.

20.11.2022 - 12:44 Uhr

Für Windows Forms ist eine BindingSource die empfohlene Komponente, da sie speziell für die Interaktion zwischen verschiedenen Komponenten ausgelegt ist.
Eine IBindingList (bzw. BindingList<T>) ist für UI-unabhängige Klassen gedacht (sieht man auch am Namensbereich bzw. Assembly System.ComponentModel).

Und dataSource wäre in deinem Fall die Timings-Liste.

20.11.2022 - 10:39 Uhr

OK, darauf wäre ich nicht gekommen.
Aber ich habe mal recherchiert: DebugType = full ist eigentlich seit Xamarin.Android 11.2 veraltet (und es sollte eine Warnung ausgegeben werden): Xamarin.Android 11.2 release notes: Deprecation of DebugType full and pdbonly
Welche Xamarin.Android Version verwendest du denn?

19.11.2022 - 14:03 Uhr

Hast du das neueste VS 2019-Update 16.11.x? Vor 2 Jahren gab es schon diesen Fehler und ein Fix dafür wurde in Version 16.8 eingebaut: Error debuging Xamarin.Forms app

Ansonsten mußt du dich mal selber an Microsoft wenden ("Send feedback" Button oben rechts im VS).

19.11.2022 - 09:25 Uhr

Das wird wohl laut Fehlermeldung wirklich daran liegen, daß der Fehler im Framework-Code liegt. Du müßtest daher die PDB-Dateien dafür herunterladen (lassen), s. SymbolSource: Visual Studio bzw. mit Bildern Source Code Debugging [with BuildIt Libraries].

18.11.2022 - 15:52 Uhr

Du hast die Logik bzgl. der Eigenschaft und des Feldes vertauscht - bei dir wird _uhrzeit ja nie gesetzt, außer der Setter wird dafür explizit aufgerufen.
Du mußt es andersherum programmieren:


public class Timing
{
    // ...

    public string Uhrzeit
    {
        get => TotalminToUhrzeit(Tagminute);
        set => Tagminute = UhrzeitToTotalmin(value);
    }

     public Tagminute { get; set; }
     // ...
}

18.11.2022 - 10:17 Uhr

Hallo und willkommen,

deine Abfrage

if (Console.ReadKey().Key != ConsoleKey.U)

ist falsch, benutze den Gleichheitsoperator ==.
Außerdem benutzt du Console.ReadKey() nicht korrekt - du solltest nur einmalig den Tastendruck abfragen und einer Variablen zuordnen (s.a. 2 Beispiel im Link), da du sonst für 'U' und 'F' zweimal auf einen Tastendruck wartest.

PS: Es heißt if - else-Anweisung (nicht Schleife)!

16.11.2022 - 13:14 Uhr

Sorry Bernd, aber dein Code ergibt genauso wenig Sinn wie der ursprüngliche Code vom OP.

15.11.2022 - 11:50 Uhr

Außerdem solltest du dir die Logik der gesamten Schleife nochmal überdenken:

  • durch die beiden return-Anweisungen ist die jeweilige Zeile vorher überflüssig
  • da die zweite Bedingung die Negation der ersten ist, reicht ein else dort
  • daher wird bisher immer bei Schleifenstart die Methode sofort verlassen, anstatt die weiteren Datumswerte zu überprüfen

Am besten, du schreibst dafür einige Unit-Tests: [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio

15.11.2022 - 08:35 Uhr

Dann hast du einen Binding-Fehler, s.a. Mysterious red border appears around ComboBox (gilt für alle Listenelemente).

Wenn du int-Werte (also Wertetypen) bindest, dann muß ja immer ein Wert zugewiesen sein (und wenn es 0 ist), ansonsten auf int? (also Nullable<int>) binden.

13.11.2022 - 16:54 Uhr

Das ergibt so aber keinen Sinn mit der Eigenschaft Id (so hättest du ja für die gesamte ListBox nur eine Id).

Willst du vllt. einfach so etwas?


public int SelectedID
{
    get { return SelectedItem?.Id; }
}

(ID = value.Id im Setter von SelectedItem ist dann überflüssig)

13.11.2022 - 06:33 Uhr

Hallo und willkommen,

du meinst, der Anwender soll die Zahlenwerte mit + getrennt angeben?
Dann kannst du dafür String.Split verwenden und durchläufst dann in einer Schleife das zurückgegebene Array und konvertierst dann die Zahlenwerte (evtl. noch Trim. anwenden, um Leerzeichen zu ignorieren).

Du solltest noch Fehleingaben abfangen, daher besser Decimal.TryParse verwenden.

Für eine grafische Oberfläche mußt du einen anderen Projekttyp erstellen (z.B. Windows Forms oder WPF). Dies erfordert aber auch eine andere Vorgehensweise: ereignisbasierte Programmierung - such dir zu WinForms oder WPF am besten passende Tutorials.

PS: Du solltest deinen Code (zur besseren Lesbarkeit) in passende C#-Tags setzen.

11.11.2022 - 10:02 Uhr

Das klingt eindeutig nach einem UserControl (gerade wenn es in verschiedenen Bereichen oder Forms angezeigt werden soll).
Und für den Doppelklick fügst du dann ein eigenes Event hinzu, damit es von den Forms abonniert werden kann, s.a. [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse).

Das UserControl am besten auch daraufhin umsetzen, daß es unterschiedlich groß sein kann, d.h. mit passenden Werten für Dock bzw. Anchor für die enthaltenen Controls.

10.11.2022 - 12:15 Uhr

Es sollte reichen, wenn du einfach nur Process.Start(path) aufrufst. Wenn das Windows Explorer Fenster noch nicht existiert, wird es neu erzeugt, andernfalls einfach zum bestehenden Fenster gewechselt (m.E. kann damit dein gesamter Code entfallen - bes. der Zugriff mittels veralteter Internet Explorer Komponente).

08.11.2022 - 17:54 Uhr

.NET 7 wurde gerade veröffentlicht: .NET 7 is Available Today

Auch eine neue Version (17.4) von VS 2022 wurde soeben veröffentlicht.

06.11.2022 - 15:51 Uhr

Ja, diese ist aber protected (d.h. nur für abgeleitete Klassen nutzbar): ClearSelection(Int32, Int32, Boolean)

06.11.2022 - 13:06 Uhr

Hallo und willkommen,

lies dir mal Stark typisierte DataSets ff. durch, besonders Die Datenzeilen einer Tabelle ausgeben.

04.11.2022 - 11:12 Uhr

Sind die beiden Projekte kompatibel zueinander? Welchen Projekttyp + Framework-Version hast du bei deinem "...DataSrv"-Projekt eingestellt?

04.11.2022 - 11:00 Uhr

Im Multi-Threading - Betrieb ist die Koordination von mehreren, schreibend zugreifenden Threads leichter realisierbar.

Mit Threading-Mechanismen haben Eigenschaften nichts zutun, oder ändern irgendwas.

Damit ist wohl gemeint, daß man im Setter dann (an einer Codestelle) einen lock benutzen kann, anstatt bei jedem (öffentlichen) Feldzugriff explizit.

02.11.2022 - 16:42 Uhr

Das ist wirklich sehr eigenartig.
Tritt das denn nur bei von VS erstellten (.NET) Programmen auf oder auch bei anderen Windows-Anwendungen?
Bei ersterem evtl. mal eine Reparatur von VS durchführen. An einem (fehlenden) Windows-Update wird das sicherlich nicht liegen.

Welche genaue Windows- und VS-Version verwendest du denn?

02.11.2022 - 11:40 Uhr

Hallo und willkommen,

mit "sobald ich die GUI erstelle" meinst du, wenn du das Programm startest, oder?

Welchen Zeichensatz hast du denn für den Text ausgewählt?
Wird dieser denn leserlich in den Windows Einstellungen / Schriftarten dargestellt?

Und was passiert bei einer anderen Schriftart?

16.10.2022 - 09:58 Uhr

Dann erstelle ein Datenmodell für die Farbzuordnung (per Zelle, Zeile oder Spalte) und setze dessen Werte (anstatt direkt vom anderen DataGridView).
Und für dieses andere DataGridView benutzt du dann dessen CellFormatting-Ereignis, um mittels des Datenmodells die Farben zu setzen.

15.10.2022 - 08:33 Uhr

Der Bug scheint jetzt in der UnhandledException-Methode selbst zu sein: benutze dort mal try..catch ...

14.10.2022 - 09:49 Uhr

Hallo,

aktiviere mal debug.mono.debug mit


adb shell setprop debug.mono.debug 1

(aus Exception stack trace does not include line numbers in debug build when no debugger is attached)

Ich weiß allerdings nicht, wie du das bei deinen App-Benutzern automatisch aktiviert bekommst.

13.10.2022 - 15:46 Uhr

Hallo,

hast du denn mal (mit dem Debugger) überprüft, welchen Bereich UsedRange hat?
Bzw. warum benutzt du nicht direkt Worksheet.Cells?

11.10.2022 - 19:33 Uhr

Dann scheint das DataGridView nicht aktualisiert zu werden, evtl. noch Refresh() o.ä. aufrufen.
Oder aber mal den gesamten Style neu zuweisen, wie in Change dataGridView Cell Color Programmatically in C#.

11.10.2022 - 18:43 Uhr

Du möchtest sicherlich den (aktuellen) DatGridViewCell.Style ändern und nicht den DefaultCellStyle (Standardzellstil), d.h.


DataGridViewFarben.Rows[loopFarben].Cells[0].Style.Font = new Font(DataGridViewFarben.Font, FontStyle.Bold);
DataGridViewFarben.Rows[loopFarben].Cells[0].Style.ForeColor = Color.Red;

Falls du ihn für alle Spaltenzellen übernehmen willst, dann erzeuge eine Schleife - anstatt nur Index 0 zu verwenden.

09.10.2022 - 10:09 Uhr

🙂

Wenn nächsten Monat das offizielle .NET 7 herauskommt, dann werde ich auch mal ein MAUI-Projekt anfangen (daher hatte ich mich schon ein bißchen dort eingelesen).

08.10.2022 - 13:12 Uhr

Wenn du des englischen einigermaßen mächtig bist, dann versuche mal die Hinweise in Visual Studio and Android Device Monitor doesn't detect any devices.
Prüfe mal besonders mit dem Konsolenkommando: adb devices.

08.10.2022 - 12:17 Uhr

Auch nicht nach einem Neustart vom VS?

Edit: Hast du denn den Samsung Android USB Driver for Windows schon installiert (der Google Driver ist nur für Nexus Geräte)?

08.10.2022 - 12:15 Uhr

Hallo,

in Diese 4 Messenger-Dienste kannst du offline (ohne Überwachung) nutzen wird noch "Signal Offline Messenger" aufgelistet, das zumindestens auch bestimmte Dateitypen übertragen kann.

08.10.2022 - 12:01 Uhr

Ja, so meinte ich das.

Bei deinem Google Such Link weiß ich nicht, was du genau meinst. Gefunden habe ich u.a. Revisiting XML Configurations In Unity, d.h. das Mapping mittels einer XML-Datei.
Wie genau jetzt die Datei aussieht, kannst du ja selbst bestimmen.

08.10.2022 - 11:51 Uhr

Hast du denn überhaupt schon Einrichten Android Geräts zum Debuggen befolgt (davon war ich bisher ausgegangen)?

08.10.2022 - 09:22 Uhr

Wenn ich die richtige Doku dazu erwischt habe, dann sollte es auch eine nicht-generische Überladung dazu geben: AddScoped(IServiceCollection, Type, Type), d.h. du kannst die Type-Parameter dazu aus einem String erzeugen:


string typeString = "MyNamespace.IMyService"; // aus Datei
Type type = Type.GetType(typeString);

(beachte, daß dazu der komplette Namespace davor angegeben sein muß)

07.10.2022 - 18:18 Uhr

Dann überprüfe mal die Android-Einstellungen bei dem Projekt (ich weiß jetzt nicht genau, wo diese bei einem MAUI Projekt zu finden sind - sollten aber einfach zu finden sein).