2013-02-11 2 views
1

Знаете ли вы, как ограничить ввод пользователя в текстовом поле, это текстовое поле принимает только целое число? Кстати, я разрабатываю для Windows 8. Я пробовал то, что искал из SO и из Google, но он не работает,Как принимать только целые числа в текстовом поле WPF

+0

Есть ли у вас посмотрел на метод char.IsNumeric ..? проверяя это при нажатии клавиши или событиях с нажатием клавиш.? – MethodMan

+0

yup У меня есть предупреждающее сообщение keychar не найдено – Dunkey

+0

лучше показать какой-то код .. потому что есть KeyEvents, который вы можете использовать для его получения ... если не возможно, вам нужно настроить маску в этом поле – MethodMan

ответ

4

Если вы не хотите, чтобы загрузить МОФ инструментарий (который имеет и контроль IntegerUpDown или MaskedTextBox). Вы можете реализовать его самостоятельно, как показано в этом article

Вот что вы положили бы в окне:

<Window x:Class="MaskedTextBoxInWPF.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Masked Text Box In WPF" Height="350" Width="525"> 
    <Grid> 
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="98,80,0,0" Name="textBlock1" Text="Enter Value:" VerticalAlignment="Top" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="184,80,0,0" Name="textBoxValue" PreviewTextInput="textBoxValue_PreviewTextInput" DataObject.Pasting="textBoxValue_Pasting" VerticalAlignment="Top" Width="120" /> 
    </Grid> 
</Window> 

А затем реализовать C# в вашем коде:

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

    private void textBoxValue_PreviewTextInput(object sender, TextCompositionEventArgs e) 
    { 
    e.Handled = !TextBoxTextAllowed(e.Text); 
    } 

    private void textBoxValue_Pasting(object sender, DataObjectPastingEventArgs e) 
    { 
    if (e.DataObject.GetDataPresent(typeof(String))) 
    { 
     String Text1 = (String)e.DataObject.GetData(typeof(String)); 
     if (!TextBoxTextAllowed(Text1)) e.CancelCommand(); 
    } 
    else 
    { 
     e.CancelCommand(); 
    } 
    } 

    private Boolean TextBoxTextAllowed(String Text2) 
    { 
     return Array.TrueForAll<Char>(Text2.ToCharArray(), 
      delegate(Char c) { return Char.IsDigit(c) || Char.IsControl(c); }); 
    } 
} 
+0

попробует это. Спасибо! – Dunkey

5
public class IntegerTextBox : TextBox 
{ 
    protected override void OnTextChanged(TextChangedEventArgs e) 
    { 
     base.OnTextChanged(e); 

     Text = new String(Text.Where(c => Char.IsDigit(c)).ToArray()); 
     this.SelectionStart = Text.Length; 
    } 
} 
Смежные вопросы