2009-08-24 9 views
2

NumericUpDownは整数のみを扱っているようです。どうすれば修正できますか?(?)ので、倍精度をValueおよびIncrementとして使用できますか?WinForms:NumericUpDown(.NET CF 3.5)と実数

+0

これをコメントとして追加する:NumericUpDownはおそらく、Windowsの歴史の中で最も醜い、もっとも価値のない、最も価値のないコントロールである。 SIP(キーボードモード)で数字を入力するのは苦痛ですが、「Windows Mobileで数字を入力する最も良い方法は何ですか?」という質問をすれば、私が今までに遭遇した中で最も美しいC#コードを投稿します – MusiGenesis

+1

デスクトップの隣にあるスライドバーを使用して簡単にしました。 –

+0

@MusiGenesis:http://stackoverflow.com/questions/1324559/whats-the-best-way-to-enter-numbers-in-windows -mobile-net-cf-3-5/1324599#1324599;) –

答えて

0

DecimalPlacesというプロパティがあります。 0より大きい値に設定すると小数点以下を扱うことができます

+1

CFでは動作しません。 –

+0

CompactFrameworkに「DecimalPlaces」がないようです。 –

+0

おっと、申し訳ありませんが、downvoteを打ち消すために__CF__ –

2

NumericUpDownは小数点以下の型で動作しますが、コンパクトなフレームワーク上でのみ整数です。これはCF上のクラスの制限です。

しかし、CFの実装を提供するCodeProject UserControlがあります。

+0

回避策または無料の代替手段がありますか? –

+0

はい。私はちょうど私の答えにそれを加えた。 –

+0

ありがとうございます。見たことあります。そのテキストボックスは、2つの画像とタイマー(!!)で偽装されています。私はそれをテストし、50%の時間で入力を得ることはできません。クリックしても何も起こりません。 –

2

テキストボックスを使用して、OnKeyPressイベントをオーバーライドするだけです。このコードは過去に私のために働いていましたが、1234.56ではなく1234,56を書くグループにのみ適しています。

public partial class NumberTextBox : TextBox 
{ 
    public NumberTextBox() 
    { 
     InitializeComponent(); 
    } 

    public decimal Value 
    { 
     get 
     { 
      try 
      { 
       return decimal.Parse(Text); 
      } 
      catch (Exception) 
      { 
       return -1; 
      } 
     } 
    } 

    public int ValueInt 
    { 
     get { return int.Parse(Text); } 
    } 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar) 
      && !char.IsDigit(e.KeyChar) 
      && e.KeyChar != '.') 
     { 
      e.Handled = true; 
     } 

     // only allow one decimal point 
     if (e.KeyChar == '.' && (this).Text.IndexOf('.') > -1) 
     { 
      e.Handled = true; 
     } 
     base.OnKeyPress(e); 
    } 

    public void AppendString(string value) 
    { 
     if (string.IsNullOrEmpty(value)) 
     { 
      Text = string.Empty; 
     } 
     else 
     { 
      if (value == "." && Text.IndexOf('.') > -1) 
       return; 
      Text += value; 
     } 
    } 
} 
0

ここでのコードは、コンパクトフレームワークでテストされたブロックコードの1つです。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar == '.') 
     { 
      if (((TextBox)sender).Text.IndexOf('.') > -1) 
      { 
       e.Handled = true; 
      } 
      else if (((TextBox)sender).Text.Length == 0) 
      { 
       e.Handled = true; 
      } 
     } 
     else if (!char.IsDigit(e.KeyChar)) 
     { 
      e.Handled = true; 
     } 

     if (e.KeyChar == '\b') // backspace silme tuşunun çalıması için gerekli 
     { 
      e.Handled = false; 
     } 

     base.OnKeyPress(e); 
    } 

ところで、私はCompact Frameworkが嫌いです。それはあまりにも限られているので!しかし、私はしなければならない:(

関連する問題