Laden...
F
FinnDunkel
myCSharp.de - Member
3
Themen
12
Beiträge
Letzte Aktivität
vor einem Jahr
Dabei seit
20.09.2023
Erstellt vor einem Jahr

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...

Erstellt vor einem Jahr

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

}
Erstellt vor einem Jahr

Ja, genau. Ich war mir nicht sicher 😄

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

Erstellt vor einem Jahr

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

Erstellt vor einem Jahr

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)...

Erstellt vor einem Jahr

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.";
               }
           }
       }
   }
}
Erstellt vor einem Jahr

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 😄

Erstellt vor einem Jahr

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!

Erstellt vor einem Jahr

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"/>
Erstellt vor einem Jahr

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