String über Dialog zurückgeben



  • Hallo,

    ich arbeite mich gerade in c# ein, und habe hier ein Problem:
    Ich habe ein Eingabedialog erzeugt. Hier kann ich einen String eingeben der bei der OK-Taste zurückgeliefert werden soll.
    Im Kontruktor übergebe ich eine Referenz auf einen String.
    Die Frage ist nun, wie speichere ich diese Referenz in einer Variable, damit ich den String bei der Methode txtFilter_KeyDown verändern kann?

    Vielen Dank für die Antworten!

    public partial class Schnellsuche : Window
        {
            KeyEventArgs e;
            String ReturnString; //Hier mache ich was falsch
            String test;
    
            //Konstruktor----------------------------------------------------
            public Schnellsuche(KeyEventArgs _e, //Der vorgegebene Key
                                ref String _ReturnString) //Return String
            {
                e = _e;
                _ReturnString = "";
    
                ReturnString = _ReturnString; //Referenz merken      //Hier mache ich was falsch
    
                WindowStartupLocation = WindowStartupLocation.CenterOwner;
    
                InitializeComponent();
    
                txtFilter.Text = e.Key.ToString(); //Key welches der User getippt hat, in das Textfeld eintragen
                txtFilter.SelectionStart = 1; //Cursorpos verschieben
                txtFilter.Focus(); //Textbox focusieren
            }
    
            //User drückt taste-------------------------------------------------
            private void txtFilter_KeyDown(object sender, KeyEventArgs e)
            {
                //Bei Return den Text zurückgeben
                if (e.Key == Key.Return)
                {
                  ReturnString=txtFilter.Text;
                  Close(); //Dialog schliessen
                }
    
                //Bei ESC einen leeren String zurückgeben
                if (e.Key == Key.Escape)
                {
                    ReturnString="";//nichts zurückgeben
                    Close(); //Dialog schliessen
                }
    
            }
        }
    


  • Falsche Herangehensweise.

    Richtig ist eher das man den Dialog ein String gibt und bei erfolgreicher Beendigung (DialogResult) sich den neuen String holt.

    private void Bla()
    {
        var dialog = new Schnellsuche();
        dialog.Value = _myString;
        if (dialog.ShowDialog() == true)
            _myString = dialog.Value:
    }
    

    PS.
    Bei ENTER:
    DialogResult = true;
    Bei ESC:
    DialogResult = false;

    dann brauchst du im Code nicht den String auf Inhalt prüfen sondern benutzt ihn einfach wenn der Dialog mit true geschlossen wurde.



  • Hallo CSL,

    ja so könnte ich es machen.

    Ist es in c# nicht möglich, eine Referenz auf einen String in einer Variablen zu speichern, damit man in einer anderen Methode den ursprünglichen String verändern kann?



  • Das geht schon, wenn du eine Klasse hast die du Speicherst und dessen Property veränderst.
    Du machst aber eine Zuweisung auf dem Objekt selber, dadurch setzt du die Referenz neu.

    public class Item
    {
        public string Val;
    }
    
    var item = new Item();
    var newItem = item;
    newItem.Val = "demo"
    // "item" ist nun verändert.
    
    newItem = new Item();
    // "newItem" ist jetzt ein neues objekt, "item" bleibt unverändert.
    

    ReturnString = _ReturnString; //Referenz merken
    // OK

    ReturnString=txtFilter.Text;
    // ReturnString ist nun eine Referenz auf txtFilter.Text, _ReturnString bleibt unangetastet.


Anmelden zum Antworten