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
String Übergabe Methode zu Methode
NameInvalid
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

String Übergabe Methode zu Methode

beantworten | zitieren | melden

Hallo erstmal,
ich bin aktuell Anfänger in C# in Verbindung mit der WPF. Ich habe zum Einstieg in C# ein kleines UI mit einem Code behind welcher im Grunde funktioniert und ich das ganze jetzt immer weiter ausarbeiten möchte, aber jetzt schon an der ersten Hürde scheitere.

Konkret habe ich eine Textbox zum aufnehmen eines Strings dieser String soll mit 2 Eventhandlern verarbeitet werden

1. Eventhandler "Key-UP" soll den eingegeben Wert zwischenspeichern als String "speed"
2. Eventhandler "GotMouseCapture" soll den zuvor gespeicherten Wert wieder in die Textbox ablegen sobald reingeklickt wird

Das ganze hat den Hintergrund, dass der Wert durch einen Slider manipuliert wird, aber beim Wunsch des änderns wieder der "Original Wert" angezeigt wird und der Slider zurückgestellt wird.

Problemstellung, ich bekomme den string "speed" natürlich in dem ersten Void zugewiesen, kann ihn aber in dem zweiten Void nicht anwenden, Warum? Ich geh davon aus dass es ziemlich simpel is ich aber nicht draufkomme wo ich den string "freigeben oder "übergeben" kann.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace BlaBla
{

    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }

        private void box_speed_KeyUp(object sender, KeyEventArgs e)
        {
            string speed = box_speed.Text;
        }

        private void box_speed_GotMouseCapture(object sender, MouseEventArgs e)
        {
            slider_Factor.Value = 100;
            box_speed.Text = speed;
        }
    }
}

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

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15528
Herkunft: BW

beantworten | zitieren | melden

Zitat von NameInvalid
in dem ersten Void zugewiesen
Diese "Dinger" nennt man nicht void, sondern Methode.
Void ist die Rückgabe; in diesem Fall bedeutet das "es gibt kein Rückgabewert": void = leer.

Ich hab entsprechend den Titel angepasst, da sonst keiner weiß, was Du mit void sagen willst.
Zitat von NameInvalid
kann ihn aber in dem zweiten Void nicht anwenden, Warum?

Das nennt sich Scopes.
Dein String speed ist in der Methode box_speed_KeyUp verfügbar, aber nicht in box_speed_GotMouseCapture.
Das liegt daran, dass Du speed als lokale Variable definiert hast, die immer nur im jeweiligen Scope exisiert.

Du müsstest speed als Feld anlegen statt als lokale Variable.


private string _speed;
   private void box_speed_KeyUp(object sender, KeyEventArgs e)
        {
            _speed = box_speed.Text;
        }

        private void box_speed_GotMouseCapture(object sender, MouseEventArgs e)
        {
            slider_Factor.Value = 100;
            box_speed.Text = _speed;
        }

Siehe Tutorial: Control variable scope and logic using code blocks in C# - Learn
private Nachricht | Beiträge des Benutzers
NameInvalid
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

Danke für die schnelle Hilfe
Mit den Fachbegriffen hab ich es noch nicht so bzw. kenn ich mich mit den doch etwas komplexeren Methoden in C# noch nicht wirklich aus. Ich kenne bisher Methoden aus C/C++ (Arduinos) und ein wenig LUA und deswegen konnte ich mir unter dem void nie so wirklich was vorstellen bzw. habs halt auch nie anders gebraucht.
Das ich eigentlich nur "private string" brauch hatte ich auch schon rausgefunden, wusste aber noch nicht in welcher Ebene im Code das ganze rein muss, weil es immer nur Fehlermeldungen dazu gab, aber Danke dafür ich bin ja erst am Anfang mit C# und schau mir die Methoden, Klassen etc. gleich mal noch genauer an
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #avatar-3299.jpg


Dabei seit:
Beiträge: 3704
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden


Achte auch darauf dass es intuitiv bedienbar ist. Dass sich ein Wert ändert wenn man mit der Maus drauf klickt finde ich unüblich und nicht vorhersehbar. Ein Button mit "Alter Wert" oder so fände ich besser.

Grüße Bernd
Die kostenlose Unternehmenssoftware : Die Quasar-3 Community Version
Workshop : Datenbanken mit ADO.NET
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1768
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@BerndFfm
Ich würde eher erstmal empfehlen sich generell mit den Grundlagen zu befassen bevor man mit UI Entwicköung anfängt.
Gerade bei WPF geht das Code Behind basteln in die vollig falsche Richtung.
Deshalb eher erst einmal mit Konsolenanwendung die Grundlagen einarbeiten.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers