c# WinForms can you get the NumericUpDown text area

后端 未结 4 1348
半阙折子戏
半阙折子戏 2021-01-16 16:09

Is it possible to get the text area of a NumericUpDown control? I\'m looking to get it\'s size so that I can mask it with a panel. I don\'t want the user to be able to edit

相关标签:
4条回答
  • 2021-01-16 17:06

    Set the ReadOnly property to true, that's all.

    0 讨论(0)
  • 2021-01-16 17:11

    You can get this by using a Label control instead of the baked-in TextBox control. Add a new class to your project and paste the code shown below. Compile. Drop the new control from the top of the toolbox onto your form.

    using System;
    using System.Windows.Forms;
    
    class UpDownLabel : NumericUpDown {
        private Label mLabel;
        private TextBox mBox;
    
        public UpDownLabel() {
            mBox = this.Controls[1] as TextBox;
            mBox.Enabled = false;
            mLabel = new Label();
            mLabel.Location = mBox.Location;
            mLabel.Size = mBox.Size;
            this.Controls.Add(mLabel);
            mLabel.BringToFront();
        }
    
        protected override void UpdateEditText() {
            base.UpdateEditText();
            if (mLabel != null) mLabel.Text = mBox.Text;
        }
    }
    
    0 讨论(0)
  • 2021-01-16 17:12

    The 'proper' way to do this is to create an Up-Down control and a Label (the label can't be selected or edited). However, the authors of Windows Forms, in their infinite wisdom, have decided that we don't need the Up-Down control and so they didn't provide a .NET wrapper for one. They decided that the only reason we could ever want an Up-Down control is when paired with a TextBox control.

    The Up-Down control is simple enough to create a light wrapper if you want to go this route: http://msdn.microsoft.com/en-us/library/bb759880.aspx

    Edit 1

    [snip]

    Edit 2

    I blogged about it here: http://tergiver.wordpress.com/2010/11/05/using-the-up-down-control-in-windows-forms/

    0 讨论(0)
  • 2021-01-16 17:15

    If you want do disallow manual editing, you can just set ReadOnly property to true.

    updown.ReadOnly = true;
    

    If you want to disallow selecting too (I wonder why you need this), you can use reflection. I don't think there's better way, because the field upDownEdit is internal field of UpDownBase.

    FieldInfo editProp = updown.GetType().GetField("upDownEdit", BindingFlags.Instance | BindingFlags.NonPublic);
    TextBox edit = (TextBox)editProp.GetValue(updown);
    edit.Enabled = false;
    
    0 讨论(0)
提交回复
热议问题