C# GUI 构建 - KeyDown 事件触发但文本框文本未更新

问题描述 投票:0回答:0

我正在尝试使用 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>

c# wpf textbox
© www.soinside.com 2019 - 2024. All rights reserved.