2013-04-23 63 views
0

我需要驗證的x數量RichTextBox我按動按鈕創建。在將內容複製到剪貼板並調用下一個表單之前,我需要確保沒有單個RTB爲空。驗證動態創建的richtextboxes

我試着添加一個布爾變量,但是如果一個空RTB在中間的某個地方,它會被跳過。

這是我現在的代碼。任何幫助是極大的讚賞。

List<RichTextBox> rtbs = scrlPanel.Children.OfType<RichTextBox>().ToList(); 
List<TextBlock> texts = scrlPanel.Children.OfType<TextBlock>().ToList(); 
StringBuilder raTemplate = new StringBuilder(); 
//bool flag = true; // True as in It is empty 

foreach (RichTextBox rtb in scrlPanel.Children.OfType<RichTextBox>()) 
{ 
    TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
    if (txtRange.Text.Trim() == string.Empty) 
    { 
     MessageBox.Show("Empty fields."); 
     break; 
    } 
    else 
    { 
     foreach (TextBlock txtb in texts) 
     { 
      //RichTextBox rtb = rtbs[texts.IndexOf(txtb)]; 
      //TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
      raTemplate.Append(txtb.Text + " " + "::" + Environment.NewLine + txtRange.Text.Trim() + Environment.NewLine); 
     } 
     Clipboard.SetText(raTemplate.ToString()); 
     RA_Email ra = new RA_Email(); 
     ra.raEmail(); 
     //flag = true; 
    } 
} 
+0

如果第三個RTB是空的,例如,您想跳過其餘還是跳過第三個RTB?或者你還想撤消前兩個? – keyboardP 2013-04-23 16:48:10

+0

幾乎你的第一篇文章(代碼)解決了我的問題:)但是,是的,我想在代碼遇到空RTB時立即丟棄所有內容,無論是在開始,在中間還是在結尾。 – hectormtnezg 2013-04-23 16:57:36

+0

我刪除了那篇文章,因爲我意識到'txtRange'不會在第一個循環之外存在。轉貼了應該與'txtRange'變量一起工作的更新版本:) – keyboardP 2013-04-23 17:07:22

回答

1

複印方面可循環外移動,以確保它只有當所有的RichTextBoxes是空的開始。

bool doCopy = true; 
foreach (RichTextBox rtb in scrlPanel.Children.OfType<RichTextBox>()) 
{ 
    TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
    if (txtRange.Text.Trim() == string.Empty) 
    { 
     MessageBox.Show("Empty fields."); 
     doCopy = false; 
     break; 
    } 
} 

if(doCopy) 
{ 
    foreach (TextBlock txtb in texts) 
    { 
     //RichTextBox rtb = rtbs[texts.IndexOf(txtb)]; 
     //TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
     raTemplate.Append(txtb.Text + " " + "::" + Environment.NewLine + txtRange.Text.Trim() + Environment.NewLine); 
    } 

    Clipboard.SetText(raTemplate.ToString()); 
    RA_Email ra = new RA_Email(); 
    ra.raEmail(); 
} 
+0

我敢打賭你也會刪除這一個:)你發佈的這個最新代碼實際上是爲每個RTB在ScrlPanel中複製了每個TextBlock + RTB。基本上,它複製一個非常大的附加字符串。然而,你的第一個代碼完美地工作,我只是添加了第二個txtRange(儘管這不是最好的編程實踐):) – hectormtnezg 2013-04-23 17:16:32

+0

@hectormtnezg - 啊沒關係。在這種情況下,您可以循環兩次RTB集合。一次確保沒有任何內容是空的,而下一個則是實際執行復制內容。 (更新答案,希望它能起作用!)。如果沒有,我會重新發布第一個:) – keyboardP 2013-04-23 17:23:51

+0

非常感謝您的幫助keyboardP,我建議您重新發布第一個,但我可以將其標記爲答案,並提出您的觀點,因爲這一個和前一個一樣,txtRange也需要重新聲明。 :) – hectormtnezg 2013-04-23 17:29:32