Laden...

Forenbeiträge von FinnDunkel Ingesamt 12 Beiträge

11.12.2023 - 10:22 Uhr

Hast du eine Idee wie ich das in meinem Code anwenden könnte? Eigentlich mache ich es ja bereits über MVVM Bordmitteln, wobei es leider nicht das gewünschte Ergebniss liefert...

11.12.2023 - 09:41 Uhr

Hallo zusammen,

ich habe eine WPF-Anwendung in C# geschrieben. Hierbei habe ich verschiedene Seiten erstellt, wobei auf der ersten Seite der Benutzer bestimmte Werte eingibt sowie einige Inhalte automatisch ausgefüllt werden. Sobald alle Eingaben getroffen wurden, wird über einen Button "Berechnen" eine Berechnung auf den anderen Seiten durchgeführt und der Benutzer wird automatisch zur nächsten Seite weiter geleitet.  Die Werte werden über eine extra Klasse namens "Datenspeicher" gespeichert und an die weiteren Seiten übergeben, wo ich dann auf die Inhalte zugreifen kann.

Wenn ich nun zurückkehre zur ersten Eingabeseite werden leider nicht alle Werte gespeichert und wieder angezeigt, sondern lediglich die Inhalte aus den "einfachen" Textboxen, aber keine Inhalte aus ComboBoxen oder RadioButtons.

Hierbei werden die Inhalte der Textboxen "LängeBauteil" oder "Stahlpreis" wieder angezeigt, die Inhalte der ComboBoxen "ProfilartGenau" wiederum nicht.

Hier ist der Code der ersten "Eingabeseite", wo ich die Werte speichere:

namespace WpfAppToolBar.Pages
{
    public partial class Page1 : Page
    {
    InitializeComponent();
    
    //Eingegebene Daten bleiben beim Wechseln der Seite bestehen: 
#region
if (Datenspeicher.LängeBauteilWert != null)
{
    LängeBauteil.Text = Datenspeicher.LängeBauteilWert;
}

if (Datenspeicher.ProfilartIndex >= 0 && Datenspeicher.ProfilartIndex < ProfilartGenau.Items.Count)
{
    ProfilartGenau.SelectedIndex = Datenspeicher.ProfilartIndex;
}

if (Datenspeicher.Bauteilart1 != null)
{
    Bauteilart.SelectedItem = Datenspeicher.Bauteilart1;
}

if (Datenspeicher.Stahlpreis != null)
{
    Stahlpreis.Text = Datenspeicher.Stahlpreis;
}

if (Datenspeicher.Stückzahl != null)
{
    Stückzahl.Text = Datenspeicher.Stückzahl;
}

if (Datenspeicher.Gewicht != null)
{
    Gewicht.Text = Datenspeicher.Gewicht;
}

if (Datenspeicher.Bauteillänge1 != null)
{
    Bauteillänge1.Text = Datenspeicher.Bauteillänge1;
}

if (Datenspeicher.Bauteilbreite2 != null)
{
    Bauteilbreite2.Text = Datenspeicher.Bauteilbreite2;
}

if (Datenspeicher.Flanschbreite3 != null)
{
    Flanschbreite3.Text = Datenspeicher.Flanschbreite3;
}

if (Datenspeicher.Bauteilhöhe4 != null)
{
    Bauteilhöhe4.Text = Datenspeicher.Bauteilhöhe4;
}

if (Datenspeicher.Projektnummer != null)
{
    Projektnummer.Text = Datenspeicher.Projektnummer;
}

if (Datenspeicher.Bauvorhaben != null)
{
    Bauvorhaben.Text = Datenspeicher.Bauvorhaben;
}

if (Datenspeicher.UmfangBauteil != null)
{
    UmfangBauteil.Text = Datenspeicher.UmfangBauteil;
}

#endregion

}
26.09.2023 - 16:21 Uhr

Ja, genau. Ich war mir nicht sicher 😄

Das hatte ich eigentlich auch schon probiert (siehe Fotos). Klappt leider immer noch nicht...

26.09.2023 - 15:48 Uhr

Ich bin mir ganz sicher, ob das so richtig ist was ich gemacht habe, aber so klappt es leider immer noch nicht (siehe Foto)....

26.09.2023 - 13:36 Uhr

Naja, anscheinend wird die Excel-Datei nicht gefunden. In meinem Ergebnisfeld steht nämlich: "Ungültige Eingabe.", und das unabhängig davon, was ich in meine TextBoxen reinschreibe (siehe Foto)...

26.09.2023 - 13:02 Uhr

Hallo zusammen,

ich probiere die Werte aus einer Excel-Tabelle automatisch auslesen zu lassen und in der GUI anzuzeigen. Das Ziel ist es, dass der Benutzer eine Zahl für eine Länge (z.B. 13,5) und eine Zahl für eine Breite (z.B. 0,5) in eine TextBox eingibt. Die Textboxen sind im XAML entsprechend benannt:

<TextBox Margin="0,0,10,0" x:Name="textBoxLänge"/>
<TextBox Margin="0,0,10,0" x:Name="textBoxBreite"/>

Das Programm soll nun automatisch den passenden Wert aus der Excel-Tabelle ziehen und anzeigen. Einen Ausschnitt aus meiner Tabelle sowie meinem Projektmappenexplorer habe ich angefügt. Hier noch die Benennung im XAML für das Feld, wo das Ergebnis angezeigt werden soll:

            <Label Margin="0,0,10,0" Height="25" Content="{Binding ErgebnisLabelContent}" x:Name="lbl_nullstoß"/>

Ich habe ein wenig mit ChatGPT rumprobiert, aber so ganz will das ganze noch nicht. Hat jemand eine Idee warum? Hier mein Codebehind:

using OfficeOpenXml;
using System;
using System.IO;
using System.Windows.Controls;

namespace WpfAppToolBar.Pages
{
   public partial class Vorbereitungskosten : Page
   {
       public string ErgebnisLabelContent
       {
           get { return (string)lbl_nullstoß.Content; }
           set { lbl_nullstoß.Content = value; }
       }
       public Vorbereitungskosten()
       {
           InitializeComponent();
           // Konfigurieren Sie den LicenseContext im Konstruktor
           ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
           using (var package = new ExcelPackage(new FileInfo("/Projektmappenelemente/Breite_Laenge.xlsx")))
           {
               var workSheet = package.Workbook.Worksheets["LaengeBreite"];
               // Erfassen Sie die Benutzereingaben aus den Textboxen
               double eingabeLänge, eingabeBreite;
               if (double.TryParse(textBoxLänge.Text, out eingabeLänge) && double.TryParse(textBoxBreite.Text, out eingabeBreite))
               {
                   // Erstellen Sie die Beschreibung, um sie mit der Excel-Tabelle abzugleichen
                   string beschreibung = $"Standardhandelslängen {eingabeLänge}, Standardbreiten {eingabeBreite}";
                   // Finden Sie die Zeile und Spalte, in der der Wert steht
                   int zeileIndex = 0; // Annahme: Anfangswert
                   int spaltenIndex = 0; // Annahme: Anfangswert
                   // Suchen Sie die Zeile in Spalte A, die zur eingegebenen Länge passt
                   for (int row = 3; row <= workSheet.Dimension.End.Row; row++)
                   {
                       double zellenWert = double.Parse(workSheet.Cells[row, 1].Text);
                       if (zellenWert == eingabeLänge)
                       {
                           zeileIndex = row;
                           break;
                       }
                   }
                   // Suchen Sie die Spalte in Zeile 2, die zur eingegebenen Breite passt
                   for (int col = 2; col <= workSheet.Dimension.End.Column; col++)
                   {
                       double zellenWert = double.Parse(workSheet.Cells[2, col].Text);
                       if (zellenWert == eingabeBreite)
                       {
                           spaltenIndex = col;
                           break;
                       }
                   }
                   // Wenn Zeile und Spalte gefunden wurden, erhalten Sie den Wert
                   if (zeileIndex > 0 && spaltenIndex > 0)
                   {
                       double passenderWert = double.Parse(workSheet.Cells[zeileIndex, spaltenIndex].Text);
                       ErgebnisLabelContent = $"Passender Wert: {passenderWert}";
                   // Das Ergebnis muss noch mit der Blechdicke multipliziert werden!
                   }
                   else
                   {
                       ErgebnisLabelContent = "Kein passender Wert gefunden.";
                   }
               }
               else
               {
                   ErgebnisLabelContent = "Ungültige Eingabe.";
               }
           }
       }
   }
}
21.09.2023 - 16:48 Uhr

Okay, vielen Dank!

Ich werde mir die Típps zu Herzen nehmen, jedoch werde ich nach meiner Masterarbeit sicherlich nie wieder programmieren müssen, weshalb ich es auch okay finde, wenn ich mich damit nicht so gut auskenne 😄

21.09.2023 - 13:51 Uhr

Das hat nicht so richtig geklappt. Ich habe dem Dictionary noch einen Schlüssel zuweisen müssen. Leider lassen sich die Bilder auf der Seite "Page2" immer noch nicht anzeigen, beim Abrufen des Schlüssels vom Dictionary ist auch etwas schief gelaufen. Des Weiteren lassen sich die anderen Seiten auch nicht öffnen durch den Text bzw. das nicht vorhandene Bild... keine ahnung 😦

Zudem wurde in dem Youtube Video mit Hilfe der Frame Funktion die Navigation gesteuert:

        <Frame Source="/Pages/Page2.xaml" NavigationUIVisibility="Hidden"/>

Sobald ich die Funktion jedoch wieder ausklammer und versuche die Anwendung zu starten, hängt sich die Anwendung auf, sobald ich versuche zur zweiten Seite zu navigieren. Irgendwelche Ideen warum?

Ich habe den Code nochmal neu hochgeladen auf Github. Kannst du nochmal drüber schauen?

https://github.com/FinnDunkel/BlonderHans.git

Vielen lieben Dank vorab!

21.09.2023 - 13:10 Uhr

Das hat super geklappt, danke!

Wie bekomme ich das gleiche nun auch für meine Bilder hin? Und warum wird der gesetzte Setter in der Datei "GenericSeite2.xaml" nicht ausgeführt?

<Setter Property="Cursor" Value="Hand"/>
21.09.2023 - 08:55 Uhr

Das merkwürdige ist ja, dass ich die NavigationSeite2 aufrufen kann ohne Probleme. Mir wird sogar das Textfeld angezeigt, jedoch ohne Inhalt...

21.09.2023 - 08:45 Uhr

Hey, danke für die Antwort. Leider klappt es aber nicht...

Auf der Page2.xaml habe ich die Namespaces folgendermaßen beschrieben:

xmlns:local="clr-namespace:WpfAppToolBar.Pages" 
xmlns:n="clr-namespace:WpfAppToolBar"

Meine Datei "NavigationSeite2.cs hat folgenden Namespace:

namespace WpfAppToolBar 

Wenn ich nun, wie von dir vorgeschlagen, das versuche über n:NavigationSeite2 aufzurufen, erhalte ich folgende Fehlermeldung:

"Der Name "NavigationSeite2" ist im Namespace "clr-namespace:WpfAppToolBar" nicht vorhanden."

Weißt du woran das liegt?

LG

20.09.2023 - 10:25 Uhr

Hallo Zusammen,

ich bin komplett neu im C# und XAML Game. Wie auch immer, ich probiere aktuell eine Anwendung zu schreiben für meine Masterthesis nebenbei.

Hierbei habe ich mit Hilfe eines YT-Tutorials eine Navigationsbar eingefügt, welche mich zwischen vier verschiedenen Seiten switchen lässt. Nun wollte ich eine ähnliche Navigation innerhalb der Page 2 machen. Leider klappt das nicht so wie gewollt, da der Bezug fehlt. Hier meine Fehlermeldung:

Fehler    XDG0008    Der Name "NavigationSeite2" ist im Namespace "clr-namespace:WpfAppToolBar" nicht  vorhanden.

Hier mein Code: https://github.com/FinnDunkel/-myCsharp.git

Danke vorab für eure Hilfe!