我在C#Windows窗体上有一个numericupdown控件,并且有兴趣在其值为< 10.(由用户输入一段时间的分钟值。)
我对C#中的覆盖/继承不是很熟悉,但看起来我可能不得不这样做。
看起来像EggheadCafe上的this post有我需要的答案。它是否像创建一个新类一样简单,然后创建一个新类的控件?
public class TestNum : NumericUpDown
{
protected override void ValidateEditText()
{
if (base.UserEdit)
{
base.ValidateEditText();
}
}
protected override void UpdateEditText()
{
Text = Convert.ToInt32(base.Value).ToString("00");
}
}
当我尝试这个时,我不知道如何创建利用这个类的新控件。我正在使用Visual Studio 2008.对于Windows窗体来说还是非常新的。谢谢你的任何建议。
修改
我能够通过编辑Designer创建的代码来完成这项工作,这样新的控件就不再是原始类的新控件了。所以在添加上面的类后,我做了以下(这些更改位于两个不同的位置,但我只显示重要的行):
更改:
this.numTest = new System.Windows.Forms.NumericUpDown();
private System.Windows.Forms.NumericUpDown numTest;
要:
this.numTest = new SampleForm.TestNum();
private TestNum numTest;
答案 0 :(得分:8)
为什么不使用DateTimePicker
控件?将其ShowNumericUpDown
属性设置为true并将其Format
属性设置为Custom,并将CustomFormat
属性设置为hh:mm:ss。
也许这对你有用。
答案 1 :(得分:2)
您需要在表单中使用这个新创建的类。它不会替换所有NumericUpDown控件,它是一个子类。
将包含此类的项目添加到工具箱(Tools-> Toolbox Items ... - 如果内存服务),您应该能够将控件拖到要使用它的表单上。
答案 2 :(得分:0)
通过寻找" NumericUpDown Display Hex with Leading Zero""
来偶然发现public class HexNumericUpDown : System.Windows.Forms.NumericUpDown
{
public HexNumericUpDown()
{
Hexadecimal = true;
}
protected override void ValidateEditText()
{
if (base.UserEdit)
{
base.ValidateEditText();
}
}
protected override void UpdateEditText()
{
Text = System.Convert.ToInt64(base.Value).ToString("X" + HexLength);
}
[System.ComponentModel.DefaultValue(4)]
public int HexLength
{
get { return m_nHexLength; }
set { m_nHexLength = value; }
}
public new System.Int64 Value
{
get { return System.Convert.ToInt64(base.Value); }
set { base.Value = System.Convert.ToDecimal(value); }
}
private int m_nHexLength = 4;
}
答案 3 :(得分:-5)
使用具有以下属性的日期时间选择器: