2011-07-17 14 views
1

テクスチャのサイズを指定できるようにNumericUpDownコントロールを提示します。このテクスチャは2つのサイズ(32,64,128 ...)のパワーを持つことが重要です。NumericUpDownコントロールで2の累乗しか受け付けないようにする

ValueChangedイベントでUpまたはDownボタンをクリックする(または矢印キーを押す)たびに、この2の累乗を表示するように強制しました。また、Incrementプロパティを使ってみました。私が遭遇したすべての解決策は、あまりにもハッキリです。または、無効な値を示す特殊なケースがあります。

この動作を実現するには簡単な方法はありますか(または少なくともあまりにも厄介ではないですか)。

ありがとうございます。

答えて

2

UpDownBaseクラスを継承する必要があります。

+0

UpDownBaseを見ていきます。プロジェクト全体で再利用できるカスタムコントロールを作成するのはクールかもしれません。 – Mario

+0

私はカスタムPowerOfTwoUpDownを効果的に作りました。これはとても簡単だ。 UpButton()、DownButton()およびUpdateEditText()をオーバーライドするだけでよい。これを標準NumericUpDownのようにするために、カスタムValue、Minimum、およびMaximumも作成しました。それはよさそうだと私が望んだことをやって!ありがとう! – Mario

1

2桁の数字で問題が発生します。 32を入力して、入力中に3が表示されたら、あなたのプログラムは私に間違っていると言います。データを送信する際に検証します。

+0

テキストボックス部分は読み取り専用です。ユーザは上矢印または下矢印だけを操作できます。 – Mario

-1

うーん、あなた自身で作ることもできます。 テキストボックスと2つのピクチャボックスを使用すると、2の累乗だけを設定するフォームを設定できます。

+0

いいえ、しないでください。 [this](http://stackoverflow.com/questions/6721742/forcing-a-numericupdown-control-to-only-accept-powers-of-two/6721761#6721761)。 –

0

私の提案はComboBoxを使用することで、あなたの数字がドロップダウン、あなたは完全に自動をサポートすると同時に、ユーザー入力の検証をエスケープしています、のようなコード:問題ではありません

//generate your array. 
List<string> twos = new List<string>(); 

int item = 2; 
int max = int.MaxValue/2; 
while ((item = 2 * item) < max) 
{ 
    twos.Add(item.ToString()); 
} 

ComboBox comboBox1 = new ComboBox(); 

comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; 
comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; 
comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
comboBox1.FormattingEnabled = true; 

//comboBox1.Items.Clear(); 
comboBox1.Items.AddRange(twos.ToArray()); 
comboBox1.AutoCompleteCustomSource.AddRange(twos.ToArray()); 

this.Controls.Add(comboBox1); 
+0

それは私がプランBとして持っているオプションですが、私はNumericUpDownの代わりを好むでしょう。それは愚かかもしれないが、私はそれがよりエレガントなオプションのようだと思う。とにかくありがとう! – Mario

関連する問題