Autor Beitrag
Yankyy02
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Mo 30.09.13 19:37 
Hallo,

ich habe ein Problem was ich nicht nachvollziehen kann und hoffe auf diesem Wege jemand zu finden der eventuell eine Lösung oder vielleicht sogar schonmal ein
ähnliches Problem hatte und mir einen Tipp geben könnte.

Ich habe in einem WPF Fenster eine ListView. Wenn ein Eintrag mackiert ist kann man einen Button betätigen und ein Angebot erstellen was dann in einem neuen Fenster
in einem DocumentViewer angezeigt wird.

Der genaue Ablauf ist folgender: Eintrag selektieren, Button betätigen, neues Fenster öffnet sich wo man unter 3 verschiedenen Preisen auswählen kann dieses Fenster schließt sich danach wieder, Document wird erstellt und einer neuen Fensterklasse übergeben und im DocumentViewer angezeigt.

In Visual Studio egal ob Debug/Release funktioniert es immer aber wenn ich die Anwendung in der Firma installiere (WinXP / Win7) dann funktioniert es auf manchen Rechnern
ohne Probleme und bei anderen gar nicht die Anwendung wird ohne Kommentar beendet.

Anschließend der Code. Ich hoffe jemand erkennt den Fehler denn ich da mache denn der bringt mich ein bischen zum verzweifeln da ich mir einfach nicht erklären kann woran es liegt.

Vielen Dank euch allen.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
private void btnAngebot_Click(object sender, RoutedEventArgs e)
        {
            WindowPreisAuswaehlen wndPreis = new WindowPreisAuswaehlen();
            wndPreis.ShowDialog();
            string Auswahl = wndPreis.CheckBoxName;

                DataRowView item = lstViewWinterreifen.SelectedItem as DataRowView;
                FixedDocument docAngebot = new FixedDocument();
                FixedPage page = new FixedPage();
                PageContent content = new PageContent();

                page.Name = "AngebotWinterkomplettrad";
                page.Height = 1124;
                page.Width = 792;

                #region Logo
                Image imgLindnerHeader = new Image();
                imgLindnerHeader.Source = new BitmapImage(new Uri(@"Images\MainHeader.png", UriKind.Relative));
                Image display = new Image();
                display.Source = imgLindnerHeader.Source.Clone();
                display.Height = 200;
                display.Width = 400;
                display.SetValue(FixedPage.TopProperty, 30.0);
                display.SetValue(FixedPage.LeftProperty, 200.0);
                page.Children.Add(display);
                #endregion

                #region ErsterSeperator

                StackPanel panelSeperatorOne = new StackPanel();
                panelSeperatorOne.SetValue(FixedPage.TopProperty, 235.0);
                panelSeperatorOne.SetValue(FixedPage.LeftProperty, 16.0);
                panelSeperatorOne.Width = 760;
                panelSeperatorOne.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                panelSeperatorOne.Orientation = Orientation.Vertical;
                Separator seperator = new Separator();
                seperator.BorderBrush = Brushes.Black;
                seperator.BorderThickness = new Thickness(4);
                seperator.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                panelSeperatorOne.Children.Add(seperator);
                page.Children.Add(panelSeperatorOne);

                #endregion

                #region Ueberschrift
                StackPanel panelUeberschrift = new StackPanel();
                panelUeberschrift.Orientation = Orientation.Vertical;
                panelUeberschrift.Width = 780;
                panelUeberschrift.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                panelUeberschrift.SetValue(FixedPage.TopProperty, 240.0);
                panelUeberschrift.SetValue(FixedPage.LeftProperty, 6.0);
                TextBlock tbtxtAngebot = new TextBlock(new Bold(new Italic(new Run("Angebot"))));
                tbtxtAngebot.FontSize = 35;
                tbtxtAngebot.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                TextBlock tbtxtWinterkomplettrad = new TextBlock(new Bold(new Italic(new Run("Winterkomplettrad"))));
                tbtxtWinterkomplettrad.FontSize = 35;
                tbtxtWinterkomplettrad.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                panelUeberschrift.Children.Add(tbtxtAngebot);
                panelUeberschrift.Children.Add(tbtxtWinterkomplettrad);

                page.Children.Add(panelUeberschrift);
                #endregion

                #region ZweiterSeperator
                StackPanel panelSeperatorTwo = new StackPanel();
                panelSeperatorTwo.SetValue(FixedPage.TopProperty, 345.0);
                panelSeperatorTwo.SetValue(FixedPage.LeftProperty, 16.0);
                panelSeperatorTwo.Width = 760;
                panelSeperatorTwo.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                panelSeperatorTwo.Orientation = Orientation.Vertical;
                Separator seperatorTwo = new Separator();
                seperatorTwo.BorderBrush = Brushes.Black;
                seperatorTwo.BorderThickness = new Thickness(4);
                seperatorTwo.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                panelSeperatorTwo.Children.Add(seperatorTwo);
                page.Children.Add(panelSeperatorTwo);
                #endregion

                #region Komplettrad

                StackPanel panelKomplettrad = new StackPanel();
                panelKomplettrad.Width = 750;
                panelKomplettrad.SetValue(FixedPage.TopProperty, 450.0);
                panelKomplettrad.SetValue(FixedPage.LeftProperty, 21.0);
                panelKomplettrad.Orientation = Orientation.Vertical;
                TextBlock txtBlockReifen = new TextBlock();
                txtBlockReifen.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                txtBlockReifen.FontSize = 28;
                txtBlockReifen.FontWeight = FontWeights.Bold;
                txtBlockReifen.Margin = new Thickness(010010);
                TextBlock txtBlockFelge = new TextBlock();
                txtBlockFelge.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                txtBlockFelge.FontSize = 28;
                txtBlockFelge.FontWeight = FontWeights.Bold;
                txtBlockFelge.Margin = new Thickness(00010);
                TextBlock txtBlockArbeit = new TextBlock();
                txtBlockArbeit.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                txtBlockArbeit.FontSize = 28;
                txtBlockArbeit.FontWeight = FontWeights.Bold;
                txtBlockArbeit.Margin = new Thickness(00010);
                Separator separatorSumme = new Separator();
                separatorSumme.BorderBrush = Brushes.Black;
                separatorSumme.BorderThickness = new Thickness(4);
                separatorSumme.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                separatorSumme.Width = 700;
                TextBlock txtBlockPreis = new TextBlock();
                txtBlockPreis.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                txtBlockPreis.FontSize = 28;
                txtBlockPreis.FontWeight = FontWeights.Bold;
                txtBlockPreis.Margin = new Thickness(010010);
                txtBlockPreis.Foreground = Brushes.Red;
                txtBlockPreis.FontStyle = FontStyles.Oblique;
                txtBlockPreis.TextDecorations = TextDecorations.Underline;

                txtBlockReifen.Text = item.Row[0].ToString() + " " + item.Row[1].ToString() + " " +
                    item.Row[2].ToString() + item.Row[3].ToString() + " " + item.Row[4].ToString();
                txtBlockFelge.Text = item.Row[9].ToString() + " " + item.Row[10].ToString() + " " +
                    item.Row[11].ToString() + " " + item.Row[12].ToString();
                txtBlockArbeit.Text = "Montieren / Wuchten / Ventil";
                switch (Auswahl)
                {
                    case "AKTION":
                        txtBlockPreis.Text = "Komplettrad " + string.Format("{0:c}", item.Row[16]) + " inkl. Mwst.";
                        break;
                    case "HAUS":
                        txtBlockPreis.Text = "Komplettrad " + string.Format("{0:c}", item.Row[17]) + " inkl. Mwst.";
                        break;
                    case "BEHOERDE":
                        txtBlockPreis.Text = "Komplettrad " + string.Format("{0:c}", item.Row[18]) + " inkl. Mwst.";
                        break;
                    default:
                        txtBlockPreis.Text = "Komplettrad " + string.Format("{0:c}", item.Row[16]) + " inkl. Mwst.";
                        break;
                }

                panelKomplettrad.Children.Add(txtBlockReifen);
                panelKomplettrad.Children.Add(txtBlockFelge);
                panelKomplettrad.Children.Add(txtBlockArbeit);
                panelKomplettrad.Children.Add(separatorSumme);
                panelKomplettrad.Children.Add(txtBlockPreis);

                page.Children.Add(panelKomplettrad);

                #endregion

                #region Felgenbild
                DataRowView dr = lstViewWinterreifen.SelectedItem as DataRowView;
                byte[] rawImage = dr[15as byte[];
                BitmapImage image = LoadImage(rawImage);
                System.Windows.Controls.Image imageToShow = new Image();
                imageToShow.Source = image.Clone();
                imageToShow.Height = 200;
                imageToShow.Width = 200;
                imageToShow.SetValue(FixedPage.LeftProperty, 296.0);
                imageToShow.SetValue(FixedPage.TopProperty, 750.0);
                page.Children.Add(imageToShow);
                #endregion

                #region Bearbeiter

                StackPanel panelBearbeiter = new StackPanel();
                panelBearbeiter.Orientation = Orientation.Vertical;
                panelBearbeiter.Width = 700;
                panelBearbeiter.SetValue(FixedPage.TopProperty, 1000.0);
                panelBearbeiter.SetValue(FixedPage.LeftProperty, 46.0);
                TextBlock txtBlockBearbeiter = new TextBlock();
                txtBlockBearbeiter.FontSize = 20;
                txtBlockBearbeiter.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                txtBlockBearbeiter.Text = "Das Angebot wurde von " + Einstellungen.Default.BenutzerNameAnwendung + " erstellt.";
                panelBearbeiter.Children.Add(txtBlockBearbeiter);
                page.Children.Add(panelBearbeiter);
                #endregion



                ((IAddChild)content).AddChild(page);
                docAngebot.Pages.Add(content);
                WindowAngebot wnd = new WindowAngebot(docAngebot, false);
                wnd.ShowDialog();
                if (wnd.Speichern)
                {
                    WindowKundenName windowKunde = new WindowKundenName();
                    windowKunde.ShowDialog();
                    if (!windowKunde.Abbruch)
                    {
                        int FelgenID = (int)item.Row[19];
                        string Kundenname = windowKunde.Kundenname;
                        if (serverConnection.SaveAngebot(Kundenname, txtBlockReifen.Text, txtBlockFelge.Text, txtBlockPreis.Text, Einstellungen.Default.BenutzerNameAnwendung, FelgenID))
                            MessageBox.Show("Angebot wurde gespeichert""Info", MessageBoxButton.OK, MessageBoxImage.Information);
                    }

                }
            

        }


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
public partial class WindowAngebot : Window
    {
        private bool isSavedAngebot;
        private bool saveAngebot = false;
        public bool Speichern { get { return saveAngebot; } }

        public WindowAngebot(FixedDocument docAngebot, bool IsSavedDoc)
        {
            InitializeComponent();
            viewerAngebot.Document = docAngebot;
            this.isSavedAngebot = IsSavedDoc;
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (!isSavedAngebot)
            {
                MessageBoxResult result = MessageBox.Show("Möchten Sie das Angebot speichern?""Frage", MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (result == MessageBoxResult.Yes)
                {
                    saveAngebot = true;
                }
            }

        }


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
    public partial class WindowPreisAuswaehlen : Window
    {
        private string checkBoxName;

        public string CheckBoxName
        {
            get { return checkBoxName; }
            set {  }
        }

        


        public WindowPreisAuswaehlen()
        {
            InitializeComponent();
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
                if ((bool)chkAktion.IsChecked)
                {
                    checkBoxName = (string)chkAktion.Tag;
                }
                else if ((bool)chkHauspreis.IsChecked)
                {
                    checkBoxName = (string)chkHauspreis.Tag;
                }
                else if ((bool)chkBehoerde.IsChecked)
                {
                    checkBoxName = (string)chkBehoerde.Tag;
                }
                else
                {
                    e.Cancel = true;
                    MessageBox.Show("Bitte einen Preis auswählen!""Hinweis", MessageBoxButton.OK, MessageBoxImage.Information);
                }
               

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }


    }


Hier noch die LoadImage Methode

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
private BitmapImage LoadImage(byte[] imageData)
        {
            if (imageData == null || imageData.Length == 0return null;
            var image = new BitmapImage();
            using (var mem = new MemoryStream(imageData))
            {
                mem.Position = 0;
                image.BeginInit();
                image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
                image.CacheOption = BitmapCacheOption.OnLoad;
                image.UriSource = null;
                image.StreamSource = mem;
                image.EndInit();
            }
            image.Freeze();
            return image;
        }
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 01.10.13 00:29 
Ich möchte ja ungern meckern, ohne wirklich effektiv helfen zu können, aber die Methode "btnAngebot_Click" ist ein einziges Chaos.

Regions sind an sich schon unpraktisch, aber wenn du schon innerhalb einer Methode welche erstellen musst, damit das ganze halbwegs überschaubar bleibt, hast du was falsch gemacht.
Eigentlich jeden Teil, den du in eine Region gepackt hast, kannst du in eine Methode aus lagern. Auch wenn dann mehr Methoden daraus werden, immer noch besser, als eine Methode, die länger ist, als manche Klasse. Die eine Methode lässt sich dann einfach viel flüssiger lesen.
Switch-Anweisungen wenn möglich, vermeiden, ansonsten zumindest irgendwo vergraben, wo niemand auf die Idee kommt, sich das anzuschauen.

Und warum steht im set-Accessor bei WindowPreisAuswaehlen.CheckBoxName nix drin? Dann lieber gar kein Setter, als einer, wo nix drin steht.

Es gibt noch weit mehr Regeln und ich halte mich weiß Gott nicht an alle, aber das waren die gröbsten Verstöße.
Wenn du möchtest, kann ich dir auch ein paar Links geben, wo einige Regeln für guten Code drin stehen.




Zu dem Problem (wie gesagt, keine Lösung, aber ne Idee):

Geh doch einfach mal hin und debugge dein Programm auf einem Problemrechner. Muss ja nicht gleich das riesige Visual Studio sein, es reicht ja auch irgendeine kostenlose Software, die einen Debugger mit bringt. Die IDE #develop (SharpDevelop) bietet glaube ich eine solche Funktion und wenn ich mich nicht irre, gibts das auch portable - aber da bin ich mir nicht sicher.
Auf jeden Fall kannst du dir dann anschauen, wo er raus springt. Wenn es sich dort auch ohne Exception beendet, dann kannst du ungefähr vorher einen BreakPoint setzen und dich dann mit der Taste F10 oder F11 voran tasten um den Übeltäter zu finden.
Wenn du dann weißt, wo genau es knallt, dann findest du entweder den Fehler, oder du weißt, in welcher Anwendung, die du nutzt, der Fehler auf tritt. Im letzteren Fall kannst du vermutlich nicht viel dagegen tun, aber du kannst im Vergleich mit dem funktionierenden Fall heraus finden, die du den Fehler verhinderst.
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Di 01.10.13 14:10 
Servus und danke für deinen Beitrag ich werde mir deine Tips zu Herzen nehmen.

Hab mir jetzt Sharp Develope auf einen der besagten Rechner installiert wo das Programm
abstürzt. Auch bekomme ich Die Meldung Programm schließen oder Debuggen aber wenn ich auf
Debuggen gehe passiert nichts!

Ist es nicht so daß wenn ich eine Release Version habe kein Debuggen mehr möglich ist??

Kannst du mir sagen woran es liegt??

Und ich weiß das gehört in ein neues Thema aber wenn ich Programm Einstellungen ändere und mit Save() speichere
passiert es manchmal das beim nächsten Programm Start die Einstellungen weg sind. Vielleicht hast du da Erfahrung
und eine Antwort für mich!

Danke!
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 01.10.13 14:37 
Ich meine, den Code dort zu debuggen. Unpraktisch, aber die beste mir bekannte Möglichkeit, Fehler zu finden, wenn keine Fehlermeldung ausgegeben wird.



Erfahrung ist das Eine, Kenntnis über dein Programm ist das Andere.

Ich müsste dein Programm kenen um überhaupt eine Chance zu haben, den Fehler zu finden.

Was du aber trotzdem machen kannst, ist immer noch, mit dem Debugger Anweisung für Anweisung durch den Code gehen.
Bei jeder Änderung schaust du, wo ein Fehler liegen könnte, ob die Werte so stimmen.

Da der ja irgendwann nicht speichert, oder irgendwo einfach aus geht und wir sowieso erst einmal in der eigenen Software einen Fehler suchen, müsstest du irgendwo dann eine Variable finden, die nicht den gewollten Wert enthält.

Wenn der Fehler in deiner Software liegt, könnte es vielleicht auch irgendwo sein, dass eine Exception abgefangen und das Programm dann beendet wird, weil wegen keine Ahnung.


Zuletzt bearbeitet von Palladin007 am Di 01.10.13 15:29, insgesamt 2-mal bearbeitet
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Di 01.10.13 14:53 
OK danke für deine schnelle Antwort!

Hast du eventuell auch eine Erklärung auf meine 2. Frage?
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 01.10.13 15:28 
Die gleiche Erklärung, wie auch zuvor.

Ich kann nix tun, wenn ich den Code nicht kenne. Und auch dann ist es schwer, dir zu helfen, weil wir uns erst in das Programm rein lesen müssten.
Leg einen BreakPoint in der Save-Methode an und versuche durch gezieltes Debuggen den Fehler zu finden.

Mehr können wir auch nicht machen, nicht ohne den Code zu kennen und andere Bedingungen zu kennen.
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Di 01.10.13 15:34 
Okey folgende Situation: VS 2012 installiert und die Anwendung gestartet läuft nach mehreren Tests ohne Probleme!!
Ich kann mir einfach nicht erklären woran es liegt!

Was das Speichern der Einstellungen angeht habe ich nur eine Variable vom Typ String die den Benutzernamen speichert.
string Benutzername = "User";
Nach der Zuweisung mit Properties.Settings.Default.UserName = Benutzername;
Und danach Properties.Settings.Default.Save();

Mehr is es nicht und trotzdem müssen die Angaben manchmal neu eingegeben werden!
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 01.10.13 16:03 
Da weiß ich nicht, woe das mit Save bei den Properties abläuft.

Schreib das auch lieber in eine Datei, dafür gibt es ja die Idee, in Dateien zu speichern ^^
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 01.10.13 16:22 
Schau doch mal ob die entsprechende user.config auch erstellt wurde. Wenn du das die ganze Zeit aus dem Debugger ausprobiert und neu gebaut hast schaust du vermutlich beim nächsten mal nicht mehr auf die selbe Stelle. Der generierte Pfad für die user.config ist Versions und Build abhängig.

Standardmäßig wenn du nirgendwo lenkend eingegriffen hast sollte die in

ausblenden Quelltext
1:
%AppData%\DeinLieberCOMPANYNAME\DeinLieberEXECUTABLENAME_Url_HASH\DeineLiebeVERSIONSNUMMER\					


liegen. Wobei der Hash je Build neu ist.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 01.10.13 16:25 
Hallo,

ausblenden C#-Quelltext
1:
2:
3:
string Benutzername = "User";
Properties.Settings.Default.UserName = Benutzername;
Properties.Settings.Default.Save();

ist schon der richtige Weg (gespeichert wird in der User Config-Datei).

Bitte aber in diesem Beitrag nicht mehr weiter darüber diskutieren - ansonsten bitte ein neues Thema eröffnen, danke.
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Mi 02.10.13 11:52 
Hallo nochmal,

hab jetzt einen try catch um die Anweisung gemacht. Auf dem Entwicklungsrechner 1000 mal probiert keine Fehlermeldung.
Setup neu erstellt und auf die Endrechner gespielt 4-5 mal keine Probleme und dann plötzlich folgende Fehlermeldung wie
im Anhang!

Das ganze sollte dann hier passieren

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Image imgLindnerHeader = new Image();
imgLindnerHeader.Source = new BitmapImage(new Uri(@"Images\MainHeader.png", UriKind.Relative));
Image display = new Image();
display.Source = imgLindnerHeader.Source.Clone();
display.Height = 200;
display.Width = 400;
display.SetValue(FixedPage.TopProperty, 30.0);
display.SetValue(FixedPage.LeftProperty, 200.0);
page.Children.Add(display);

Der Ordner Images wurde im Projektmappen Explorer erstellt und die Datei MainHeader.png hineingezogen. Der Buildvorgang wurde
auf Inhalt gestellt und in Ausgabeverzeichnis kopieren auf immer kopieren.

Kann mir jemand sagen was ich da falsch mache?! Hab mir einige Tutorials dazu angeschaut kann aber keinen Fehler erkennen und
warum Funktioniert es ünberhaupt wenn er dann plötzlich die Datei nicht finden kann?

Ich hoffe es kann mir jemand weiterhelfen denn das bringt mich echt zur Verzweiflung.

Danke schonmal an alle!
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 02.10.13 13:44 
Hallo Yankyy02,

sagen dir die Begriffe "relative und absolute Pfade" sowie "aktuelles Arbeitsverzeichnis" etwas?

Hast du evtl. einen "Öffnen" bzw. "Speichern"-Dialog in deinem Programm? Bei der Einstellung RestoreDirectory = false ändert sich das aktuelle Arbeitsverzeichnis und der nächste Zugriff mittels relativer Pfade (d.h. bei dir @"Images\...") führt dann zu einem falschen Pfad und damit zu einer FileNotFoundException.

Fazit: Relative Pfade nur dann verwenden, wenn man weiß, daß man auch wirklich Pfade relativ zum Arbeitsverzeichnis möchte und sich das aktuelle Arbeitsverzeichnis nicht ändert!

Zugriff besser über absolute Pfade - aber nicht hartcodiert(!), sondern mittels z.B.
ausblenden C#-Quelltext
1:
string filename = Path.Combine(applicationDir, @"Images\MainHeader.png");					

Unter [FAQ] Pfad zur eigenen Anwendung (EXE) ermitteln steht, wie man für verschiedene Projekttypen diesen ermittelt.
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Do 10.10.13 20:51 
......

okey hab die Anwendung jetzt 1 Woche im produktivem Einsatz gehabt und keine Abstürze mehr verzeichnen müssen.

Was allerdings manchmal passiert, ist das das Logo (Image) beim ersten laden nicht angezeigt wird. Allerdings passiert das wieder nur wenn die Anwendung auf einem fremden Rechner installiert ist.

Das Problem ansich ist aber dank Th69 gelöst! Vielen Dank dafür.

MfG