C# WinForms numericUpDown control (removing the spin box)

后端 未结 2 863
慢半拍i
慢半拍i 2020-12-17 19:06

After a ton of googling, I couldn\'t come up with anything..

Is there any way to get a numericUpDown control that does not have the spin box?

I need a textbo

相关标签:
2条回答
  • 2020-12-17 19:43

    I settled for disabling the arrow buttons, as less ugly than trying to hide or remove them.

    Immediately after this boilerplate code:

    internal MainWin()
    {
        InitializeComponent();
    

    , add this:

        myNumericUpDown.Controls[0].Enabled = false;  // Disable the arrow buttons.
    

    Also: set InterceptArrowKeys to false in the control's properties, to prevent arrow keys (on the keyboard) from incrementing and decrementing myNumericUpDown.Value.

    Bad ways:

        myNumericUpDown.Controls[0].Hide();  // Hide the arrow buttons.
        // This leaves a gray patch that turns white after minimize-and-restore.
    

        myNumericUpDown.Controls.RemoveAt(0);  // Remove the arrow buttons.
        // This leaves a gray patch that turns white after minimize-and-restore.
    

    Half-bad way:

    Forget the above. Only set Increment to 0 in the control's properties. The arrow buttons still operate, and the arrow keys (on the keyboard) are still intercepted, but now they do nothing. Sadly, no-action buttons are probably less intuitive than disabled arrow buttons. (I'm surprised that it even accepts Increment = 0. A smart version of this control would neatly hide the arrow buttons when the increment is 0.)

    Other solution(s):

    A number-box can be implemented as a TextBox with extra code that restricts input to only numbers, and returns or announces a numeric value (decimal or your choice). (Searching finds many diverse, complex examples.) Pasted data comes in differently from keystrokes, so additional code is needed to handle pastes. (Upside: You can make the number-box smarter than the built-in NumericUpDown: NumericUpDown stupidly accepts and displays . until the user presses Enter or leaves the field, even if you specify DecimalPlaces = 0; and it accepts and displays multiple decimal points, which is nonsense.)

    An integer-box is simpler than a generalized number-box that accepts real numbers (optionally in floating-point notation) and returns a real-number type (float, double, or decimal).

    0 讨论(0)
  • 2020-12-17 19:47

    You can inherit from NumericUpDown. The trick is to hide control when the control is created.

    public class NumericUpDownWitoutButtons : NumericUpDown
    {
        public NumericUpDownWitoutButtons()
        {
            Controls[0].Visible = false;
        }
    
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.Clear(SystemColors.Window);
            base.OnPaint(e);
        }
    }
    

    If the place were buttons should be looks weird, override OnPaint too.

    Also, you probably don't need NumericUpDown. Would it be enough to validate that only digits can by typed in? C# Numbers Only Textbox

    0 讨论(0)
提交回复
热议问题