我很擅长使用C#而且我一直在开发一款小游戏来帮助我习惯这种语言。我希望玩家能够在整个游戏过程中输入一个仅用于字母的名称;但是,我遇到了几个试图让验证工作的问题。
以下是XAML代码:
<Window x:Class="COMP4_Project.InputWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="New Game" Height="120" Width="250" ResizeMode="CanMinimize">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label>Enter name:</Label>
<TextBox x:Name="userInput" Grid.Column="2" Margin="0,0,0,0"></TextBox>
<Button x:Name="Confirm" Click="Confirm_Click" Grid.Row="2" Width="80" Height="25" Content="Confirm" Margin="0,10,0,41" />
<Button x:Name="Cancel" Click="Cancel_Click" Grid.Row="2" Grid.Column="1" Width="80" Height="25" Content="Cancel" HorizontalAlignment="Right" Margin="54,10,0,41" />
</Grid>
这是我的代码隐藏:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
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.Shapes;
namespace COMP4_Project
{
/// <summary>
/// Interaction logic for InputWindow.xaml
/// </summary>
public partial class InputWindow : Window
{
public InputWindow()
{
InitializeComponent();
}
private void Confirm_Click(object sender, RoutedEventArgs e)
{
string playerName;
string userInput = "";
Regex r = new Regex("^[a-zA-Z]*$");
if (r.IsMatch(userInput))
{
MessageBox.Show("onlyletter");
playerName = userInput;
Window win = new GameWindow();
win.Owner = this;
win.ShowDialog();
}
else
{
MessageBox.Show("Only letters permitted. Try again!");
}
}
private void Cancel_Click(object sender, RoutedEventArgs e)
{
Close();
}
}
}
我尝试了几种让验证工作的方法;这和我到目前为止一样接近,没有破坏应用程序。它似乎接受任何输入,尽管使用验证,包括输入数字和输入根本没有输入任何东西(我尝试将正则表达式中的*更改为+来解决此问题,但是当我这样做时它不会接受< em>任何输入。)
我觉得这个问题与我为userInput声明变量的方式有关,但我不知道如何解决它而不会出现更多错误。
答案 0 :(得分:2)
您将userInput
定义为Click
事件中的空字符串。
private void Confirm_Click(object sender, RoutedEventArgs e)
{
string playerName;
string userInput = ""; // An empty string is a match for your pattern
Regex r = new Regex("^[a-zA-Z]*$");
if (r.IsMatch(userInput))
{
...
将userInput
设置为TextBox中输入其名称的值。
private void Confirm_Click(object sender, RoutedEventArgs e)
{
string playerName;
string userInput = userInput.Text;
Regex r = new Regex("^[a-zA-Z]*$");
if (r.IsMatch(userInput))
{
...
答案 1 :(得分:0)
你这样做:
string userInput = "";
而不是:
string user = userInput.Text;