【问题标题】:How can I limit the amount of number characters in WPF c#如何限制 WPF c# 中数字字符的数量
【发布时间】:2020-04-15 13:20:01
【问题描述】:

我实际上有两个问题,所以我先从第一个开始:我正在为我正在进行的项目做准备,看看我是否可以限制文本框字段中的字符范围。它必须都是数字,并且必须是八个字符。不多不少。有什么办法我可以做到这一点。因为当我使用 .length 行时它不喜欢它,并且我在运行时使用的代码不会显示错误消息。这是我的尝试:(GUI并不复杂。它有一个用于输入ID的文本框。两个文本块是结果和错误消息。有一个按钮说提交。)我的第二个问题是如何存储ID 并显示?

    public partial class MainWindow : Window
{
    int range;
    public MainWindow()
    {
        InitializeComponent();
    }

    private void sub_Click(object sender, RoutedEventArgs e)
    {
        range = int.Parse(Type.Text);

        while (range>0 || range < 8)
        {
            Error.Text = "ID must be eight characters long.";
        }
    }
}

【问题讨论】:

  • 您好,能否接受我的回答,谢谢。

标签: c# wpf visual-studio


【解决方案1】:

我为您的需要创建了一个简单的演示:

您可以在 UI 中使用 Validation 和 MaxLength 创建文本框:

<TextBox Name="txtMyLength"
             MaxLength="8"
             Width="200"
             Margin="140"
             HorizontalAlignment="Left"
             VerticalAlignment="Center"
             Text="{Binding validModel.MyLength, ValidatesOnDataErrors=True}" />

然后为错误提示设置TextBox的样式:

<Style TargetType="TextBox">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Border BorderThickness="1" BorderBrush="Red" VerticalAlignment="Top">
                            <Grid>
                                <AdornedElementPlaceholder x:Name="adorner" Margin="-1"/>
                            </Grid>
                        </Border>
                        <Border x:Name="errorBorder" Background="Red" Margin="8,0,0,0"
                            Opacity="0" CornerRadius="0"
                            IsHitTestVisible="False"
                            MinHeight="24" >
                            <TextBlock Text="{Binding ElementName=adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                                   Foreground="Black" Margin="8,3,8,3" TextWrapping="Wrap" VerticalAlignment="Center"/>
                        </Border>
                    </StackPanel>
                    <ControlTemplate.Triggers>
                        <DataTrigger Value="True">
                            <DataTrigger.Binding>
                                ......
                            </DataTrigger.Binding>
                            <DataTrigger.EnterActions>
                                <BeginStoryboard x:Name="in">
                                    <Storyboard>
                                      ......
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <StopStoryboard BeginStoryboardName="in"/>
                                <BeginStoryboard x:Name="out">
                                    .......
                                </BeginStoryboard>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

像这样在 ValidModel 中创建条件

public string this[string columnName]
        {
        get
        {
            int txtLength = 0;
            string result = string.Empty;
            if (MyLength != "" && MyLength != null)
            {
                txtLength = MyLength.ToString().Length;
                                }
            switch (columnName)
            {
                case "MyLength": if (txtLength != 8 ) result = "ID be 8 numbers"; break;
                case .......
            };
            return result;
        }

【讨论】:

    【解决方案2】:

    您可以为任何文本框选择最大长度属性:

    YourTextBox.MaxLength = 50;
    

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 2016-02-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2012-11-28
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多