Autor Beitrag
sepp_a_u
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: So 30.12.07 14:43 
hi @ll

mache mir gerade einen kl. zinsrechner. der läuft jetzt auch einwandfrei. man kann nur noch zahlen eingeben und die eingabe von buchstaben ist unmöglich. jedoch bräuchte ich jetzt noch den befehl dazu, dass auch das "," und der "." zulässig sind für die eingabe. wie mache ich das?
folgenden code habe ich bisher verwendet, dass man nur noch zahlen eingeben kann in den 3 txtboxen (startkap, laufzeit in jahre, zinssatz):

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
private void txtStartkap_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                {
                    e.Handled = true;
                }
            }

            private void txtLaufzeit_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                {
                    e.Handled = true;
                }
            }

            private void txtZins_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                {
                    e.Handled = true;
                }
            }


damit jetzt komma und pkt zulässig sind, gibt es doch bestimmt auch einen solchen befehl. oder nicht? wäre nice, wenn mirwer helfen könnte

mfg
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 30.12.07 15:14 
user profile iconsepp_a_u hat folgendes geschrieben:

damit jetzt komma und pkt zulässig sind, gibt es doch bestimmt auch einen solchen befehl. oder nicht? wäre nice, wenn mirwer helfen könnte

Unmittelbar gibt es keine passenden Abfragen, weil die Char.IsXXX-Methoden Gruppen von Unicode-Zeichen prüfen. Du kannst diese Zeichen aber direkt kontrollieren, wie es im Beispiel zur KeyPressEventArgs.KeyChar-Eigenschaft vorgemacht wird:
ausblenden C#-Quelltext
1:
2:
3:
4:
if (e.KeyChar != (char)Keys.Decimal && e.KeyChar != (char)Keys.Separator)
{
    e.Handled = true;
}

Ob Keys.Separator richtig ist, musst Du ausprobieren; sonst suche Dir etwas anderes aus der Keys-Enumeration aus. Jürgen
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: So 30.12.07 15:33 
hmm danke erstmal. aber der code funktioniert bei mir gar nicht. hab auch andere events außer dem separator ausprobiert. wenn ich den code dann einfüge, dann kann man gar nichts mehr in die txtfelder eingeben.

mfg
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 30.12.07 17:19 
Auf die Idee mit der Keys-Enumeration wäre ich gar nicht gekommen, aber ein simpler Cast nach Char wird wohl nur Unfug ergeben. Wenn, dann über KeyDown/Up, dort gibt es nämlich mit e.KeyCode eine Keys-Eigenschaft.
Ansonsten eben über CultureInfo.CurrentCulture.NumberFormat.
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: So 30.12.07 19:14 
hmm das sagt mir leider gar nichts :(
hast du dafür vll einen kommentierten bspcode oder?
wäre nice, damit ich wenigstens weiß, was du mir überhaupt sagen willlst :(

mfg
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 30.12.07 19:27 
Mit Keys wird es doch nichts, bleib bei der Betrachtung von Chars. Und um Globalization würde ich mir auch keine Sorgen machen - prüfe einfach, ob KeyChar weder '.' noch ',' ist.

PS: Du musst den gleichen Code doch nicht dreimal schreiben. Verknüpfe die drei Events mit einer einzigen Methode über die Dropdownbox im Form-Designer.
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: So 30.12.07 20:36 
user profile iconKhabarakh hat folgendes geschrieben:
Mit Keys wird es doch nichts, bleib bei der Betrachtung von Chars. Und um Globalization würde ich mir auch keine Sorgen machen - prüfe einfach, ob KeyChar weder '.' noch ',' ist.

PS: Du musst den gleichen Code doch nicht dreimal schreiben. Verknüpfe die drei Events mit einer einzigen Methode über die Dropdownbox im Form-Designer.


hmm leider habe ich keien ahnung wie ich das mit der verknüpfung realisieren soll/muss, genauso wenig, wie ich das mit keychar machen muss mit dem pkt und komma. bin ja leider noch ein extremer anfänger :( wäre nice, wenn du mir da mal ein codebsp machen könntest

mfg
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Fr 04.01.08 19:33 
hmm kann mir keiner helfen? ;(

mfg
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 04.01.08 19:36 
Wie hast Du denn versucht, die hier gegebenen Tipps umzusetzen? Zeig doch mal, wo Du bei der Umsetzung der Tipps nicht weiter kommst.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: So 06.01.08 14:44 
so habs jetzt endlch herausgefunden, wie ich es machen kann:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private void txtStartkap_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
          {
              if (!(e.KeyChar == '.' || e.KeyChar == ','))
              {

                  if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                  {
                      e.Handled = true;
                  }
              }
          }


was hält ihr von dem code? ist der sinnvoll oder eher nicht?

MfG
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 06.01.08 15:02 
Warum fragst Du eigentlich, ob ein Zeichen ein Steuerzeichen ist?

Was hältst Du von einer einzigen Abfrage:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void txtStartkap_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if ( !(e.KeyChar == '.' || e.KeyChar == ',') && !Char.IsDigit(e.KeyChar) )
       e.Handled = true;
}

Noch besser könnte die Positiv-Abfrage sein, denn Dich interessieren doch nur Ziffern, Komma und Punkt:
ausblenden C#-Quelltext
1:
2:
    if ( ! (e.KeyChar == '.' || e.KeyChar == ',' || Char.IsDigit(e.KeyChar)) ) 
       e.Handled = true;

Gruß Jürgen