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

  • »
  • Community
  • |
  • Diskussionsforum
Refresh eines einfachen window
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

Refresh eines einfachen window

beantworten | zitieren | melden

Hallo ,

ich bin neu hier und komme mit einer einfachen Anfängerfrage.
Ich möchte einen Script ohne WPF schreiben.


Dieser Script hat eine lange Abarbeitungszeit
und ich möchte den Zwischenstand / Verlauf auf einfache Weise anzeigen,
um dem Nutzer zu zeigen das sich da was tut und wann der Skript fertig wird.
Messagebox scheint dafür auszufallen, da ich bei Zwischenstand jedesmal OK drücken muss.
WPF Programmierung ist mit zu aufwändig und ich versuche mich auf eine einfache Window window Variante zu beschränken.

Dazu mal meinen vereinfachten Code:


///////////////////////////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////////////////////////
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
using System.Linq.Expressions;
using System.Threading;

// TODO: Replace the following version attributes by creating AssemblyInfo.cs. You can do this in the properties of the Visual Studio project.
[assembly: AssemblyVersion("1.0.0.3")]
[assembly: AssemblyFileVersion("1.0.0.3")]
[assembly: AssemblyInformationalVersion("1.03")]

namespace VMS.TPS
{
    public class Script
    {
        public Script()
        {
        }
        double BlaBla;
        class abListD
        {
            internal double BlaBlaBla;
        }
        class abListS
        {
            internal string BlaBlaBla;
        }
        
        //---------------------------------------------------------------------------------------------  
        public void Execute(ScriptContext context, Window window)
        {
            . . . BlaBlaBlaBla;
            . . .                                   
            //.....................................................................................
            // Ergebnis-Fenster Eigenschaften
            window.Background = System.Windows.Media.Brushes.Yellow;
            window.Background = System.Windows.Media.Brushes.LightGreen;
            window.Foreground = System.Windows.Media.Brushes.DarkBlue;

            window.Height = 465;
            window.Width = 350;
            window.Title = "BlaForm";

            InitializeUI(window);

            //.....................................................................................
            . . .   // Code
  

            Label_1.Content = bla1;
            label_2.Content = bla2;
            label_3.Content = bla3;
          
            label_Daten.Content = „Daten“;

            window.Show();

            // whole 3D matrix will be scanned
            for (int zi = 0; zi < dimZi; zi++)
            {
                . . . // langer Code
                Label_Daten.Content = "Daten   " + zi.ToString() + " / " +  dimZi.ToString();
                    
                for (int yi = 0; yi < dimYi; yi++)
                {
                    . . . // langer Code
                    for (int xi = 0; xi < dimXi; xi++)
                    {
                        . . . // langer Code
                    }  // xi
                }      // yi
            }          // zi
        }              // Execute
        
        // ######################################################
        // Ergebnis Fenster

        void InitializeUI(Window window)
        {
            StackPanel rootPanel = new StackPanel();
            rootPanel.Orientation = Orientation.Vertical;   //Frames untereinander im Root-Window
            {
                //.....................................................
                // bla
                GroupBox groupBLA = new GroupBox();
                groupBLA.Header = "Bla";
                rootPanel.Children.Add(groupBLA);

                StackPanel panelBLA = new StackPanel();
                groupBLA.Content = panelBLA;
                groupBLA.Foreground = System.Windows.Media.Brushes.Blue;

                panelBLA.Orientation = Orientation.Vertical;   //Horizontal;
                panelBLA.Children.Add(label_1);
                panelBLA.Children.Add(label_2);
                panelBLA.Children.Add(label_3);

                //.....................................................
                //Daten-Ergebnisfelder im Frame
                GroupBox groupDATEN = new GroupBox();
                groupDATEN.Header = "Schichten";
                rootPanel.Children.Add(groupDATEN);

                StackPanel panelDVH = new StackPanel();
                groupDATEN.Content = panelDATEN;
                groupDVH.Foreground = System.Windows.Media.Brushes.Blue;

                panelDATEN.Orientation = Orientation.Vertical;
                panelDATEN.Children.Add(label_Daten);
            }
            window.Content = rootPanel;
            window.Title = "Bla";
        }

        //Ausgabe-Felder für Text und Ergebnisse
        Label label_Daten = new Label();
       
        Label label_1 = new Label();
        Label label_2 = new Label();
        Label label_3 = new Label();
    }
}


Mit window.Show(); erzeuge ich ein einfaches, in void InitializeUI(Window window)
festgelegtes Fenster.

Im Programmablauf sollte mir das Fenster zeigen wo (zi) ich mich von dimZi (von wie vielen) befinde.

Mein Problem ist,

Mit dem o.g. Programmcode zeigt er mir nicht das veränderliche zi von dimZi an.

D. h. nach Änderung von Label_Daten.Content = "Daten " + zi.ToString() + " / " + dimZi.ToString();
wird mir nicht die Änderung im Window window angezeigt.

Kann mir da jemand helfen?
VD + HG
EccoBravo

Moderationshinweis von Abt (07.06.2021 - 16:13:19):

Thema verschoben von WinForms in Grundlagen. Das Thema behandelt jedoch inhaltlich WPF.

private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4029

beantworten | zitieren | melden

Hallo und willkommen,

da bringst du anscheinend einiges durcheinander:
1. Du verwendest WPF (System.Windows), nur daß du alles als Code-Behind hast, anstatt als XAML Code, geschweige denn mit MVVM: [Artikel] MVVM und DataBinding!
Daher sollte dieser Beitrag dorthin verschoben werden (macht evtl. ein Mod).
2. Komplett falsche Herangehensweise bzgl. langlaufenden Hintergrundaktionen, s. [FAQ] Warum blockiert mein GUI?

Auch die Namensgebung Script deutet auf ein falsches Verständnis hin.

Du mußt dir zuallererst einmal die Grundlagen der ereignisorientierten Programmierung (Stichwort: Windows Message Loop) aneignen.
Und dann deinen Code sinnvoll in UI und Logik aufteilen (schaue auch mal in [Artikel] Drei-Schichten-Architektur).
Für asynchrone Programmierung helfen dir die Schlüsselwörter async/await sowie die Task<T>-Klasse (das ist aber ein fortschrittliches Thema).
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Vielen Danke für die Antwort,
ich programmiere schon viele Jahre, aber mit Visual Studio komme ich einfach nicht klar!
Selbst das Umbenennen eines Projektes in VS ist ein Abenteuer!
Daher meine beiden Fragen im Forum.
Ich habe schon einiges probiert, vermisse aber ein refresh im window.

VD + HG
EB

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von EccoBravo am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Das ist halt die Summe Deines Vorgehens: Du klickst offenbar wild rum und hast drauf losgelegt, ohne auch nur eine Minute in den Docs zu verbringen.
Hast Code programmiert, wie man es vielleicht in anderen Sprachen / Technologien macht; aber halt nicht mit C# respektive .NET.
Anders kann ich mir das Ergebnis halt nicht erklären. Und das ist nur ein sachliches, ehrliches Feedback - ohne um den heissen Brei zu reden ;-)

Den Code kannst so im Grunde eigentlich wegwerfen, weil man so mit WPF (und einiges auch so in C# bzw. .NET) nicht programmiert.
Siehe Hinweis von Th69. Hak es einfach als Lektion ab, dass das keine gute Idee war und Du jetzt halt bisschen Zeit in den Sand gesetzt hast ;-)
Den Code so ordentlich zum Laufen zu bringen und zu korrigieren wird Dich vermutlich mehr Zeit kosten als es neu und korrekt zu machen.
Zitat
Selbst das Umbenennen eines Projektes in VS ist ein Abenteuer!
Wenn Du verstanden hast, wie ein .NET Projekt aufgebaut ist, dann ist das eigentlich super einfach.
Aber da dieses Verständnis offenbar nicht da ist; daher tust Du Dich dann auch mit VS schwer.

Grundlagenhilfe bekommt man immer in den Docs, sowohl zu .NET, zu C#, zu WPF und auch zu Visual Studio
https://visualstudio.microsoft.com/de/vs/getting-started/
Hallo Welt – Einführung in interaktive C#-Tutorials
https://docs.microsoft.com/de-de/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-5.0
Zitat
Ich habe schon einiges probiert, vermisse aber ein refresh im window.
Auch hier ein Verständnisproblem.
Wenn Du WPF so programmierst, wie es designt wurde, wie es gedacht ist, wie man es tun sollte - dann wirste merken, warum Du einen Refresh nicht brauchst (und warum es diesen nicht gibt).
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für die von oben beleuchtete Antwort!
Ich bin KEIN Informatiker und habe mir die Sache selbst angenommen!!!
Ich denke schon, dass ich in der Vergangenheit schon mit einigem Grundverständnis an die Sachen gegangen bin.
Zu meinem Arbeits-Kontext:
Ich arbeite für eine große Software-Umgebung, die C# als Skriptsprache benutzt.
Um mit den Skripten arbeiten zu können, muss man ein SkriptProjekt mit dem zugehörigen Wizard eröffnen, damit alle Bibliotheken und Linkprocedures vorhanden sind!
Wenn Windows Dialoge dazu haben will, müsste ich WPFs haben. Dazu muss ich aber das Projekt mit Create WPF-Project eröffnen, dann habe ich aber nicht die o.g. Bibliotheken.
Das habe ich alles schon mal versucht, so zusätzlich ein WPF-Project kreiert und dann den gesamten o.g. Program Knödel hineinkopiert. Hat alles nicht funktioniert!
Entweder WPF oder mein o.g. Program Knödel!
Nach 2 Wochen Herumforschen, Internetrecherchen und Literaturstudium, Herstellerunterlagen etc. habe ich mich mal an das Forum gewendet.
So viel dazu !
Vielen Dank für die Unkompetenzbescheinigung!

VG
EccoBravo
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von EccoBravo am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Keiner hat Dir eine Unkompetenzbescheinigung ausgestellt. Das hast gerade selbst gemacht.
Wir haben Dir sachlich, direkt, korrekt mitgeteilt, dass Du Dich auf einem Holzweg befindest und das Zeug so nicht umgesetzt wird - und auch Links mitgegeben, in denen Du nachlesen kannst, wie es korrekt funktioniert.
Wenn Du meinst, dass Du die Programmierweise von WPF selbst bestimmen kannst; gut, dann viel Erfolg. Keiner hier wird Dich zwingen.
Aber wenn Du keine Hilfe von Helfern annehmen willst, die Dir sagen wie es korrekt geht. Was soll man dann antworten? :-)

Gern aber nochmal der Hinweis, dass das Forum wirklich kein Platz ist, um irgendein Frust abzulassen, den Du Dir die letzten 2 Wochen während des Herumforschens angestaut hast.
Danke Dir.
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Neben WPF gibt es da noch XAML. Damit habe ich auch schon herumprobiert. Keiner hat mir das so richtig erklärt.
Es scheitert an den einfachsten Sachen. Wie bekomme ich den ganten XAML Gedöns an mein Skript. Wie wandle ich ein cs Skript in ein Project/eine Solution, damit ich Referencies etc einbinden kann...? ETC, etc....
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Zitat von EccoBravo
Neben WPF gibt es da noch XAML. Damit habe ich auch schon herumprobiert. Keiner hat mir das so richtig erklärt.
Hättest einfach die Doku gelesen (erstes Kapitel), dann wüsstest Du, dass XAML die deklarative Sprache als Teil von WPF ist.
Und ja, aller Anfang ist halt nun mal schwer.

Übersicht über XAML - WPF .NET

Dass Du vielleicht keine Orientierung hast, was Du brauchst: nachvollziehbar.
Daher erneut der Hinweis: mach die Tutorials auf MS Docs durch, die haben einen roten Faden.
Zitat von EccoBravo
Keiner hat mir das so richtig erklärt.
Das ist auch ehrlich gesagt nicht die Aufgabe eines Forums. Wenn Du jemanden suchst, der Dir als Mentor dient, dann ist das was ganz anderes, als der Sinn eines Forums.
Ein Forum kann bei konkreten Problemen helfen. Aber es ist ein extrem ungeeignetes Medium um Grundlagen beizubringen. Dazu gibt es Tutorials, Dokumentationen, Videos, Bücher oder auch ein Lehrer, den Du persönlich engagieren kannst.
Aber ein Lehrer spielt das Forum halt leider nicht - egal welches.
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 174

beantworten | zitieren | melden

Es könnte auch hilfreich sein, wenn du die Software, die C# als Skriptsprache einbindet, erwähnst. Eventuell gibt es Leute die bereits mit dieser Software gearbeitet haben und dir direkt helfen können.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dannoe am .
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

So geht es eben einen Löwen, dem man einen Haufen Salatblätter hinwirft und ihm zuruft: "Friss doch endlich Du Dummkopf!"
Ich habe einfach nur eine .cs Datei mit allen, von meiner Software Umgebung benötigten Bibliotheken.
Daraus will ich ein Project/Solution erzeugen, damit ich weiter komme. Dann muss man mir nur noch verraten, wie ich die WPF-Biliotheken / <XAML anbinde!
Nichts weiter! Dann werde ich auch die VS / C# Philosophie verstehen.
Ich hoffe auf die gleiche Geduld, wie ich sie beim Fragen habe!

VD
EccoBravo
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Zitat
Dann muss man mir nur noch verraten, wie ich die WPF-Biliotheken / <XAML anbinde!
Alles beschrieben in Tutorial: Erstellen einer neuen App mit Visual Studio - WPF .NET
Hast sicherlich Verständnis, dass ich Dir das jetzt nicht rauskopieren werde.
Zitat
Ich hoffe auf die gleiche Geduld, wie ich sie beim Fragen habe!
Meinst Du das wirklich ernst?
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Von einem Insider (Amerikaner) habe ich den Hinweis bekommen, ein WPF Project zu erstellen und den vorherigen Skript dort hineinzukopieren.
Dieses erwies sich als Holzweg, weil er die benötigten Bibliotheken verliert, die sich scheinbar nicht als Code editieren lassen. Keiner konnte mir erklären, wo ich diese Bibliotheken finde. Es ist alles proprietär.
VD
EccoBravo
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Genau das geht nicht, weil dann die proprietären Bibliotheken fehlen, von denen ich nicht weiss wo diese sind.
Und weil ich das nicht weiss, versuche ich es eben andersrum!
Und weil mir die WPF Art zu unzugänglich ist, versuchte ich es mit einem einfachen Window window.

In der Vergangenheit habe ich sogar ein Projekt gemacht, wo ich eine Grafik als Window über einen HTML String mit Java Einfügung programmiert habe, nur um das für mich obscure WPF zu umgehen
VD
EccoBravo
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von EccoBravo am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Naja, offenbar willst Du auch einfach keine Tutorials lesen - und einfach so zufliegen wird Dir das Wissen halt auch nicht.
Auch der "Insider" hat Dir basierend auf den Infos, die wir hier haben, einen korrekten Tip gegeben. Aber Du willst es auf Deine eigene Art umsetzen - und da können wir Dich einfach nicht unterstützen.
Von meiner Seite bleibt daher nichts anderes als Dir viel Erfolg und alles Gute zu wünschen.
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Zwei Löwen - zwei Salathaufen !
Er hat mir nicht gesagt, wo die Bibliotheken sind !
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von EccoBravo am .
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1480
Herkunft: Düsseldorf

beantworten | zitieren | melden

Hast Du eine Projekt-Datei, oder nur die cs-Datei?
Oder kannst Du eigene DLLs als Referenzen hinzufügen?

Dann kannst Du nämlich ein ganz normales C#-WPF-Projekt (DLL, nicht zum Starten) erstellen, dort das implementieren, was Du brauchst, das Ergebnis als Referenz hinzufügen und das komische Skript fügt das nur noch zum Window hinzu.

Der letzte Teil (das zum Window hinzufügen) ist ziemlich einfach:


window.Content = new MyScriptControl();
window.DataContext = new MyScriptViewModel(context);
window.ShowDialog(); // Wenn das nicht automatisch passiert

Hängt natürlich noch davon ab, was ich von dem Skript-Kram jetzt nicht weiß, aber ziemlich sicher lässt sich der Großteil sehr leicht davon trennen und als klassisches WPF-Projekt aufbauen.
Wenn Du die Referenzen nicht in das WPF-Projekt rüber bekommst, musst Du eine Abstraktion schaffen, könnte dann so aussehen:


// Im WPF-Projekt
public interface IScriptContext
{
    // ...
}

// Im Script-Projekt
internal class ScriptContextFacade : IScriptContext
{
    private readonly ScriptContext _realContext;

    public ScriptContextFacade(ScriptContext realContext)
    {
        _realContext = realContext;
    }

    // ...
}

public class Script
{
    public void Execute(ScriptContext context, Window window)
    {
        window.Content = new MyScriptControl();
        window.DataContext = new MyScriptViewModel(ScriptContextFacade(context));
        window.ShowDialog(); // Wenn das nicht automatisch passiert
    }
}

Wie gut das funktioniert, hängt natürlich auch davon ab, was das da ist, aber ich wette mit dir: Das geht

Und als Tipp für die Zukunft:
Erwähne direkt am Anfang den Elefanten namens "Skript-Gefrickel", was Du da nutzen musst und reduziere dein Beispiel auf das eigentliche Problem.
So wirkt das eben sehr danach, dass Du noch einer der vielen "Ich will in zwei Tagen WPF-Apps programmieren, bitte erklärt mir alles"-Leute, auch wenn Du das gar nicht bist.


Zitat
In der Vergangenheit habe ich sogar ein Projekt gemacht, wo ich eine Grafik als Window über einen HTML String mit Java Einfügung programmiert habe, nur um das für mich obscure WPF zu umgehen

Und das klingt sehr danach, dass Du scheinbar genau die Probleme hattest, die Abt prophezeit hat:
Du hast falsch angefangen, irgendwie versucht, damit klarzukommen und bist (nachvollziehbar) daran verzweifelt.
Dabei kann WPF sehr viel Spaß machen, aber man braucht den Einstieg und mit der Einstellung wird dir das nie gelingen - und dein Projekt auch nicht.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für diese verständnisvolle Antwort!
Ich bin eben kein Informatiker, mir fehlt ziemlich viel Hintergrundwissen, weswegen sich mich viele Beschreibungen/Tutorials nicht erschliessen. Ich habe es vorher schon versucht, in diese Welt tiefer einzutauchen, aber viele Sachen funktionieren dann in praxi bei mir nicht, und daher bin ich immer auf der Suche nach möglichst einfachen Wegen. Oftmals hat es dann auch geklappt.
Wenn ich dann eine Lösung gefunden habe, versuche ich diese auch für andere Projekte zu verwenden. Deshalb bin ich doch kein "schlechter" Mensch!
Wenn mich jemand etwas fragt, versuche ich mich doch in diesen hineinzudenken und ihn dort abzuholen, wo er gerade steht! Sonst bräuchte er gar nicht zu fragen, sonst bräuchte man auch nicht dieses Forum!

"Hast Du eine Projekt-Datei, oder nur die cs-Datei?
Oder kannst Du eigene DLLs als Referenzen hinzufügen?"
Ja, beides habe ich.

Das ist klar, ich will ganz WPF erlernen, nur fehlte mir der Zugang, und wie bekomme ich es "an meine cs-Datei angekoppelt"!
Dann können wir auch Rechencode und UI sauber von einander trennen.
Dazu müssen kein paar Knoten aus meinem Gehirn und deshalb frage ich doch!
Wenn man mir den Tipp gibt, wie ich die XAML und XAML.cs Dateien an meine cs Datei in einer sln oder cproj zusammenbekomme wäre ich glücklich!
Bei Delphi ging das alles.

Was ist denn bei C# und VS anders als bei Delphi?

Vielen Dank!
EccoBravo
Dieser Beitrag wurde 8 mal editiert, zum letzten Mal von EccoBravo am .
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1480
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat
Ich bin eben kein Informatiker
Was macht dich denn zu einem Informatiker?
Bin ich ein Informatiker, weil ich das gelernt habe, oder war ich das schon in der Schule, weil ich C# gelernt habe?
Bist Du ein Informatiker, sobald Du mit C# arbeitest, oder brauchst Du dafür erst eine Ausbildung?

Meine Meinung:
Das ist völlig egal.
Jeder fängt bei 0 an, Informatiker hin oder her.
Die Ausrede zieht daher nicht

Wenn Du Probleme hast, in die .NET-Welt einzusteigen, dann ist das oft ein Zeichen dafür, dass Du zu weit hinten anfängst und WPF ist ein hervorragendes Beispiel für "zu weit hinten".
Also tu dir einen Gefallen, arbeite dich in die Grundlagen ein und arbeite dich dann Stück für Stück zu WPF vor.
Oder Du beharrst auf deinem Vorgehen, versuchst weterhin irgendwelche Frickellösungen zu bauen und wirst weiterhin so Probleme haben, wie jetzt.
Zitat
Deshalb bin ich doch kein "schlechter" Mensch!
Nein, hat auch niemand behauptet, Abt hat bloß ein Talent dafür, besonders hart ehrlich zu sein (sorry :D)
Aber auch wenn Du kein "schlechter" Mensch bist - diese Sichtweise ist (und das geht nicht weniger hart) einfach dumm.
Du vergeudest sehr viel Zeit für haubtsächlich selbst gebaute Probleme und bemerkst dabei nicht, dass der auf den ersten Blick längere Weg (vorne anfangen und lernen) sehr viel kürzer, leichter und vor allem nervenschonender ist. Also der blumenbewachsene Weg, der dann plötzlich über ein Hochgebirge führt, während der Andere mit einem steilen Hügel beginnt und danach durch schöne Graslandschaften führt.

Also nimm dir das zu Herzen, vergiss, was Du bisher gelernt hast und fange vorne an.
Das dauert etwas, aber mit der Zeit verstehst Du, warum wir so sehr darauf beharren und vielleicht auch, wie Du viele Dinge besser lösen kannst.
Und wenn Du einen konkreten Punkt z.B. in deinem Buch nicht verstehst, kannst Du dich nochmal hier melden und ich denke, dann ist Abt auch etwas gnädiger
Zitat
und wie bekomme ich es "an meine cs-Datei angekoppelt"!

Das hat nichts mit WPF zu tun, sondern hauptsächlich mit diesen Skript-Kram. Eine Referenz in VisualStudio hinzuzufügen ist super einfach, in deinem Fall musst Du vermutlich das Programm dazu bringen, das zu machen. Geht das nicht, gibt's noch andere Wege, aber die sind komplexer und meist ziemlich unschön, das sollte also nur die allerletzte Lösung sein.
Was Du also brauchst, ist, wie Du eine selbst entwickelte DLL als Referenz hinzufügen kannst. Wie das geht, kann dir aber niemand sagen, das muss das Programm tun. Fang mit etwas ganz kleinem an (Methode gibt "Hello World" zurück - reicht) und versuche das irgendwie ins Script zu bekommen.
Danach sehen wir weiter.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Zitat von EccoBravo
Bei Delphi ging das alles.

Was ist denn bei C# und VC anders als bei Delphi?
Dann musst Du bei Delphi bleiben.

C# an für sich ist eine völlig andere Programmiersprache; WPF eine völlig andere Technologie mit einem völlig anderen Konzept.
Du wirst beides nicht so programmieren können, wie es in Delphi gemacht wird. Die Paradigmen sind völlig unterschiedlich.
Sind letzten Endes auch verschiedene Kochrezepte, die einfach sehr unterschiedlich sind.

Auch mit Deiner Einstellung, dass Du WPF und XAML "irgendwie zusammenkleben" kannst, wirst Du nicht weit kommen.
WPF hat Konzepte, die durchaus eine Lernhürde aufweisen, aber angewendet werden sollen oder manche auch müssen.

Während man mit try-and-error bei Delphi und Co mehr Erfolg hatte, um etwas auf die Beine zu stellen funktioniert das bei WPF leider gar nicht.
Ich empfehl Dir kein WPF zu verwenden, weil Du dazu unbedingt Zeug lesen und lernen musst, was Du ja nicht tun willst. Du willst basteln, was auch OK ist.
Verwende daher lieber was anderes.

Zitat
dann ist Abt auch etwas gnädiger
Der Abt ist total gnädig und liberal, sonst wäre das Thema schon lange dicht :-)
Er ist aber halt auch total ehrlich direkt; aber so isser halt. Bringt ja auch nichts die Leute mit Watte zu bewerfen, wenn sie sich auf dem Holzweg befinden.

private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Jetzt macht die Konversation endlich Spass!
Ich verweigere ja nicht neuen Wissenserwerb. Ich glaube ja auch nicht, dass Ihr von einem 60jährigen das Geburtsdatum ändern wollt!
Wenn ich nicht wollen würde, würde ich doch nicht weiter fragen.
Ich stelle mir erst mal ein paar Aufgaben, doch mit einem Create WPF anzufangen und die dll dann als Referenz hinzuzufügen.
Es werden dann bestimmt eine Menge Folgeprobleme entstehen. Das wichtigste dabei, dass mein auftraggebendes System diese Projekt dann auch noch als Script erkennt.
Aber wenn man auf einem Weg nicht weiterkommt, muss man eben einen anderen gehen. Ich hoffe, dass dieser Plan nicht im Kampf der Giganten endet!
Zu meiner Environment, es gibt eine sehr kleine amerikanische Community, von denen vielleicht zwei-drei Menschen dieses beherrschen, diese bekommt man aber kaum zum Kontakt, daher meine endlosen Eigenversuche.
Alternativ werde ich nochmal weiter versuchen, die benötigten Bibliotheken zu finden.
Ich dachte bisher nur, dass es noch Alternativwege gäbe.

Ungeachtet meines zu bekämpfenden Frustes, C# ist viel obskurer, als mein alt geliebtes Delphi. Dafür sind die Codes erheblich kürzer!

Den Schritt von PL1 zu Delphi hat man mir in 30 Minuten erklärt. Fortran habe ich ohne Probleme parallel programmiert. Ich hätte nicht gedacht, dass man nun alles neu erlernen muss. Keiner hat mir den grundlegenden Unterschied erklärt.

VD
EccoBravo
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von EccoBravo am .
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 255

beantworten | zitieren | melden

Probiers doch mal mit WinForms, das ist, zumindest meinem Empfinden nach, für Einsteiger deutlich intuitiver als WPF und für dein "Projekt" sollte es sowieso reichen.
Erstellen einer Windows Forms-App mit C# - Visual Studio
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JimStark am .
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1480
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat
doch mit einem Create WPF anzufangen und die dll dann als Referenz hinzuzufügen.
Zitat
Es werden dann bestimmt eine Menge Folgeprobleme entstehen. Das wichtigste dabei, dass mein auftraggebendes System diese Projekt dann auch noch als Script erkennt.
Zitat
daher meine endlosen Eigenversuche
Es hilft manchmal, wenn Du nicht weiter kommst, nochmal von Vorne anzufangen.

Daher nochmal:
Lass WPF weg, fang mit einer ganz billigen DLL an, in der eine Klasse ist:

public static class MyTestClass
{
    public static string GetText()
    {
        return "Hello World!";
    }
}

Das rufst Du dann in deinem Skript auf - das ist das Minimum, das funktionieren muss.
Wenn das geht, lässt sich (da bin ich zuversichtlich) auch WPF zum Laufen bringen, oder WinForms, wenn dir das besser liegt.

PS:
Wobei dein Skript WPF verwendet, das ist also vermutlich eine Voraussetzung, damit das Skript funktioniert und WinForms wäre wieder eine zusätzliche Hürde, denn beides zusammen ...
Ich musste so ein WinForms-WPF-Misch-Projekt mal aufräumen - ich würde es nicht meinem schlimmsten Feind wünschen.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Danke für die Antworten!
Ich werde versuchen, was ich kann.
Nach dem Abendbrot werde ich mir alles nochmal zu Gemüte ziehen.
Wichtig, dass am Ende eine sinnvolle Technologie steht!
Bis dahin
VD EccoBravo
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Hallo, hier bin ich wieder!
Oh welch ein Wunder, ich habe gestern abend vom benannten Amerikaner ein Musterprojekt bekommen, welches mit meiner Softwareumgebung UND dem WPF umgehen kann.
Ich habe es mir dieses vorgenommen und an meine einfachen Wünsche angepasst.
Ich starte jetzt das C# Projekt (dll) aus meiner Softwareumgebung heraus und bekomme tatsächlich ein Window mit einem Label UIcontrol mit dem Namen des geladenen Datensatzes angezeigt. Darüber bin ich erst mal sehr glücklich. Vwerstanden habe ich damit aber immer noch nichts!
Nun lasse ich in meinem Projekt eine for next Schleife laufen und möchte mir im vorhandenen Label UIcontrol den durchlaufenden Index anzeigen lassen. Diesen Gefallen tut mir mein Programm aber nicht. Nach der Anzeige des Datensatznamens ist die Arbeit des window beendet und der Label UIcontrol bleibt auf den Datensatznamen stehen.


. . . 
// Progressbar aufrufen         
var mainControl = new Test_WPF.MainControl();
window.Content = mainControl;
window.Width = 610;
window.Height = 460;
window.Title = "Test_WPF";

mainControl.L_Vali.Content = Datensatz.Name;   // auszulesender Datensatzname  wird angezeigt
window.ShowDialog();
         
for (int zi = 0; zi < 100; zi++)
{
        mainControl.L_Vali.Content = (zi + 1).ToString();  // soll angezeigt werden, wird aber nicht
        //mainControl.UpdateLayout(); ??
}                    
. . . 

Der xaml Code:


UserControl x:Class="Test_WPF.MainControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             Height="171.403" Width="575">
    <Canvas>
        <Border Margin="40" BorderThickness="1" BorderBrush="Black">
            <Canvas x:Uid="MainCanvas" x:Name="MainCanvas" Width="500" Height="88">
            </Canvas>
        </Border>
        <Label x:Name="L_Vali" Canvas.Left="181" Canvas.Top="12" Content="" FontWeight="Bold" />
    </Canvas>
</UserControl>

Und der .xaml.cs Code:


namespace Test_WPF
{
    /// <summary>
    /// Interaction logic for MainControl.xaml
    /// </summary>
    public partial class MainControl : UserControl
    {
        public MainControl()
        {
            InitializeComponent();
        }
        public void pb(int vali, int maxi, int mini)  // pb macht eigentlich keinen Sinn, glaube, brauche ich nicht. 
        {
            L_Vali.Content = vali.ToString();
        }
    }
}

Ein einfaches Zuweisen des Indexes auf die Content Eigenschaft des Label UIcontrols funktioniert nicht, ein Window refresh gibt es nicht...

Nicht dass Ihr mich falsch versteht, Ihr sollt wirklich nicht mein Projekt zuende programmieren! Ich will nur wissen, wie ich zur Laufzeit einen Label UIcontrol aktualisiere!

Nicht dass Ihr wieder anfangt, mit Wattebällchen zu werfen! Im Internet habe ich einiges zu DataBinding, asynchroner Programmierung und Multithreads gefunden und wollte das probieren. Dabei bin ich vollkommen durcheinander gekommen, da diese Experten nicht schreiben, was in die .xaml.cs und was in die .cs Datei kommt. Ich bekomme immer mehr den EIndruck, dass die Erzeuger der UIcontrols nur halbe Arbeit gemacht haben. Ich muss mich um den ganzen Thread-Kram kümmern, der gehört doch von vorne herein in die UIcontrols hinein, das muss ich doch nicht erst selbst basteln!!! Wir leben in 2021, aber bei C# bekomme ich immer mehr den Eindruck in die (0er Jahre des letzten Jahrtausend zurückgebombt worden zu sein!

Ich habe mir auch das Visual C# 2019 Rezeptebuch von Jürgen Kotz besorgt und umhergelesen. Darin schwafelt er von DataBinding, asynchroner Programmierung und Multithreads. Mir wird auch hier nicht klar, was davon in die .cs und was in die .xaml.cs gehört.

35 Jahre Programmiererfahrungen, an die 100 super laufende Projekte aber an C# breche ich mir das Genick!" Fliegt zum Mond aber verunglückt beim Fahrradfahren!"
Nun bitte keine roten Wattebällchen!
Vielen Dank EccoBravo
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von EccoBravo am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Auf alle Fälle macht es keinen Sinn, dass Du die Fehler bei anderen Personen suchst. Das hilft für die Gesprächskultur genauso wenig wie Aussagen zu Löwen und Salaten.
Dein Projekt kommt mit so einer Haltung nicht weiter - und nebenbei macht man sich mit solchen Aussagen wenig Freunde ;-)
Zitat von EccoBravo
Ich muss mich um den ganzen Thread-Kram kümmern, der gehört doch von vorne herein in die UIcontrols hinein, das muss ich doch nicht erst selbst basteln!!!
Der Sinn von Data Binding und Co ist genau das, dass Du Dich um sowas nicht kümmern musst, weil dies automatisch passiert.
Hingegen beim manuellen Zugriff auf UI Komponenten bist Du in der Verantwortung zu kontrollieren, dass Du Dich im richtigen Thread befindest.
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
Verwendest Du Data Binding (XAML -> ViewModel) korrekt, dann ist das alles nicht notwendig.
Zitat von EccoBravo
Darin schwafelt er von DataBinding, asynchroner Programmierung und Multithreads. Mir wird auch hier nicht klar, was davon in die .cs und was in die .xaml.cs gehört.
Ich empfinde hier Deine Aussagen als extremst respektlos gegenüber genanntem Autor. Er wird sicherlich nicht "schwafeln".
Und wenn Du nur "herumliest", wie Du es selbst nennst, dann wundert es mich nicht, dass Du die Konzepte nicht verstehst.
Mit 35 Jahren Programmiererfahrung, wie Du es hier besonders betonst, mag man doch meinen, dass man durchaus strukuriert an solch eine Sache gehen kann.

Was in die XAML gehört und was in das Code-Behind kannst Du in quasi jedem WPF Tutorial entnehmen.
In die XAML gehören UI-Strukturen sowie die Bekanntmachung des ViewModels. Die ".xaml.cs" muss im Idealfall gar nicht angefasst werden.

Allein dass Du diesen Unterschied immer noch nicht verstanden hast zeigt mir, dass Du wirklich noch keine Doku oder Tutorial durchgelesen oder befolgt haben kannst.
Übersicht über XAML - WPF .NET Framework

Und hier die Grundlagendoku zur XAML, dem Vorgehen zu Bindungen über ViewModels
Code-Behind und XAML - WPF .NET Framework
Darin sind auch alle Code-Beispiele als Download enthalten, sodass das wirklich jeder verstehen und nachvollziehen kann, wo was liegt und wie etwas strukturiert ist.
Man muss nur wollen.

Ich bitte Dich wirklich, insbesondere weil Du selbst einen solchen einforderst, Deinen doch eher rauen Ton etwas anzupassen, weil da wirklich nen paar Aussagen drin sind, die mehr als unfair sind.
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1480
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat
[...] da diese Experten nicht schreiben, was in die .xaml.cs und was in die .cs Datei kommt.
Niemand sagt dir, was Du in welche Datei schreiben sollst - wenn Du das willst, musst Du dir einen Mentor suchen, dem dein Lernerfolg egal ist und dir alles diktiert.
Es geht um Prinzipien und Konzept, die musst Du verstehen und wenn Du dich konsequent weigerst, dich darauf einzulassen, wirst Du nicht weiter kommen.
Wenn Du das verstehst, wird auch klar, was bei deinem Projekt wo hin muss.

Vergiss, was Du über WPF zu wissen glaubst und bau dir kleine Beispiel-Projekte, mit denen Du dann die Konzepte ausprobieren kannst.
Oder ignoriere weiterhin alle Ratschläge, hänge weiter in der Luft und verzweifle - das ist dann nämlich hoffnungslos.

Denn wie Abt schon sagt:
Alles, was Du suchst und vermisst, wird durch die Dinge gelöst, die Du dir nicht anschauen willst.
Und ja, ich schreibe bewusst "nicht anschauen willst", weil das mein Eindruck ist.
Diese Konzepte sind zugegeben nicht immer ganz einfach, aber wenn Du nach einem Tag und "Blick ich nicht durch" schon aufgibst, ist das mein Eindruck.

PS @Abt:
Sicher, dass die Links von Xamarin kommen sollten?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
EccoBravo
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Danke vielmals für die Hilfestellungen!
Was ich als Kernbotschaft mitnehme ist folgendes:
Zitat
Die ".xaml.cs" muss im Idealfall gar nicht angefasst werden.
Ich bin zu Erkenntnis gekommen, dass wohl Delphi und Co meinen Verstand verdorben haben!
Ich habe schon versucht, mir die Tutorials und Co lesend anzueignen. Ich bin nicht in der Lage, den Inhalt behind zu erfassen, denn ich habe keine Informatikerausbildung! Ich habe mir alles, was ich über Programmierung weiss mir selber beigebracht. So habe ich es auch hier versucht! Eigentlich sollten die Computerprogramme dem Menschen helfen und das Wissen für ihn verdaubar sein. Ich hhabe hier den Eindruck, dass die Computerprogramme den Menschen entfremdend verändern. Ich bin frustriert und werde mich zurückziehen und mir mein Wissen weiterhin alleine ohne erneute Hilfe erarbeiten! Ich weiss, dass ich es schaffen werde, habe ich bisher auch immer geschafft.
Daher werde ich mich nun vom Forum verabschieden.

#Administrator: Mein Account kann gelöscht werden
EccoBravo
private Nachricht | Beiträge des Benutzers

Moderationshinweis von Abt (09.06.2021 - 23:38:23):

Ich erspare mir jegliches, ehrliches Kommentar :-)
Thread ist geschlossen.