Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   nur Ziffern in textBox (https://www.delphipraxis.net/58329-nur-ziffern-textbox.html)

faux 5. Dez 2005 18:07


nur Ziffern in textBox
 
Hallo!

Ich bin einfach zu dumm dazu oder ich hab ein black-out.
Ich bringe es nicht zusammen, dass man in eine textBox nur Ziffern eintragen kann. :roll:

Danke.
Grüße
Faux

shmia 5. Dez 2005 18:22

Re: nur Ziffern in textBox
 
Delphi-Quellcode:
procedure MakeNumericControl(theControl: TWinControl);
begin
   Assert(Assigned(theControl));
   SetWindowLong(theControl.Handle, GWL_STYLE,
      GetWindowLong(theControl.Handle, GWL_STYLE) or ES_NUMBER);
end;

MakeNemericControl(Edit1);

faux 5. Dez 2005 19:09

Re: nur Ziffern in textBox
 
Hallo!

Danke für den Hinweis, aber leider habe ich .NET als Sprache angegeben.

Grüße
Faux

Khabarakh 5. Dez 2005 19:21

Re: nur Ziffern in textBox
 
Code:
      void TextBox1KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
      {
         e.Handled = !Char.IsDigit(e.KeyChar);
      }

faux 5. Dez 2005 22:13

Re: nur Ziffern in textBox
 
Hallo!

Ja, danke, so weit war ich auch schon. :P So funktioniert ja Backspace nichtmehr.

Grüße
Faux

NACHTRAG:
Kann man das nicht nach dem Listen-Prinzip machen?
Denn bei einem Feld will ich nur 0-9, J-N, P und R-Z zulassen.

Christian S. 6. Dez 2005 00:15

Re: nur Ziffern in textBox
 
Hallo!

Leider gibt es ja sowas wie Sets in C# nicht (kann man aber wohl "nachmachen", siehe Robert_G's Hinweis hier). Eine Lösung wären in diesem Fall reguläre Ausdrücke:
Code:
if (!(new Regex('[0-9\b]', RegexOptions.IgnoreCase).IsMatch(yourChar)) ...
In die RegExp kannsst Du natürlich auch Deine Buchstabenbereiche rein packen.

Grüße
Christian

Elvis 6. Dez 2005 02:47

Re: nur Ziffern in textBox
 
Hier ein minimalistischer, generischer Ansatz: (weiß ja nicht, ob du integer, double, ... nehmen willst ;) )
Code:
public class Int32TextBox : TypedTextBox<int> { }
public class DecimalTextBox : TypedTextBox<double> { }
public class DoubleTextBox : TypedTextBox<decimal> { }

public class TypedTextBox<T> : TextBox
   where T : IEquatable<T>
{
   T value;

   [Category("Appearance")]
   public T Value
   {
      get { return this.value; }
      set
      {
         if (!this.value.Equals(value))
         {
            this.value = value;
            base.Text = this.value.ToString();
         }
      }
   }

   [Browsable(false)]
   public override string Text
   {
      get { return base.Text; }
      set { base.Text = value; }
   }

   protected override void OnTextChanged(EventArgs e)
   {
      try
      {
         Value = (T)Convert.ChangeType(base.Text, typeof(T));
      }
      catch (Exception ex)
      {
         Undo();
         throw new InvalidCastException("bla bla", ex);
      }
   }

   public TypedTextBox()
   {
      base.Text = this.value.ToString();
   }
}
Ein vorkompilierte RegEx in Christians Stil könnte aber auch ganz nützlich sein.

faux 6. Dez 2005 06:44

Re: nur Ziffern in textBox
 
Zitat:

Zitat von Christian S.
Leider gibt es ja sowas wie Sets in C# nicht

Ja, das weiß ich. Deswegeh hab ich ja auch "Listen-Prinzip". ;)

Danke jedenfalls für die Hinweise und den Code, "Elvis". ;)
Werd's mal testen.

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz