2017-02-16 61 views
0

我在我的應用程序中有一個文本框,我希望用戶能夠輸入一個字符串並敲入回車,它將該字符串添加到變量並清除文本框。他們可以通過文本框向變量添加多個字符串,每個字符串之間用逗號分隔。但是當我將完整的記錄添加到我的csv文件時,它有兩個逗號。我看不到他們在哪裏被添加。UWP C#從textbox.txt中消除雙逗號

期望的結果 1/1/2017,12:00,喬,出,1234,09112,4545,120034

什麼,現在我越來越 1/1/2017,12 :00,喬,出,1234,09112,4545,,120034 ,,

這裏的相關代碼:

 private void meterNumberBox_KeyDown(object sender, KeyRoutedEventArgs e) 
     { 
      if (e.Key == Windows.System.VirtualKey.Enter) 
      { 
       singlescan = meterNumberBox.Text + ","; 
       meternumber += singlescan; 
       meterNumberBox.Text = ""; 
       singlescan = ""; 

      } 
     } 


     private async void SubmitButton_Click(object sender, RoutedEventArgs e) 
     { 
      action = "out"; 

      // create record to be added to CSV 
      recordline = DateTime.Today.ToString("MM/dd/yyyy") + ","; 
      recordline += DateTime.Now.ToString("HH:mm:ss"); 
      recordline += ","; 
      recordline += checkoutName; 
      recordline += ","; 
      recordline += action; 
      recordline += meternumber; 
      recordline += "\r\n"; 

// then it submits the recordline to the record file. 
     // open csv and append record 
     StorageFolder appStoragefolder = ApplicationData.Current.RoamingFolder; 
     StorageFile appRecordFile = await appStoragefolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); // if it doesn't exist it will be created 
     var stream = await appRecordFile.OpenAsync(FileAccessMode.ReadWrite); 
     using (var outputstream = stream.GetOutputStreamAt(stream.Size)) 
     { 
      using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputstream)) 
      { 
       dataWriter.WriteString(recordline); 
       await dataWriter.StoreAsync(); 
       await outputstream.FlushAsync(); 
      } 
     } 

     stream.Dispose(); 

我想我可以消除來自recordline雙逗號與.repl王牌(),但我真的很想明白我做錯了導致問題。

感謝您的任何意見!

編輯:一點點更多的測試後,似乎enter被擊中兩次,每次在鍵盤按下回車鍵。不知道爲什麼。

+0

如果沒有好的[mcve],就不可能提供具體建議的好答案。也就是說,根據你寫的內容,看起來一切正常。您似乎正在使用使用雙逗號來轉義逗號的CSV實現(因爲逗號分隔了文件中的一行內的字段)。只要你使用相同的CSV實現來讀取文件,我希望它能正確解碼轉義的逗號。 –

+0

我編輯了我的問題,表明我只是將一個字符串添加到文本文件中,而不使用任何CSV處理方法。 – JayCee

+0

此外,這裏沒有任何東西可以防止用戶在文本框爲空時按Enter鍵,這會導致額外的逗號。不一定是現在發生的事情,而是需要注意的事情。 – dazedandconfused

回答

0

在意識到我需要搜索短語「UWP keydown事件兩次發射」後,我發現了我的問題的答案。根據博客文章和帖子,這似乎是Windows 10 UWP應用程序中的一個錯誤。

http://blog.mzikmund.com/2015/12/winrt-keydown-fired-twice-when-enter-is-pressed/

Keydown Event fires twice

我能夠加入到解決我的具體情況:

if (e.KeyStatus.RepeatCount == 1) 
{ 
    //Execute code 
} 

所以我最後的事件處理程序是這樣的:

private async void meterNumberBox_KeyDown(object sender, KeyRoutedEventArgs e) 
{ 
    if (e.Key == Windows.System.VirtualKey.Enter) 
    { 
     if (e.KeyStatus.RepeatCount == 1) 
     { 
      singlescan = meterNumberBox.Text + ","; 
      meternumber += singlescan; 
      singlescan = ""; 
      meterNumberBox.Text = ""; 
     } 
    } 

}