2013-04-15 56 views
1

我想讓DispatcherTimer從文本框中讀取時間值:objTextBox。 我試過這段代碼,但似乎TimeSpan與字符串不兼容,或者我做錯了什麼?讓用戶指定計時器時間?

錯誤:參數1:不能從 '字符串' 轉換爲 '長'

也;時間在文本框中必須看起來像這樣:0,0,1還是00:00:01?

代碼在這裏:

private void testing() 
    { 
     string theText = objTextBox.Text; 
     DispatcherTimer dispatcherTimer = new DispatcherTimer(); 
     dispatcherTimer.Tick += new EventHandler(listjob3_Tick); 
     dispatcherTimer.Interval = new TimeSpan(theText); 
     dispatcherTimer.Start(); 
    } 
+0

你是如何將它呈現給用戶的? IE,選擇一個小時,分鐘秒的時間?這取決於你如何收集定時器的價值。一旦確定我們可以給你建議。 TimeSpan對象構造函數具有TimeSpan(ticks),TimeSpan(小時,分鐘,秒),TimeSpan(日,小時,分鐘,秒)或TimeSpan(日,小時,分鐘,秒,毫秒);從我看到的是Ticks,但我沒有看到任何驗證文本框的值。 – Sorceri

回答

1

要字符串轉換爲時間跨度,使用TimeSpan.Parse(str)

+0

我得到這個錯誤:System.TimeSpan.Parse(string,System。IFormatProvider)'是一種'方法',但用於'類型' 我寫道: dispatcherTimer.Interval = new TimeSpan.Parse(theText); – Sneakybastardd

+0

錯誤是非常明顯的,你不應該放置TimeSpan.Parse的新面前,因爲它是一個靜態方法,而不是類型。 – alex

+0

你能舉個例子嗎? – Sneakybastardd

1

我猜你的例外是在這裏:

dispatcherTimer.Interval = new TimeSpan(theText); 

使用這個代替:

dispatcherTimer.Interval = new TimeSpan(Convert.ToInt64(theText)); 
+0

謝謝你的幫助! :) – Sneakybastardd

0

@Sneakybastardd:你有沒有閱讀關於構造函數重載的TimeSpan documentation?你會注意到它們都沒有使用字符串參數:整數類型是必需的。

閱讀the documentation後,你會發現這些TimeSpan方法有用:

  • Parse()
  • ParseExact()
  • TryParse()

對於格式,見"Standard TimeSpan Format Strings""Custom TimeSpan Format Strings"。如果這些文化發揮作用,還要針對不同文化的各種默認TimeSpan格式進行一些研究。

1

要轉換爲TimeSpanstring,你可以利用TimeSpan.Parse,但你必須遵守這種格式[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]其中:

ws is Optional white space. 
-  is An optional minus sign, which indicates a negative TimeSpan. 
d  is Days, ranging from 0 to 10675199. 
.  is A culture-sensitive symbol that separates days from hours. The invariant format uses a period (".") character. 
hh is Hours, ranging from 0 to 23. 
:  is The culture-sensitive time separator symbol. The invariant format uses a colon (":") character. 
mm is Minutes, ranging from 0 to 59. 
ss is Optional seconds, ranging from 0 to 59. 
.  is A culture-sensitive symbol that separates seconds from fractions of a second. The invariant format uses a period (".") character. 
ff is Optional fractional seconds, consisting of one to seven decimal digits. 

所以只是將天你其實可以使用TimeSpan.Parse,只是通過在字符串中 - 但如果你想轉換分鐘則需輸入一些按摩是這樣的:

var input = string.Format("00:{0}", objTextBox.Text.PadLeft(2, '0')); 

等等,那麼你可以發出var timeSpan = TimeSpan.Parse(input);,因爲你已經正確格式化了它並且Parse會成功。另一種選擇是將分鐘轉換成我猜想的日子,但這需要一些浮點工作,並且實際上,IMO並不是一個好的選擇。

+0

謝謝你的幫助! :) – Sneakybastardd