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.
@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.
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
).
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).
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.
Na ja, du mußt die Daten der gebundenen Liste verschieben (d.h. vertauschen).
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.
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.
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).
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.
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
@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).
Genauso habe ich es bei meinem Beitrag verstanden.
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).
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.
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.
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?
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).
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].
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; }
// ...
}
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)!
Sorry Bernd, aber dein Code ergibt genauso wenig Sinn wie der ursprüngliche Code vom OP.
Außerdem solltest du dir die Logik der gesamten Schleife nochmal überdenken:
return
-Anweisungen ist die jeweilige Zeile vorher überflüssigelse
dortAm besten, du schreibst dafür einige Unit-Tests: [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio
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.
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)
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.
Hallo,
lies dir mal Using SignTool.exe to Sign a .NET Core Assembly with a Digital Certificate durch.
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.
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).
.NET 7 wurde gerade veröffentlicht: .NET 7 is Available Today
Auch eine neue Version (17.4) von VS 2022 wurde soeben veröffentlicht.
Ja, diese ist aber protected
(d.h. nur für abgeleitete Klassen nutzbar): ClearSelection(Int32, Int32, Boolean)
Hallo und willkommen,
lies dir mal Stark typisierte DataSets ff. durch, besonders Die Datenzeilen einer Tabelle ausgeben.
Sind die beiden Projekte kompatibel zueinander? Welchen Projekttyp + Framework-Version hast du bei deinem "...DataSrv"-Projekt eingestellt?
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.
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?
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?
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.
Der Bug scheint jetzt in der UnhandledException
-Methode selbst zu sein: benutze dort mal try..catch
...
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.
Hallo,
hast du denn mal (mit dem Debugger) überprüft, welchen Bereich UsedRange hat?
Bzw. warum benutzt du nicht direkt Worksheet.Cells?
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#.
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.
🙂
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).
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
.
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)?
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.
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.
Hast du denn überhaupt schon Einrichten Android Geräts zum Debuggen befolgt (davon war ich bisher ausgegangen)?
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ß)
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).