2010-10-30 30 views
0

是否可以獲取NumericUpDown控件的文本區域?我正在尋找它的大小,以便我可以用面板來掩蓋它。我不希望用戶能夠編輯和選擇文本。這可能嗎?或者還有另一種掩蓋文本框中文本的方式?c#WinForms可以獲取NumericUpDown文本區域

謝謝。

回答

3

您可以通過使用Label控件而不是烘焙的TextBox控件來獲取此信息。爲您的項目添加一個新類並粘貼下面顯示的代碼。編譯。將新控件從工具箱的頂部拖放到表單上。

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; 
    } 
} 
1

將ReadOnly屬性設置爲true,就是這樣。

+0

這將允許用戶高亮數字。我想要那個殘疾人。 – MarkP 2010-10-30 15:21:26

+0

然後,您應該考慮Tergiver告訴您什麼,您必須創建自定義控件,或者您知道可以創建UserControl並將NumericUpDown控件在文本框區域上放置一個標籤,並且每當NumericUpDownControl的ValueChanged觸發您更改標籤文本。 – 2010-10-30 15:29:25

3

如果您想要禁用手動編輯,您可以將ReadOnly屬性設置爲true

updown.ReadOnly = true; 

如果要禁止選擇太(我不知道爲什麼你需要這個),你可以使用反射。我不認爲有更好的辦法,因爲upDownEdit是內部字段UpDownBase

FieldInfo editProp = updown.GetType().GetField("upDownEdit", BindingFlags.Instance | BindingFlags.NonPublic); 
TextBox edit = (TextBox)editProp.GetValue(updown); 
edit.Enabled = false; 
0

'正確'的方法是創建一個Up-Down控件和一個Label(標籤不能被選中或編輯)。然而,Windows Forms的作者以他們的無限智慧已經決定我們不需要Up-Down控制,因此他們沒有爲它提供.NET包裝器。他們認爲我們想要一個Up-Down控件的唯一原因是與TextBox控件配對。如果你想要走這條路

上下控制是很簡單的創建一個輕包裝:http://msdn.microsoft.com/en-us/library/bb759880.aspx

編輯1

[剪斷]

編輯2

我在這裏博文:http://tergiver.wordpress.com/2010/11/05/using-the-up-down-control-in-windows-forms/

+0

我做了一些挖掘,發現我的想法不會氾濫。我還發現Windows.Forms確實包含一個'UpDownButtons'控件,它被Numeric/DomainUpDown使用。它不是系統Up-Down控制的包裝,它是一個「從零開始」的實現。它也是內部的,所以你不能使用它。我認爲漢斯的解決方案很好。效率低下(使用3個控件,其中只需要兩個控件),但實現起來非常簡單。在'NumericUpDown'後面建立一個UpDownLabel控件的'正確的'解決方案有一點涉及。 – Tergiver 2010-10-30 18:21:18

+0

更多信息(如果除我以外的任何人都感興趣):我們不能將系統Up-Down控件與具有內置遞增/遞減功能(UDS_SETBUDDYINT)的WinForms Label控件結合使用。原因是WinForm Label控件不是系統標籤控件的實例,而是它的另一個「從零開始」實現,它不響應由Up-Down控件使用的WM_SETTEXT消息。 – Tergiver 2010-10-30 20:25:03

相關問題