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 dr4g0n76
Thema: Testen einer API Wrapper Library
Am im Forum: Rund um die Programmierung

Zusatztipp an den TE, wenn Du dann tatsächlich XUnit benutzen möchtest, dann:

Kannst Du auch gleichzeitig das hier mitbenutzen und Dir eine Menge Arbeit sparen:


    [AttributeUsage(AttributeTargets.Method)]
    public sealed class AutoMoqDataXUnitAttribute : AutoDataAttribute
    {
        public AutoMoqDataXUnitAttribute()
            : base(() => new Fixture().Customize(new AutoMoqCustomization()))
        {
        }
    }


P.S.: Funktioniert genauso mit NUnit, wenn man die entsprechenden NuGet Packages benutzt.


        [Theory, AutoMoqDataXUnit]
        public void TestHelpAction(HelpAction action)
        {
              [...] //here goes your Code
        }


Damit werden dann Deine Objekte automatisch initialisert und Du kannst sie dennoch kontrollieren, falls nötig und hast dann auch gleich AutoMoq und AutoFixture drin.
Denke das sollte noch zusätzlich helfen.

Thema: Fuzzing, WinDbg Preview (Store app) und Time Travel Debugging
Am im Forum: Smalltalk

Was mich interessiert:

Wer von euch benutzt eigentlich in einer Firma

1.) Fuzzing

oder auch

2.) WinDbg Preview (vor allem auch mit TTD - Time Travel Debugging)?

Und was sind eure Erfahrungen damit?

Denn interessanterweise benutzt das soweit kein einziger Entwickler in keinen von den Firmen, wo ich die Leute bisher darauf angesprochen hatte.
Also beides nicht.

Thema: automatisiertes Software - Testing
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Falls es jemanden interessiert:

Was gut funktioniert ist das hier:

https://www.nuget.org/packages/WinSharpFuzz/

Es bringt doch so einiges der Funktionalität von AFL-Fuzz (google/AFL: american fuzzy lop - a security-oriented fuzzer) nach .net.

Wichtig ist, die entsprechenden Projekte in die Solution einzufügen (normalerweise 2), also quasi Main und den vom Main aufzurufenden Code.
Dann muss das ganze noch "instrumentiert" werden, wie sich das nennt.

und "schon" könnt ihr Fuzzing in .NET benutzen.

P.S.: Wenn ihr das noch genauer wissen wollt, kann ich das gerne hier zusammentragen, zum Nachmachen.

Thema: Eure ersten Rechner / Schritte mit Rechnern
Am im Forum: Smalltalk

Erste Schritte damals:

Wollte unbedingt programmieren lernen, als ich 11 war. Hatte dann aber erst mit 13 die Gelegenheit dazu mir einen eigenen Rechner zu kaufen.
Die beiden Jahre zwischendrin gingen dafür drauf mir mit Taschengeldarbeit das nötige Kleingeld zu verdienen.

Erster Tag, nachdem ich wusste wie man die Console aufmachte (wusste aber noch nicht, dass das eine Console war. ;-):

Abtippen eines Listings aus einem Amiga-Magazin. Jede Zeile wurde schon mit:

"Unknown command"

quittiert.

Als ich - meiner Meinung nach - alles abgetiptt hatte, fragte ich mich:

So. Wo ist jetzt mein Programm? Und wenn ich es gefunden habe, wie starte ich es dann?

😂

Bis mir dann jemand ein paar Dinge erklärt hatte. Dass man einen Texteditor braucht, um Texte abzuspeichern.
Und eine Programmierumgebung. Er hat mir dann erklärt, dass man Programme z.B. mit einem Assembler machen kann.
Und die Programmiersprache nannt er dann ebenfalls so, was bei mir ne ganze Zeit lang zu Verwirrung geführt hatte. :-D

Thema: Was war euer erstes Projekt? Was waren eure ersten Schritte beim Programmieren?
Am im Forum: Smalltalk

Mein erstes Projekt war damals eine Kugel aus 5000 Punkten auf einem Amiga 500 ruckelfrei zum über den Bildschirm hüpfen zu bringen.
Inspiriert durch die Demo-Szene.

Das hatte 2 oder 3 Wochen gedauert.

Ich hatte keine Ahnung, welche Programmiersprache am geeignetsten ist und bin damals über das Amiga-Magazin in eine Sprache gestolpert.
Natürlich die einfachste, mit der sich so was machen lässt: Assembler.

😂

Später hatte das dann zur Folge, dass meine Basic-Programme (hatte Quick Basic oder wie das damals hiess, dann C++ danach gelernt)
voll von Peeks und Pokes waren.

Interessant dabei: Der Amiga läuft jetzt noch...

Thema: Was hören .net Programmierer?
Am im Forum: Smalltalk

Zitat von Abt
Jetzt wollen alle Dein Soundcloud Profile ;-)

Haha. Bring mich nicht in Verlegenheit. :-D
P.S.: Oder soll ich das jetzt etwa wirklich hier reinstellen? LOL

Thema: Was hören .net Programmierer?
Am im Forum: Smalltalk

Ich hatte damals geschrieben:


wenn ich alleine bin gerne techno, ansonsten alles, quer beet.

find so sachen wie enya auch genial oder evanescence

Was ich damals nicht erwähnt hatte:

Dass ich natürlich auch meine eigenen Kompositionen sehr gerne anhöre.
Das sind hauptsächlich:

- Filmmusik
- Reggaeton
- Pianostücke

aber auch

- Trance/Techno usw.

Thema: Datagridview als Tabelle in Word speichern
Am im Forum: Office-Technologien

Sehe ich genauso wie Fzelle und Abt.

Einziger Unterschied:

Falls Dir Open XML zu kompliziert werden sollte,
es kann alles, kann aber auch ziemlich komplex werden.

Dann kannst Du auch Closed XML (nicht Microsoft) verwenden.
Das ist IMHO viel einfacher zu benutzen, falls das, was Du oben beschreibst, alles ist was Du machen möchtest.

Thema: Updaten des Excel Sheet 1 mit Daten aus Excel Sheet 2 [gelöst]
Am im Forum: Office-Technologien

Inzwischen habe ich noch eine weitaus bessere (Roh-)Lösung gefunden:


namespace MergeExcels
{
    public class ClosedXmlExcelMerger
    {
        public void Merge(string fileNameSource, string fileNameDest, string workSheetName = "MasterTabelle", string languageToMergeFrom = "es-MX", bool returnNewMergedFile = true)
        {
            IXLWorkbook workBookSource = new XLWorkbook(fileNameSource);
            IXLWorkbook workBookDest = new XLWorkbook(fileNameDest);

            var worksheetSource = workBookSource.Worksheet(workSheetName);
            var worksheetDest = workBookDest.Worksheet(workSheetName);

            //find spanish column in source and dest
            IXLRow firstUsedRowSource = worksheetSource.FirstRowUsed();
            IXLRow firstUsedRowDest = worksheetDest.FirstRowUsed();

            int languageColumnNumberSource = XLHelper.GetColumnNumberFromAddress(firstUsedRowSource.GetLanguageCell(languageToMergeFrom).Address.ToString()); //subtract 1 to be able to use zero based index
            int languageColumnNumberDest = XLHelper.GetColumnNumberFromAddress(firstUsedRowDest.GetLanguageCell(languageToMergeFrom).Address.ToString());

            //Gets all the tokens from Dest
            IXLCells foundCellsContainingValidTokensInDest = worksheetDest.CellsUsed(x => Regex.Match(x.GetString(), Helpers.Helpers.ValidTokensPattern).Success); //IXLCells foundCellsContainingValue = worksheetSource.CellsUsed(x => x.GetString() == value.ToString());

            int cellProcessedIndex = 0;
            foreach (IXLCell cell in foundCellsContainingValidTokensInDest)
            {
                string tokenToFind = cell.GetString().Trim();
                IXLCells foundCorrespondingValidTokenInSource = worksheetSource.CellsUsed(x => x.GetString() == tokenToFind); //IXLCells foundCellsContainingValue = worksheetSource.CellsUsed(x => x.GetString() == value.ToString());

                IXLCell tokenCellInDest = cell;
                string tokenTextFromDest = tokenCellInDest.CellRight(languageColumnNumberDest - 1).GetString();
                if (tokenCellInDest == null)
                {
                    new Exception("This should not happen!");
                }

                //Get the cell to insert to
                IXLCell cellToInsertValueTo = foundCorrespondingValidTokenInSource.First().CellRight(languageColumnNumberSource - 1);
                cellToInsertValueTo.Value = tokenTextFromDest;

                cellProcessedIndex++;               
            }
        }
    }
}

Das hier reicht aus, um den gefundenen Token String (der sich in Helpers.Helpers.ValidTokensPattern befindet) als key zu benutzen für die Zeile und damit von der einen Datei,
die Texte die in der Language Spalte sind in die andere Datei zu übertragen.

Thema: Updaten des Excel Sheet 1 mit Daten aus Excel Sheet 2 [gelöst]
Am im Forum: Office-Technologien

Also:

Ich habe eine Lösung gefunden:

Mit ClosedXML geht das ganze sehr einfach.

Damit schrumpft das Alles auf etwas in dieser Art:


            XLWorkbook workBookSource = new XLWorkbook(fileNameSource);
            XLWorkbook workBookDest = new XLWorkbook(fileNameDest);

            var worksheetMastertable = workBookSource.Worksheet("Mastertabelle");

           //find spanish column
            foreach(IXLRow row in worksheetMastertable .RowsUsed())
            {
                string rowText = string.Empty;

                string token = "";
                string languageIndex = "es-MX";
                string tokenText = FindTextForToken(languageIndex, token);

                if (TokenExists(worksheetMastertable , token))
                {
                    AddTokenTo(workBookSource, token);
                }

                foreach (IXLCell cell in row.Cells())
                {
                    var value = cell.Value;
                    rowText += value+" | ";
                }
            }
         
        }

Die Methoden oben, die nicht im Code zu sehen sind, sind bisher leere Pseudomethoden,
die Objekte sind aber sehr leicht im Debugger zu brauchen.
Deswegen sollte das keinen Aufwand mehr brauchen.

Auf Wunsch kann ich auch das fertige Ergebnis später - mit den Methoden - hier posten.

P.S.: Zuerst hatte ich das Ganze mit OpenXML von Microsoft versucht. Es funktioniert zwar.
Ist aber ziemlich aufwändig das Ganze damit zu machen.
Auch wenn man Zugriff auf jedes Atom von Excel hat.

Hatte gemerkt, das braucht doch einiges an Aufwand und Lernaufwand.
Auch wenn ich in 2/3 Stunden was ansatzweise brauchbares hatte.

Thema: Updaten des Excel Sheet 1 mit Daten aus Excel Sheet 2 [gelöst]
Am im Forum: Office-Technologien

Hallo Th69.

Es ist das neue Format, also: .xlsx.
Ok, dann werde ich das iterativ bzw. mit einem kleinen Programm machen.
Danke für Deine Hinweise.

Zum P.S.:

Ja, das ist mir natürlich auch bekannt.
Hab auch das Problem gefunden. Im Texteditor war eingestellt: Leerzeichen in Tabs konvertieren.
LOL. Da kann ich natürlich lange suchen.

Denn genau Deinen Ansatz hatte ich ebenfalls verwendet.

Thema: Updaten des Excel Sheet 1 mit Daten aus Excel Sheet 2 [gelöst]
Am im Forum: Office-Technologien

Hallo zusammen.

Weiss jemand von euch zufällig, wie man 2 Excel Tabellen, wie unten beschrieben mergen kann?
Auf jeden Fall, diese Art, wie ich sie brauche habe ich bisher nicht sinnvoll in Google finden können.

Grund:

Wir haben hier verschiedene Sprachen mit Items in Excel Tabellen.

Es wurde aber eine falsche Excel-Datei (ältere Version) übergeben, bei der die Spalten nicht mehr übereinstimmen.

Es gilt also folgendes zum vorherigen Stand (Stand 1):

Token Name Deutsch Englisch Spanisch
T.Change Ändern Change
T.Help Hilfe Help
T.New Neu New

Und in einem weiteren Stand (Stand 2), Z.b. das:

Token Name Deutsch Englisch Spanisch
T.Change Ändern Change Cambiar
T.Help Hilfe Help Ayuday
T.Rot Rot Red Rojo

Ich muss also folgendes erreichen, dass Stand 1 und 2 so gemergt werden, dass ALLE tokens von vorhin enthalten sind am Ende:
Und dabei ist also die Token Name Spalte die wichtige. D.h. wenn ein neues Token gefunden wird in Stand 2, wird es in Stand 1 hinzugefügt.
Doppelte Tokens sollten nicht vorkommen, den Fall brauchen wir nicht berüchsichtigen.

Es reicht also z.B. wenn die Spalten auch so generiert werden würden, dass ich sie per Paste einfügen kann.
Anders ausgedrückt: Am Ende soll Stand 1 alle Tokens zusätzlich enthalten, die fehlen, aber in Stand 2 schon enthalten sind.

Weiss jemand, wie ich das erreiche? Mir ist es egal, ob ich dafür ein kleines Programm schreiben muss,
idealerweise in diesem Fall ohne Programmierung. Vielleicht geht das ja mit Excel ganz einfach?

Das wäre dann jedenfalls das gewünschte Ergebnis in Stand 1:

Token Name Deutsch Englisch Spanisch

T.Change ändern Change Cambiar
T.Help Hilfe Help Ayuda
T.New Neu New Nuevo
T.Rot Rot Red Rojo

P.S.: In der Vorschau im Editmodus wird die Formatierung bei mir richtig angezeigt der Tabellen.
Leider ist die Formatierung nicht richtig, wenn man sie im fertigen Beitrag anschaut, bisher weiss ich nicht, wie sich das ändern liesse, ohne einen Screenshot zu erstellen.

Thema: Code soll erst auf Devops eingecheckt werden, wenn er buildet.
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

@Abt.

Wie ich ja gesagt hatte, ich hätte es auch anders vorgeschlagen. Da ich derselben Meinung war, dass das unsinnig ist.
Nur … ich bin leider nicht derjenige, der es bestimmt. Sondern jemand anders höher in der Hierarchie.

Ja, die Absicht ist erkennbar.
Nur bedauerlicherweise akzeptiert diese Person keine andere Lösung.

und ich sehe das auch als organisatorische Fehlleistung, Gängelung. Trägt einfach nicht zur Produktivität bei. Im Gegentil.

dr4g0n76

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Das ist tatsächlich so. Der Code ist … na ja. Bisher. Es wird gerade viel umgeändert.
Und vor allem auch das, dass es wie eine normale WPF-App funktioniert.

Auf jeden Fall in der neuesten Version gibt es das jetzt mehr oder weniger zumindest bis jetzt.

Deshalb habe ich mal angefangen, den Vorschlag von Dir auszuprobieren.
Danke nochmals dafür!

Ich werde auf jeden Fall versuchen, das Ganze zum Laufen zu bringen.
Und dann den Code hier ergänzen. Zuerst mal für den allgemeinen Fall.
Denn das Thema muss ich sowieso lösen. Bei uns brennt's halt gerade an vielen Ecken und Enden.
Hier gilt wirklich wieder mal, aufgeschoben ist nicht aufgehoben.

P.S: Ich hab also den Code übernommen und mal versucht erste Schritte zu machen.
Ich werde ein Update hier posten, sobald ich ein paar Schritte weitergekommen bin.

Thema: Code soll erst auf Devops eingecheckt werden, wenn er buildet.
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Azure DevOps hat ja genügend Einstellungen, die man machen kann, um den Code Build zu testen, automatisch ausführen zu lassen, sich berichtigen zu lassen usw.

Thema:

Azure DevOps hat ja genügend Einstellungen, die man machen kann,
um den Code Build zu testen, automatisch ausführen zu lassen,
sich berichtigen zu lassen, usw.

Bei uns wird nach einer Möglichkeit gesucht, den Code gar nicht erst auf DevOps einchecken zu lassen,
bevor er nicht eindeutig kompiliert.

Kennt dafür jemand eine Möglichkeit?

Denn im Moment wüsste ich nicht, wie man das erreicht.

Gewollt ist quasi folgender Mechanismus:

1.) Es wird versucht, einzuchecken. Auf ein DevOps Repository.
2.) Dann soll DevOps (wie auch immer) den Build überprüfen.
3.) Und wenn der erfolgreich war, erst DANN das Ganze ins Repository übernehmen.

Ich wüsste nicht, dass DevOps das so von Haus aus kann.
Und wenn, dann fällt mir da nur was Ähnliches wie ein Buildvorgang ein, der aus 2 Pipelines besteht
oder eine Lösung mit einem lokalen Agenten, aber auch das ist nicht gewollt.

Meine Lösung dazu:

Ich hatte dann vorgeschlagen, dass jeder Entwickler das gleiche Tool nehmen kann,
dass das schon in der IDE so wäre.
Problem gelöst.
Nur … leider wird das nicht akzeptiert. Da das ja dann lokal wäre …

Ich entscheide bedauerlicherweise nicht selbst, welche Lösung wir favorisieren.
Kann darüber nicht bestimmen.

Wie würdet ihr das machen? Geht das überhaupt mit Azure DevOps Boardmitteln?

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Das auf jeden Fall. Nur... wass willst Du erwarten, bei einer Software die erstmal 100e von Exceptions erzeugt, bis sie wirklich hochfährt.

Ich hab mal versucht folgendes zu machen:

Es gibt eine Art try/catch-Block für die ganze Applikation. Mit diesem eigens vergewalteten Application-Object, dass die Entwickler selbst "verbrochen" haben. ;-)
Ich hab mal den try/catch-Block entfernt, weil zumindest in VS2019 manche Sachen nicht einfach so einsehbar waren, durch Warning-Suppressions and what not.
Selbst wenn Du den weg machst, das Ding ist so instabil, dass die Software dann nicht läuft.

Wie kann man so eine Qualität machen. Aber egal... (egal im Sinne von dann distanzier ich mich halt emotional komplett davon, was kann ich dafür. ;-))


try
{
   Application.StartMainProgram();
}
catch(Exception ex)
{
   Log(ex).Here();
}

und Du hast Recht. Ich hab das Application-Object auch noch nicht gefunden.
Das einzige wo ich bisher Application.Current gesehen hatte, war in einer Drag/Drop-Routine. Morgen hab ich endlich mal etwas mehr Luft, dann werde ich mir es genauer anschauen.

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Ich kann Dir zumindest einen Teil davon zeigen.

Es wurde durch


using <OWN NAMESPACE>;

namespace <OWN NAMESPACE>
{
    public static class Program
    {
        public static void Main(string[] args)
        {
            var applicationManager = new ApplicationManager();

            applicationManager.Start("OFApplication","OFSplashScreen");
        }
    }
}

Ausgetauscht und die ApplicationManager-Klasse leitet weder von Application ab, noch macht sie sonst was WPF-trächtiges. Nada. Ist auch nicht von etwas anderem abgeleitet und hat auch kein Interface.

Sieht teilweise so aus:


 public class ApplicationManager
    {
        private string _splashScreenType = "Default";

        private Window _splashScreen;
        private string _applicationName;
        private ManualResetEvent _delay = new ManualResetEvent(false);
        private ManualResetEvent _splashSync = new ManualResetEvent(false);

        public ApplicationManager()
        {

        }

Und startet Threads über etwas das ein wenig so aussieht wie ein Factorypattern...

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Leider wird bei uns kein App Object benutzt, wie ich gerade gesehn hatte. Aber das lässt sich ja ändern, wenn ich das ganze benutze, um zu testen.
Ich werde es auf jeden Fall ausprobieren. War auch gerade am Suchen, wie man das mit dem BAML löst. Du warst schneller. :-)

Thema: Interface zur Laufzeit zu einer Klasse hinzufügen (Lösung)
Am im Forum: .NET-Komponenten und C#-Snippets

Siehe auch (als Ergänzung):

Lösung für: Anonymen Typ in ein Interface casten

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

@Palladin007

Wofür steht eigentlich die 007 bei Dir? Seriennummer Skateboard? James Bond? Geburtstag in spezieller Form? Deine Serien ID. ^^

Ich könnte, wenn ich hier teil vom Softwareteam wäre, bzw. nicht nur die Textcontrols. Denn das wäre genau, das was ich machen würde und den Vorschlag habe ich auch schon eingebracht.
Nur... leider bin ich hier "nur" im Test-Team. Deswegen werden meine Vorschläge hier auch nicht entgegengenommen. Und dann fragt sich halt das Software-Team, wie sie die ganzen abgeschnittenen Texte finden sollten.

Deswegen kam ich aus dem Testerkontext her auf die Idee: Ich könnte ja alle Controls durchgehen und dann schauen.
Leider ist die Softwarequalität so schlecht, dass selbst wenn ich mein eigenes Programm einhängen würde, das nicht garantiert ist, dass das funktioniert.

Denn die App wird quasi "vorsichtig hochgecrasht", sorry aber anders kann ich das bei der Softwarequalität nicht mehr bezeichnen.
Denn es entstehen erst mal ein paar hundert Exceptions, bis Host und Exe laufen. LOL.

Jetzt weiss auch, warum dieser IRRE Aufwand. Denn abgeschnittene Texte wird es immer wieder geben und ich will den Aufwand für mich automatisieren.
Hab keinen Bock, das immer wieder händisch durchzukontrollieren.

Jetzt kennst Du den Hintergrund. :-)

Hab mir eh neulich schon anhören dürfen: Du findest immer so komische Bugs.
Meine Antwort dazu:
1. Dazu wurde ich ja hierhergeholt.
2. Wenn Du so komische Sachen programmierst... Und ausser mir scheint sie ja keiner bisher zufinden...

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

@Palladin007

Klar, übrigens hab ich mir das mal genauer angeschaut, was Controls ermitteln angeht, lohnt es sich sowohl

SnoopWpf

und auch

Accessibility Insights

anzuschauen für WPF unter Windows 10 usw.
Denn das zeigt auch die ganzen Boxes mit Focus auf dem gehoverten Control an.
Hab gerade geschaut, man kann auch nachschauen, wie es das macht.

https://cloudblogs.microsoft.com/opensource/2019/03/12/microsoft-open-sources-accessibility-insights/

:-) Das sollte auf jeden Fall helfen sehr nahe an die Lösung zu kommen, die Controls zu ermitteln.

Mit dem Abschneiden, muss dann immer noch geschaut werden. :-)

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

@Thomas.at

Ja, das Problem ist, dass das Konzept bei der Übersetzung nicht richtig durchdacht wurde.
Und das mit den Ellipsen ist zwar eine gute Idee und wird teilweise so gemacht.

Warum ich das so vorgeschlagen hatte, die abgeschnitten Texte (truncated texts) so zu finden, durch Berechnung oder was auch immer es sonst noch für Möglichkeiten geben möge,
ist, dass eben in anderen Sprachen, wenn die Ellipsis benutzt wird (also die "…"-Funktion), dann wird in anderen Sprachen zu viel abgeschnitten.

Z. B. kann in Deutsch/Englisch Notalarm/Emergency Alarm geschrieben werden, nur wenn dann in Spanisch angezeigt wird Alarma de Emergencia
und man nur Alarma de … sieht, dann kann das zu Problemen führen. Normalerweise hätte ich gesagt: Dann vergrössert doch einfach die Controls.
Da die ganze Applikation aber nachher auf einem Panel läuft, mit 1366 x 720 als Auflösung, ist halt teilweise der Platz auf manchen Bildschirmen sehr beschränkt.

Leider scheint sich halt darüber keiner vorher Gedanken gemacht zu haben. Wie so oft…

Ausserdem dachte ich könnte das allgemein eine gute Funktion eines Testtools sein.

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Weiss eigentlich jemand, wie man das in der eigenen App machen würde?
Egal welche Control man anzeigt, die Text(e) auf dem Bildschirm anzeigt?

Damit könnte man vielleicht auch Rückschlüsse ziehen, wie man das von aussen mit Windows Automation ermittelt.

Thema: DataGrid mit selbst gefüllter DataTable anzeigen
Am im Forum: GUI: WPF und XAML

Das Problem ist zweigeteilt, sozusagen:

ich würde es gerne richtig machen. Deswegen werde ich es auch zu Hause für mich richtig benutzen. Da redet mir ja zum Glück keiner dazwischen.

Nur derjenige, der mir gerade vorgibt, was ich machen soll, der will das nicht.
Also soll er sich selbst darum kümmern. Ich mach nur den Proof of Concept.
Wenn es dann aber nachher nicht richtig funktioniert, dann ist er selbst schuld. Dann kümmere ich mich nicht mehr darum.

Das ist der Hintergrund.

Denn: ich sehe das genauso wie Du. Sonst hat man wieder Ärger hinterher. Whatever. Selbst schuld, wenn er das so will.

Es gibt nichts daran auszusetzen, an dem was Du nennst.
Im Gegenteil. Meinst Du ein eigenes MVVM Framework oder ein vorhandenes? Muss zugeben, so richtig tief in WPF bin ich nicht drin.
Natürlich nicht unwissend, aber längst noch nicht so, wie mit Windows Forms damals.

P.S.: Ich gebe Dir mal noch 2/3 Beispiele, warum das gerade in der Firma so läuft, damit Du den Hintergrund mehr verstehst,
Ich bin momentan dran eine Automatisierung zu erstellen auf Azure DevOps. Eigentlich.
Nur.. hier in dieser Firma sind so viele dringend, dass man dann dauernd eine neue Prio 1 bekommt. Soweit so gut.

Z.B. war eins der ersten Dinge, dass ich aufgedeckt habe:

1.) Die Firma benutzt SQL Express 2014. Weil das ja kostenlos geht. Laut denen. Hab das bisher noch nicht genauer überprüft.
Nur... was ich dann festgestellt hatte, dass die Datenbank beim Kunden zu 98% voll ist und jeden Moment überlaufen kann.

Hab darauf mehrmals hingewiesen. Nur, dieser Typ will das nicht. Er meinte, wir können uns noch 2 bis 3 Monate Zeit lassen.
LOL. Wenn die Datenbank Files aber alle 3 Tage bis zu 100 MB zunehmen…

SQL Express hat ja das 10 GB Limit.

Also bin ich irgendwann höher zu seinem Vorgesetzten (von – nennen wir ihn mal A). Weil er mich immer dementiert hat.
Sein Vorgesetzter C meinte sofort: klar. Datenbank retten ist wichtiger als alles andere. Wir können uns so was nicht leisten.
Gut. Und dieser vorgesetzte C meinte, ist gut. Brich alles ab. Mach eine Lösung dafür zumindest als Workaround.


2.) Mit den Übersetzungen für neue Sprachen ebenfalls der gleiche Mist.

3.) Und jetzt weisst auch, denke ich, warum ich da nur ein Provisorium mache. Das ist und bleibt dann seine Verantwortung.

Vor allem, wenn das noch lange so weitergeht, dann und meine Bugs weiter gelöscht werden oder als zu unwichtig deklariert werden
und deswegen gelöscht und der Kunde und sich sein Vorgesetzter fragt, warum die Probleme nach 2 Monaten immer noch nicht gelöst sind…
Dann habe ich da eh nicht mehr lange was verloren.

So, das musste ich mal loswerden.

Thema: DataGrid mit selbst gefüllter DataTable anzeigen
Am im Forum: GUI: WPF und XAML

Nope. Hast zwar recht. Nur für mich wird es keins bleiben. Nur hier in der Firma halt.
Für meine eigenen Anwendungen, werde ich das auch benutzen. Da aber garantiert nicht als Provisorium. :-D Da kann ich ja zum Glück selbst den Zeitaufwand und die Qualität bestimmen. :-D

Thema: DataGrid mit selbst gefüllter DataTable anzeigen
Am im Forum: GUI: WPF und XAML

Also das funktioniert soweit schonmal. Danke. :-)
Das werde ich bei nächster Gelegenheit einbinden. Und das mit dem Binding wie das geht ist auch klar.
Den Code kann man ja nachträglich noch verbessern. Da das Ganze ein Testtool wird, ist hier ausnahmsweise erst mal Geschwindigkeit wichtiger.

EDIT:
P.S.: Testtool im Sinne zum Ausprobieren, nicht um es als Tester zu verwenden. ;-)

Thema: DataGrid mit selbst gefüllter DataTable anzeigen
Am im Forum: GUI: WPF und XAML

Zitat von Palladin007
Warum weist Du die DataTable direkt zu? Dafür gibt’s DataBinding und WPF ohne MVVM macht keinen Spass.
Bei Tasks solltest Du NIEMALS (ausser Du weisst, was Du tust und hast einen guten Grund) direkt mit dem Resultat arbeiten.
Console.WriteLine? In WPF-Anwendungen gibt es keine Konsole. Wenn’s da einen Fehler gibt, fällt Dir der also nicht auf.
Die DataTable habe ich noch nie mit dem DataGrid zusammen genutzt, ich würde aber die DefaultView benutzen – ob eine Eigene ein Problem ist, weiß ich aber nicht.
Und ich würde auch keine DataTable nutzen, die unterstützt (meines Wissens nach) keine Live-Aktualisierung beim Binding und angepasste Columns stelle ich mir auch schwierig vor.

Erstmal danke für Deine Antwort @Palladin007.

Klar, die Console ergibt keinen Sinn. Das liegt daran, dass ich viel experimentiert habe. Das war zuerst eine Konsolenanwendung mittags noch. :-)
Dafür, um zuerst nur die Devops Items auszulesen.

Ich wollte eigentlich das Programm wegwerfen, wenn es funktioniert und einfach nur eine User Control daraus erstellen.

Und mir gings erst mal darum den Datatable anzuzeigen im Grid. Deswegen habe ich hier gar nichts bereinigt. Sondern nur probiert.
Ich habs auch schon mit Binding probiert gehabt. Das hatte halt auch nicht funktioniert.

Was ich teilweise auch noch ausprobiert hatte, war von hier:

https://www.dotnetspider.com/resources/34103-WPF-Binding-DataTable-WPF-Datagrid.aspx

Thema: DataGrid mit selbst gefüllter DataTable anzeigen
Am im Forum: GUI: WPF und XAML

Ich möchte mit dem untenstehenden Code einen selbstgefüllten DataTable an die ItemsSource eines Datagrid übergeben.
Die Columns sind AutoGenerated.

Wenn ich den DataTable im Debugger Visualizer anschaue, dann ist auch alles so gefüllt, wie es sein soll.
Nur nachher auf dem GUI ist alles leer. Nur die Spalten und die Zeilen wurden richtig generiert, nur, wie eben halt schon gesagt, ohne Inhalt.
Was mache ich falsch?

Das XAML zum DataGrid sieht so aus:


<DataGrid x:Name="wiqlDataGrid" AutoGenerateColumns="True" ColumnHeaderHeight="25" Margin="125,99,10,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

EDIT: Ich hätte gerne das im DebuggerVisualizer angezeigte Bild live auf dem Screen in der App (siehe angehängtes Bild aus dem DebuggerVisualizer)


            try
            {
                Task<IList<WorkItem>> queryResult = queryExecutor.Query(query);
                IList<WorkItem> workItems = queryResult.Result;
                if (workItems.Count == 0 || workItems == null)
                {
                    Console.WriteLine("No workitems found.");
                    return;
                }

                DataSet dataSet = new DataSet();
                DataTable dataTable = new DataTable();
                dataSet.Tables.Add(dataTable);

                foreach (KeyValuePair<string,object> keyValuePair in workItems[0].Fields)
                {
                    dataTable.Columns.Add(keyValuePair.Key);
                }

                for (int j = 0; j < workItems.Count; j++)
                {
                    WorkItem workItem = workItems[j];
                    DataRow row = dataTable.NewRow();
                    int i = 0;
                    foreach (var item in workItem.Fields)
                    {
                        row[i++] = item.Value;
                    }
                    dataTable.Rows.Add(row);
                }
                DataView dataView = new DataView(dataTable);
                wiqlDataGrid.ItemsSource = dataView;
            }
            catch (AggregateException ex)
            {
                System.Windows.MessageBox.Show(ex.Demystify().ToString());
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show(ex.Demystify().ToString());
            }

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Hallo Palladin007.

Danke für diese Idee. SnoopWpf hab ich mir sogar tatsächlich schon angeschaut, bevor ich hier die Frage gepostet hatte.

Ich denke, was funktionieren könnte, ist folgender Ansatz:

  • Text der gehoverten Control ermitteln [gelöst]
  • Font bestimmen (sollte hoffentlich vom ermittelten Automation Control aus möglich sein. Mal schauen…
  • die Grösse der Textbox bzw. des Controls bestimmen. Falls überhaupt in WPF vorhanden,
    sowas wie ClientRectangle, bzw. was dem entspricht. Zumindest mal die Breite. Dann wäre es für einzeilige Texte lösbar.
    Allein das wäre schon unglaublich hilfreich.

    Möglicherweise geht das so:

    
    var hwndList = (IntPtr)(int)(listWindow.GetCurrentPropertyValue(AutomationElement.NativeWindowHandleProperty));
    var listRect = (Rect)listWindow.GetCurrentPropertyValue(AutomationElement.BoundingRectangleProperty);
    


  • Dann mit Font und MeasureString über den String candidate ausrechnen, wie viel exceeded wird.
    Oder z. B. die Breite durch die Anzahl Zeichen teilen. Je nachdem, wie das nachher genau ausschaut.
    Dies sollte dann wiederum zumindest für Fonts, bei denen jedes Zeichen die gleiche Breite hat funktionieren.
    Was bei uns momentan zum Glück der Fall ist.

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Hallo zusammen.

Gibt es eine Möglichkeit automatisch abgeschnittene Texte in WPF Applications von aussen zu erkennen?

Was meine ich damit:

  • "von aussen" heisst hier in einem externen Programm. Nicht in der Anwendung selbst. Denn die exe darf dazu nicht verändert werden (nicht von mir bestimmt).
  • Folgende Lösungen wären gut und legitim in diesem Fall (also eine davon reicht natürlich):
    a) Ein Programm, dass das aufzeigen kann per Screen oder wenn man mit der Maus über das entsprechende WPF Control fährt, das Text anzeigt.
    b) Ein fertiges Testtool, dass dies kann. Könnte auch kostenpflichtig in diesem Fall sein. Kostenlos wäre besser.
    b) Eigene Lösung. Ich hab den Teil mit den Textlängen ermitteln schon entwickelt.
    Was hier fehlen würde: Wieviele Zeichen können angezeigt werden in der mit der Mouse gehoverten Control?
    Denn dann könnte man auch den Unterschied zwischen angezeigten und eingegebenen Textlängen berechnen und daraus ermitteln, wieviel Platz man tatsächlich zur Anzeige hat.

    Ging es vielleicht auch damit?
    
    private Size MeasureString(string candidate)
    {
        var formattedText = new FormattedText(
            candidate,
            CultureInfo.CurrentCulture,
            FlowDirection.LeftToRight,
            new Typeface(this.textBlock.FontFamily, this.textBlock.FontStyle, this.textBlock.FontWeight, this.textBlock.FontStretch),
            this.textBlock.FontSize,
            Brushes.Black,
            new NumberSubstitution(),
            1);
    
        return new Size(formattedText.Width, formattedText.Height);
    }
    
    Würde das reichen um vom gehoverten Control und dem eingegebenen Text ausrechnen zu können, wieviele Zeichen tatsächlich angezeigt wurden und wieviele eingegeben wurden?
    

Ich hoffe, dass das so verständlich ist.

Nochmal kurz ganz anders ausgedrückt:

Es geht darum, dass wir einfach ermitteln können, wie lang ein Text sein kann, in einem entsprechenden Control, damit er nicht abgeschnitten werden kann.
Dazu wird ein Programm benötigt, dass dies von aussen ermitteln kann.