我正在编写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();
}
}
}
我应该能够输入我想要的任何东西,如果它是回文,则可以输出该词。我知道我需要一个方法,但现在我需要与输出完全相同的输入。
例如
输入:我有雷达
输出:我有雷达
答案 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
被更改了怎么办?)