如何将文本输出到文本框?

时间:2019-07-02 10:51:53

标签: c# wpf

我正在编写palindrom WPF程序,该程序将测试单词是否是回文。 所以我希望用户键入他想要的任何内容。

我在stackoverflow上看到有人遇到类似的问题,他使用了

OutputText.Text = (word + Environment.NewLine);

但这对我没有帮助。

private void InputText_TextChanged(object sender, TextChangedEventArgs e)
{
    while (true)
    {
        string s = Console.ReadLine();
        InputText.Text += s.ToString();
    }
}

private void OutputText_TextChanged(object sender, TextChangedEventArgs e)
{
    while (true)
    {
        foreach (var word in InputText.Text.ToString())
        {
            OutputText.Text = word.ToString();
        }
    }
}

我应该能够输入我想要的任何东西,如果它是回文,则可以输出该词。我知道我需要一个方法,但现在我需要与输出完全相同的输入。

例如

输入:我有雷达

输出:我有雷达

2 个答案:

答案 0 :(得分:1)

考虑到您正在使用WPF,还应该考虑使用MVVM。 这是一个编程范例,它封装了来自后面代码的视图。本质上,视图(您所看到的)不知道数据的来源。

这就是WPF的data bindings的作用。

假设您有两个文本框,其中一个的代码应填充另一个。

有两个文本框。

<TextBox Text="{Binding MyFirstTextBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DataContext="{DynamicResource MyVM}" />
<TextBox Text="{Binding MySecondTextBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DataContext="{DynamicResource MyVM}" />

在窗口资源中,您已经定义了一个对象,它是您的视图模型:

<Window.Resources >
    <vm:MyViewModel x:Key="MyVM" />
</Window.Resources>

您的视图模型可能看起来像这样:

public class MyViewModel: INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propName) { 
        PropertyChanged?.Invoke(this, new OnPropertyChangedEventArgs(propName)); 
    }

    private string textBox1Text;

    public string MyFirstTextBox {
        get => textBox1Text;
        set {
            textBox1Text = value;
            OnPropertyChanged(nameof(MyFirstTextBox));
            MySecondTextBox = value; // Set value of second text box
        }
    }

    private string textBox2Text;

    public string MySecondTextBox {
        get => textBox2Text;
        set {
            textBox2Text = value;
            OnPropertyChanged(nameof(MySecondTextBox));
        }
    }

}

现在您将拥有一个非常基本的MVVM实现,这将进一步帮助您。

如果您对使用MVVM不感兴趣,则可以继续使用事件。

在您的代码背后:

private void InputText_TextChanged(object sender, EventArgs e) => OutputText.Text = (sender as TextBox).Text;

private void OutputText_TextChanged(object sender, EventArgs e) => Debug.WriteLine("Whoo! My text changed to {0}", (sender as TextBox).Text);

编辑:将最后一段代码添加到代码标签中。 还要编辑:对不起,如果我在代码中输入了错误,这在午休时间就浮现在脑海。

答案 1 :(得分:0)

为什么无限循环while (true) {...})和Consoles?像这样:

//TODO: your routine which tests for palindrome
private static bool IsPalindrome(string value) 
{
    ...
}

private void InputText_TextChanged(object sender, TextChangedEventArgs e)
{
    // This event handler runs when user changes text in InputText
    // i.e. input anything into InputText 
    // We should:

    // 1. Obtain user input
    string word = InputText.Text;

    // 2. Check for being palindrome
    bool isPalindrome = IsPalindrome(word); 

    // 3. Output results into OutputText
    OutputText.Text = word + (isPalindrome ? " is a palindrome" : " is NOT a palindrome");
}

请注意,我们不需要任何OutputText_TextChanged(如果OutputText Text被更改了怎么办?)