2011-07-17 75 views
1

權力我呈現給用戶一個NumericUpDown控件,所以他可以指定紋理的大小。這種紋理具有兩種尺寸的力量(32,64,128 ...)很重要。強制NumericUpDown控件只接受兩個

我試圖迫使控制提出兩個只有這個權力,只要你單擊向上或向下按鈕(或按箭頭鍵),在事件沒有的ValueChanged運氣。我也嘗試過使用Increment屬性。我自己遇到的所有解決方案要麼太冒險,要麼有特殊情況,顯示無效值。

有沒有一種簡單的方法(或至少不太靠譜)來實現這一行爲呢?

在此先感謝。

回答

2

你應該繼承UpDownBase類。

+0

我會看UpDownBase。製作一個可以在整個項目中重複使用的自定義控件可能很酷。 – Mario

+0

我做了一個自定義的PowerOfTwoUpDown效果很好。這很容易。您只需要重寫UpButton(),DownButton()和UpdateEditText()。爲了使它像標準的NumericUpDown一樣,我也做了一個自定義的Value,Minimum和Maximum。它看起來不錯,做我想要的!謝謝! – Mario

1

你要在2+位數遇到了問題。如果我想要輸入32,並且在輸入時看到3,那麼您的程序只會告訴我我錯了。在提交數據時進行驗證。

+0

這不是一個問題,因爲文本框部分是隻讀的。用戶只能使用上/下箭頭進行交互。 – Mario

-1

嗯,好了,你可以自己製作。 使用文本框和幾個圖片框,您可以設置一個僅設置兩個冪的窗體。

+0

不,不這樣做。做[這](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

相關問題