2013-04-19 1 views
0

동적으로 생성 된 TextBlock의 내용을 얻으려는 중이며 동적으로 생성 된 RichTextboxes (이들은 나란히 놓여 있음)를 C# + wpf의 클립 보드에 넣으려고합니다. 그러나 그렇게 할 수 없습니다. 나는 아무 소용이 구글을 통해 모든 검색했습니다, 내가 생각 해낸 최신 코드는TextBlock + RichTextBox to clipboard

StringBuilder clipboard = new StringBuilder(); 
     String rtb = scrlPanel.Children.OfType<RichTextBox>().ToString(); 
     //List<RichTextBox> rtb = scrlPanel.Children.OfType<RichTextBox>().; 

     foreach(TextBlock txtb in scrlPanel.Children.OfType<TextBlock>()) 
     { 
      clipboard.Append(txtb.Text + " " + "::" + Environment.NewLine + rtb.ToString() + Environment.NewLine); 

     } 
     Clipboard.SetText(clipboard.ToString()); 

이지만 작동하지 않습니다는 TextBlocks 잘 코드를 복사하지만 RichTextBoxes 내용 표시 ""을 System.Linq .Enumerable + d__aa`1 [System.Windows.Controls.RichTextBox] "

어떤 도움이나 포인터 크게 감사

감사합니다,

답변

1

당신은 있으며, toString()에서 복사 -. 방법을, 기본적으로 typename을 표시합니다.

다음과 같이해야합니다.

StringBuilder clipboard = new StringBuilder();

List<RichTextBox> rtbs = scrlPanel.Children.OfType<RichTextBox>().ToList(); 
    List<TextBlock> texts = scrlPanel.Children.OfType<TextBlock>().ToList(); 

    foreach(TextBlock txtb in texts) 
    { 
     RichTextBox rtb = rtbs[texts.indexOf(txtb)]; 
     string rtbtext = new TextRange(rtb .Document.ContentStart, rtb .Document.ContentEnd).Text; 
     clipboard.Append(txtb.Text + " " + "::" + Environment.NewLine + rtbtext + Environment.NewLine); 

    } 
    Clipboard.SetText(clipboard.ToString()); 

즉, 사용자가 RichTextBox와 동일한 수의 TextBox를 동일한 순서로 사용하는 경우입니다.

PD : 아마도이 방법을 사용하는 것이 더 좋을 수 있지만 이는 빠른 해결 방법입니다.

+0

안녕하세요 Kenneth, 맞습니다. TextBlocks만큼 많은 RichTextBoxes가 있습니다. Richtextbox의 .Text 속성을 가져 오려고했으나, .ToString()을 사용하면 typename이 나타납니다. – hectormtnezg

+0

죄송합니다. Windows Forms 1과 혼동을 느낍니다. 내 대답을 업데이 트됩니다 – Kenneth

+0

나는 그것을 가지고 !, 목록 ......와 TextRange를 사용했는데 rtb.Document를 받아들이지 않을 것이다 - 그것은 단지 나에게 옵션을주지 않을 것이지만, ve는 TextRange를 추가하고 그림처럼 클립 보드 코드에 구현했습니다. foreach (텍스트의 TextBlock txtb) { RichTextBox rtb = rtbs [texts.IndexOf (txtb)]; TextRange txtRange = new TextRange (rtb.Document.ContentStart, rtb.Document.ContentEnd); clipboard.Append (txtb.Text + ""+ "::"+ Environment.NewLine + txtRange.Text.TrimEnd() + Environment.NewLine); } – hectormtnezg