2011-07-17 3 views
1

사용자에게 NumericUpDown 컨트롤을 표시하여 텍스처 크기를 지정할 수 있습니다. 이 텍스처는 두 가지 크기 (32, 64, 128 ...)의 힘을 갖는 것이 중요합니다.NumericUpDown 컨트롤이 2의 제곱 수를 허용하도록 강제

운이없는 ValueChanged 이벤트에서 위쪽 또는 아래쪽 버튼을 클릭하거나 화살표 키를 누를 때마다 컨트롤에이 2의 제곱만을 표시하도록했습니다. 또한 Increment 속성을 사용해 보았습니다. 내가 혼자서 만난 모든 솔루션은 너무 해킹되거나 잘못된 값을 보여주는 특별한 경우가 있습니다.

이 동작을 수행하는 쉬운 방법이 있습니까? (또는 적어도 너무 까다롭게는 안됩니까?)

미리 감사드립니다.

답변

2

UpDownBase 클래스를 상속해야합니다.

+0

UpDownBase를 살펴 보겠습니다. 프로젝트 전체에서 재사용 할 수있는 사용자 정의 컨트롤을 만드는 것은 멋지다. – Mario

+0

커스텀 PowerOfTwoUpDown을 효과적으로 만들었습니다. 많이 쉽다. UpButton(), DownButton() 및 UpdateEditText()를 재정 의하여해야합니다. 표준 NumericUpDown처럼 만들기 위해 맞춤 값, 최소값 및 최대 값도 지정했습니다. 그것은 좋아 보이고 내가 원했던 것을합니다! 감사! – Mario

1

2 개 이상의 숫자로 문제가 발생합니다. 32을 입력하고 입력 할 때 3이 표시되면 프로그램에서 내가 잘못되었다고 말합니다. 데이터 제출시 유효성을 검사하십시오.

+0

없는 그 왜냐하면 텍스트 상자 부분은 읽기 전용이기 때문입니다. 사용자는 위쪽/아래쪽 화살표 만 조작 할 수 있습니다. – Mario

-1

흠, 스스로 만들 수 있습니다. 텍스트 상자와 몇 개의 그림 상자를 사용하면 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

관련 문제