2012-11-26 40 views
1

我嘗試創建一個可空的DateTimePicker可任選表明,當控件被標記爲具有空日期一些提示文本。要做到這一點,我已經從繼承的DateTimePicker並添加提示文本的Label控件覆蓋文本部分時控件被標記爲具有空日期..問題是,如果DateTimePicker設置爲顯示通常的日曆圖標,此按鈕的寬度是VARIABLE ..的DateTimePicker日曆按鈕寬度

下面的圖像顯示相同的DateTimePicker控件具有不同的大小..只要日曆圖標按鈕開始重疊文本,它就會更改爲更小,簡單的下拉圖標按鈕..

enter image description here enter image description here enter image description here enter image description here

我可以嘗試使用反射來讀/不知所措要什麼給讀寫私有字段,但即時通訊..

我的問題..我如何找出的寬度DateTimePicker控件中正確顯示日曆圖標。

回答

0

我發現了一種自己.. =)..在DateTimePicker顯示壓延圖標按鈕時該控件比顯示的文本更寬。當按鈕開始剪切文本時,控件自動回退到顯示更小的下拉按鈕(visi圖像在原來的問題在第二排BLE)..所以我們找出文本的寬度,壓延圖標按鈕,下拉按鈕,控制本身..後面的數學很簡單..

const int C_BUTTONICON_WIDTH = 34; 
const int C_BUTTONARROW_WIDTH = 17; 

protected int GetLabelWidth() 
{ 
    int iControlW = this.Width; 
    int iTextW = TextRenderer.MeasureString(this.Text, this.Font).Width; 

    int iLabelW = 0; 
    if (iTextW <= iControlW - C_BUTTONICON_WIDTH) 
    { 
     iLabelW = iControlW - C_BUTTONICON_WIDTH; 
    } 
    else 
    { 
     iLabelW = iControlW - C_BUTTONARROW_WIDTH; 
    } 
    return iLabelW; 
} 

你可能需要根據自身Label的位置來調整幾個像素.. =)..擔任我的目的.. =)

+0

你可以接受你自己的答案,讓其他成員知道你找到了解決問題的辦法。 – Neolisk

+0

道歉..我試過,但它說我不能接受我自己的答案几天..今天剛剛上線.. =) – AweSIM

0

無需重新發明輪子。檢查了這一點:

Nullable DateTimePicker on CodeProject

這一個:

Yet another nullable DateTimePicker control

enter image description here

+0

我有關於可空datetimepickers計算器很多帖子徹底檢查..包括你已在這裏掛的那些..我的要求,促使我要推出自己的自定義控制.. =) – AweSIM

+0

@AweSIM:你沒有在你的問題概括您的具體要求,所以它不是明顯的,爲什麼上面竟被d不工作。 – Neolisk