2017-11-13 8 views
0
private void numericUpDown1_ValueChanged_1(object sender, EventArgs e) 
    { 
     //my numeric up down var name is numrsa1// 
    } 

    static bool IsPrimeNumber(int value) 
    { 
     bool result = true; 

     for (int i = 2; i < value; i++) 
     { 
      if (value % i == 0) 
      { 
       result = false; 
       break; 
      } 
     } 

     if (value <= 1) 
      result = false; 

     return result; 
    }` 

数字上にのみ素数を表示する方法があるかどうかを知りたいと思います。私は大学のためのcrypthography仕事をしようとしていると私はユーザーのための素数オプションを与える必要があります。ここNumericUpDownコントロールに素数を表示するだけです

+1

こんにちは。質問をするにはこちらをお読みください。あなたはあなたが何をしたのか、何が欠けているのかを明記し、他の人があなたを助けることができるようにするべきですhttps://stackoverflow.com/help/how-to-ask –

+0

Ashkanどのタイプのロジックを使用する必要があるかわからないので、私は何もしませんでした。 –

+0

あなたは降順を意味するでしょうか? –

答えて

0

あなたはそれが数を検証し、そこに結果を印刷するために

private void numericUpDown2_ValueChanged(object sender, EventArgs e) 
{ 
    //suposing you have this code 
    int numrsa1 = (int)this.numericUpDown2.Value; 

    //or add the rest 8 lines to your code 
    if (IsPrimeNumber(numrsa1)) 
    { 
     numericUpDown2.Value = numrsa1; 
    } 
    else 
    { 
     numericUpDown2.UpButton(); 
    } 
} 

//the rest is your code without changes, I am using you function declaration IsPrimeNumber()だけの素数を表示します:)持っています。今のところ上昇し、コントロールの値を昇順に増加させることによって素数のみを表示します。

これは、あなたがNumericUpDownコントロールに類似しな機能を求めているので、私はできるだけ早く投稿する:)

0

を十分に速くテストすることができ、非常に簡単な解決策であるが、異なる行動で、その後、私はあなたが作成することをおすすめ新しいコントロールPrimeNumberUpDownNumericUpDownコントロールを拡張します。

ここでは、一緒にクイックバージョンです。私はそれがマウスまたは矢印キーを使用して上下に動作し、テキストボックスに数字を入力することをテストしました。重要なことが起こった場合は、それをもっと徹底的にテストしたいかもしれません。

このファイルを新しいファイルに貼り付け(名前空間を適宜更新する)、コンパイルすると、ツールボックスにPrimeNumberUpDownコントロールが表示され、他のWindowsフォームコントロールと同じように使用できます。

using System; 
using System.Globalization; 
using System.Windows.Forms; 

namespace YourNameSpace 
{ 
    public class PrimeNumberUpDown : NumericUpDown 
    { 
     private int _value; 

     public PrimeNumberUpDown() 
     { 
      // Make sure default value is prime 
      if (!IsPrime((int)Value)) 
       SetNextPrimeValue(); 
      _value = (int)Value; 
     } 

     public override void DownButton() 
     { 
      SetNextPrimeValue(); 
     } 

     public override void UpButton() 
     { 
      SetPreviousPrimeValue(); 
     } 

     private void SetNextPrimeValue() 
     { 
      int newValue = (int)Value; 
      while (newValue <= Maximum) 
      { 
       if (IsPrime(++newValue)) 
       { 
        if (newValue <= Maximum) 
        { 
         Value = newValue; 
         _value = newValue; 
        } 
        return; 
       } 
      } 
     } 

     private void SetPreviousPrimeValue() 
     { 
      int newValue = (int)Value; 
      while (newValue >= Minimum) 
      { 
       if (IsPrime(--newValue)) 
       { 
        if (newValue >= Minimum) 
        { 
         Value = newValue; 
         _value = newValue; 
        } 
        return; 
       } 
      } 
     } 

     protected override void ValidateEditText() 
     { 
      if (_value == 0) 
      { 
       base.ValidateEditText(); 
       return; 
      } 

      int newValue; 
      if (int.TryParse(Text, out newValue) && IsPrime(newValue) && newValue >= Minimum && newValue <= Maximum) 
      { 
       _value = newValue; 
       base.ValidateEditText(); 
      } 
      else 
      { 
       ChangingText = true; 
       Text = _value.ToString(CultureInfo.InvariantCulture); 
      } 
     } 

     private static bool IsPrime(int number) 
     { 
      if (number == 1) return false; 
      if (number == 2) return true; 
      if (number % 2 == 0) return false; 

      int boundary = (int)Math.Floor(Math.Sqrt(number)); 

      for (int i = 3; i <= boundary; i += 2) 
      { 
       if (number % i == 0) return false; 
      } 

      return true; 
     } 
    } 
} 
関連する問題