2011-08-05 7 views
0

私が望むのは、Visual StudioのWinFormデザイナーで起こるVS2010のやり方と多少似ています。私がボタンを置いてそれを選択し、矢印キーを使用すると、右のキーを押すことによってどの方向に5ピクセル移動します。さて、私はShiftキーまたはCtrlキーを押したままにしておくと、そのボタンは一度に1ピクセルだけ移動します。Shift/Ctrl/etcのいずれかに応じてWinForm NumericUpDownコントロールの変数インクリメントステップ。

これは、C#WinFormアプリケーションのNumericUpDownコントロールで発生します。デフォルトのインクリメントが100.0で、インクリメントが小さいと10.0としましょう。さらに小さなインクリメント(可能な場合)は1.0にすることができます。どのように私はそれを行うことができますかについてのヒント?

私はこれを別の質問として尋ねる必要はありません。私は、インクリメントを現在の入力値に依存させるというアイデアを思いついています。言っておきますが、私は1〜1,000億ドルのどこかに1ドルの金額を入力することができます。次に、デフォルト値、小数値、および小数値の増分値を入力値に依存させたいとします。私は自分自身の正確な数式を把握することができます。

答えて

3

がNumericUpDownをから独自のクラスを派生し、UpButtonを(上書き)とDownButton()メソッド:

using System; 
using System.Windows.Forms; 

public class MyUpDown : NumericUpDown { 
    public override void UpButton() { 
     decimal inc = this.Increment; 
     if ((Control.ModifierKeys & Keys.Control) == Keys.Control) this.Increment *= 10; 
     base.UpButton(); 
     this.Increment = inc; 
    } 
    // TODO: DownButton 
} 

他のキーに異なる効果を与えるために、必要に応じて微調整。

2

これはちょっと粗いですが、それは他の答えより少し簡単です(それ以上には良いとは言えません)。質問の2番目の部分では、100/10/1を現在の値に基づいて計算する必要があります。

100(または何でも)に、デフォルトのincrememntを設定し、NumericUpDown(nUpDown)のKeyDownイベントイベントで

private void nUpDown_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.Up) 
     nUpDown.Value += 10; 

    else if (e.Control && e.KeyCode == Keys.Down) 
     nUpDown.Value -= 10; 

    else if (e.Shift && e.KeyCode == Keys.Up) 
     nUpDown.Value += 1; 

    else if (e.Shift && e.KeyCode == Keys.Down) 
     nUpDown.Value -= 1; 
} 
+0

おかげで、_KeyUp' 'より好ましい' _KeyDown'のですか? –

+1

キーが押されるとキーダウンが繰り返されますが、キーアップはリリースされたときにのみ起動します – tom502

関連する問題