Blackhawk50000
Erfahrenes Mitglied
Hallo,
Ich habe ein UserControl erstellt welches eigentlich eine Normale Textbox sein soll, die aber ausschließlich Zahlen als Eingabe zulässt.
Da ich dies im Projekt sehr oft brauche habe ich ein Control bauen wollen. Aber irgendwie funktioniert das nicht so wie es soll. Neben kleiner anderer Probleme wie dem Anpassen der Größe der Textbox habe ich ein einscheidendes Problem beim Validieren.
Hier erstmal mein C# Code zur Textbox:
Hauptaugenmerk liegt hier auf der Texteigenschaft.
Der Dazugehörige XAMLCode sieht so aus:
Nun habe ich folgendes mit diesem Teil vor.
Ich will das ganz normal wie eine normale Textbox validieren können. Also mit "INotifyPropertyChanged"
Datzu mache ich ja bei einer Normalen Textbox folgendes:
Da funktioniert das auch Wunderbar.
Aber wenn ich das gleiche mit meiner NumTextBox mache, geht leider garnichts, bzw wird der Eingegebene text nicht erkannt oder was auch immer.
Leider haben bisher 3 Stunden www.gidf.de nicht viel gebracht außer kleinere Anhaltspunkte die leider nicht wirklich weiter geführt haben da niemand damit am ende Validieren wollte
Ich habe ein UserControl erstellt welches eigentlich eine Normale Textbox sein soll, die aber ausschließlich Zahlen als Eingabe zulässt.
Da ich dies im Projekt sehr oft brauche habe ich ein Control bauen wollen. Aber irgendwie funktioniert das nicht so wie es soll. Neben kleiner anderer Probleme wie dem Anpassen der Größe der Textbox habe ich ein einscheidendes Problem beim Validieren.
Hier erstmal mein C# Code zur Textbox:
Hauptaugenmerk liegt hier auf der Texteigenschaft.
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace Conplan_Silverlight_Controls
{
public partial class NumTextBox : UserControl
{
#region Klassenvariablen
/// <summary>
/// Flag, ob Kommazahlen erfasst werden dürfen
/// </summary>
private bool _mitKommaEingabe = true;
#endregion
#region Konstruktor
public NumTextBox()
{
InitializeComponent();
}
#endregion
#region Eigenschaften
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("TextProperty", typeof(string), typeof(NumTextBox), null);
public string Text
{
get { return (string)GetValue(NumTextBox.TextProperty); }
set { SetValue(NumTextBox.TextProperty, value); }
}
/// <summary>
/// setzen der Maximalen Eingabelänge
/// </summary>
public int MaxLength
{
get { return txtBox.MaxLength; }
set { txtBox.MaxLength = value; }
}
/// <summary>
/// TextAlignment setzen
/// </summary>
public TextAlignment TextAlignment
{
get { return txtBox.TextAlignment; }
set { txtBox.TextAlignment = value; }
}
/// <summary>
/// Flag, ob auch Gleitkommazahlen eingegeben werden können
/// </summary>
public bool MitKommaEingabe
{
get { return _mitKommaEingabe; }
set { _mitKommaEingabe = value; }
}
#endregion
#region Eventlistener
/// <summary>
/// Funktion wird nach dem Laden des Controls aufgerufen
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Page_Loaded(object sender, RoutedEventArgs e)
{
txtBox.Width = NumTextBoxCtrl.Width;
txtBox.Height = NumTextBoxCtrl.Height;
}
/// <summary>
/// Fängt nichtnumerische Eingaben ab
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtBoxKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
switch (e.Key)
{
case Key.Tab:
return;
case Key.D0:
break;
case Key.D1:
break;
case Key.D2:
break;
case Key.D3:
break;
case Key.D4:
break;
case Key.D5:
break;
case Key.D6:
break;
case Key.D7:
break;
case Key.D8:
break;
case Key.D9:
break;
case Key.NumPad0:
break;
case Key.NumPad1:
break;
case Key.NumPad2:
break;
case Key.NumPad3:
break;
case Key.NumPad4:
break;
case Key.NumPad5:
break;
case Key.NumPad6:
break;
case Key.NumPad7:
break;
case Key.NumPad8:
break;
case Key.NumPad9:
break;
case Key.Decimal:
break;
default:
if (e.PlatformKeyCode == 188 || e.PlatformKeyCode == 110 || e.PlatformKeyCode==43)
{
// Zeichen "," oder "," auf dem Numpad oder "," auf dem Mac
if (txtBox.Text.IndexOf(",") > -1)
{
// nicht mehr wie ein Komma eingebbar machen
e.Handled = true;
return;
}
}
else
{
e.Handled = true;
return;
}
break;
}
}
/// <summary>
/// Wird beim Ändern der Größe aufgerufen
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LayoutRoot_SizeChanged(object sender, SizeChangedEventArgs e)
{
txtBox.Width = NumTextBoxCtrl.Width;
txtBox.Height = NumTextBoxCtrl.Height;
}
#endregion
}
}
Der Dazugehörige XAMLCode sieht so aus:
HTML:
<UserControl x:Class="Conplan_Silverlight_Controls.NumTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="42" d:DesignWidth="90"
Loaded="Page_Loaded" Name="NumTextBoxCtrl" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox Height="23" HorizontalAlignment="Left" x:Name="txtBox" VerticalAlignment="Top" Width="64" KeyDown="txtBoxKeyDown" />
</UserControl>
Nun habe ich folgendes mit diesem Teil vor.
Ich will das ganz normal wie eine normale Textbox validieren können. Also mit "INotifyPropertyChanged"
Datzu mache ich ja bei einer Normalen Textbox folgendes:
HTML:
<TextBox x:Name="tb_Name" Text="{Binding NeuerName, Mode=TwoWay, NotifyOnValidationError=True, UpdateSourceTrigger=Default, ValidatesOnExceptions=True}" Margin="142,28,0,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="150" d:LayoutOverrides="HorizontalAlignment" MaxLength="49"/>
Aber wenn ich das gleiche mit meiner NumTextBox mache, geht leider garnichts, bzw wird der Eingegebene text nicht erkannt oder was auch immer.
Leider haben bisher 3 Stunden www.gidf.de nicht viel gebracht außer kleinere Anhaltspunkte die leider nicht wirklich weiter geführt haben da niemand damit am ende Validieren wollte