我正在尝试使用 Visual Studio 和 C# 构建 GUI 应用程序。我有一个带有文本框的登录页面,供用户输入他们的用户名(在网格内)。
<TextBox Name="textBox1" Grid.Column="2" Grid.Row="2" FontFamily="Arial" FontWeight="Bold" FontSize="24" Margin="5" GotKeyboardFocus="textBox1_GotFocus" KeyDown="textBox1_KeyDown"/>
这是我的 KeyDown 函数 - 我确实看到它在文本框聚焦并输入时触发,但文本框中没有显示任何内容
private void textBox1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
Key key = e.Key;
System.Windows.MessageBox.Show(key.ToString());
}
我无法在文本框中键入文本或在文本框中的任何文本上使用箭头键。但是,我可以输入空格键、退格键或删除我可以输入的任何空格,然后将文本粘贴到文本框中。
我尝试将 IsEnabled 设置为 True,将 ReadOnly 设置为 False,强制聚焦(并确认文本框正确获得焦点和键盘焦点)。我有 KeyDown 事件函数,该函数在文本框聚焦时被调用,并在消息框中正确显示我输入的键,但文本框文本仍然为空。
我完全迷路了。我什至复制了一个正在尝试使用工作文本框模拟/重新创建/更新的工作项目,但我的文本框不起作用。这让我觉得这可能与我的 VS 配置有关,或者与我的环境有关,而不是与文本框代码本身有关。
我在网上看到过类似的问题,但它们似乎都通过确保文本框 - 而不是其他元素 - 获得焦点来解决;我已经通过检查 GotFocus 和 GotKeyboardFocus 事件等确认了这一点
*** 编辑 *** 我还添加了一个 TextChanged() 事件处理程序。如果我粘贴文本,则会触发处理程序。如果我尝试键入,则不会触发此处理程序并且 TextBox 仍然不会更新。
<Window x:Class="DBInterfaceUI.DBLogin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DBInterfaceUI"
mc:Ignorable="d"
Title="LoginWindow" Height="220" Width="500" WindowStyle="None" ResizeMode="NoResize" Topmost="True" WindowStartupLocation="CenterScreen">
<Border BorderThickness="1" BorderBrush="Black">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="20"></RowDefinition>
</Grid.RowDefinitions>
<TextBox Grid.ColumnSpan="4" Background="#FF015A9C" Foreground="White" FontFamily="Arial" FontWeight="Bold"
FontSize="16" Text="Login Required" VerticalContentAlignment="Center" Padding="10,0" IsReadOnly="True" Focusable="False"/>
<Label Grid.Column="1" Grid.Row="2" FontFamily="Arial" FontWeight="Bold" FontSize="16" Content="User:"
VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Padding="10,0"/>
<TextBox Name="textBox1" Grid.Column="2" Grid.Row="2" FontFamily="Arial" FontWeight="Bold" FontSize="24" Margin="5"/>
<Label Grid.Column="1" Grid.Row="3" Content="Password:" FontFamily="Arial" FontWeight="Bold" FontSize="16"
VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Padding="10,0"/>
<PasswordBox Name="passBox" Grid.Column="2" Grid.Row="3" FontFamily="Arial" FontWeight="Bold" FontSize="24" Margin="5"/>
<Button Name="LogOn" Grid.Column="1" Grid.Row="5" Content="Login" Margin="5,0" Padding="0,5"
Click="LogOn_Click" FontFamily="Arial" FontWeight="Bold" FontSize="16"
Foreground="White" Background="#FF015A9C"/>
<Button Name="Cancel" Grid.Column="2" Grid.Row="5" Content="Cancel" Margin="5,0" Padding="0,5"
Click="Cancel_Click" FontFamily="Arial" FontWeight="Bold" FontSize="16"
Foreground="White" Background="#FF015A9C"/>
</Grid>
</Border>
</Window>