2014-01-18 2 views
0

MS Excel의 일부 행을 복사하여 C# Winforms 응용 프로그램의 richTextBox에 붙여 넣으려고합니다. 사용자가 키보드의 Ctrl + V를 누르면 Excel 그리드 선이 나타납니다. 이 작동하지 않는 것 어떻게 내가 붙여 넣은 내용은 텍스트로 표시됩니다 확인 #서식있는 텍스트 상자에서 스프레드 시트 서식 제거

:

private void button1_Click(object sender, EventArgs e) 
{ 
    richTextBox2.Clear(); 
    richTextBox2.Focus(); 

    string strValues; 
    strValues = richTextBox1.Text; 

    var textInEachLine = richTextBox1.Text.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); 
    string whereClause = string.Join("', '", textInEachLine).ToString(); 
    richTextBox2.AppendText(" IN ('" + whereClause + "')"); 
} 
: 내 코드는 다음과 같습니다로

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control == true && e.KeyCode == Keys.V) 
    { 
     e.Handled = true; 
     string st = Clipboard.GetText(); 
     richTextBox1.Text = st; 
    } 
} 

내가 텍스트 상자를 사용할 수 없습니다

+1

하나의 해결책은 'multiline' 옵션이'richtextbox' 대신 true로 설정된'textbox'를 사용하는 것일 수도 있습니다 – Marek

+0

내 질문이 내 코드로 업데이트되었습니다. 내가 문자열 배열을 사용하여 텍스트 상자를 사용할 수 없습니다. 당신이 그것을 다시 작성하고 나를 보여줄 수 없다면 – PriceCheaperton

+0

당신이 제공 한 코드가 작동하고 문제가 다른 곳에 있어야합니다. 이 'richtextbox'에 더 이상 이벤트가 있습니까? – Marek

답변

0

는 더 나은 솔루션은 멀티 라인 텍스트 상자에를 RichTextBox를 변환하는 것이었다

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) 
      { 
       e.Handled = true; 
       string st = Clipboard.GetText(); 
       richTextBox1.Text = st; 
      } 
      base.OnKeyDown(e); 
     } 



private void richTextBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
     if (e.Control == true && e.KeyCode == Keys.V) { e.IsInputKey = true; } 
    } 
+1

작동하지 않습니다 ... 난 여전히 붙여 넣은 표를 엑셀에서 – PriceCheaperton

0

나는 한동안 더 나은 대답을 찾아 보았습니다. 내가 지원하는 응용 프로그램에서 RichTextBox를 제거 할 수 없기 때문에 나는 내 자신의 솔루션을 생각해 냈습니다. 원시 RTF 데이터를보고 Excel에서 일부 셀을 붙여 넣으려면 양식 앱을 작성했습니다. 굴복 빈 텍스트 상자 ...

{\ rtf1 \ ANSI \ ansicpg1252 \ deff0 \ deflang1033 {\ fonttbl {\ F0 \ fnil 돋움;}} \ viewkind4 \ UC1 \ PARD \ F0 \ fs22 \ 파 }

가 표시 일부 컬러 텍스트로 몇 세포에서 붙여 넣기 ...

{\ rtf1 \ ANSI \ ansicpg1252 \ deff0 \ deflang1033 {\ fonttbl {\ F0 \ fnil 돋움; }} {\ colortbl; \ red255 \ green0 \ blue0; \ red0 \ green0 \ blue0;} \ viewkind4 \ uc1 \ trowd \ trgaph30 \ trleft-30 \ cellx1002 \ cellx2034 \ pard \ intbl \ cf1 \ f0 \ fs22 좋은 텍스트 \ 셀 \ cf2 좋은 텍스트 \ 셀 \ 행 \ intbl 좋은 텍스트 \ cell \ cf1 좋은 텍스트 \ 셀 \ 행 \ PARD \ CF0 \ 파 }

I 발견 그 '\ 셀'또는 제거 \ cellx #### '와 다른하여 RichTextBox의 텍스트 관련된 모든 형식의 결과 복귀하면 제거되는 . RichTextBox가 잘못된 서식을 제거하는 것 같습니다. 이걸로, 텍스트를 RichTextBox에 붙여 넣기 전에 다음 메소드를 실행하여 작성했습니다.

private void CleanClipboardText() 
    { 
     string cleaned = Clipboard.GetText(TextDataFormat.Rtf); 
     if (cleaned != null & cleaned != String.Empty) 
     { 
      Regex regex = new Regex(@"\\cellx\d{4}?"); 
      cleaned = regex.Replace(cleaned, " "); 
      regex = new Regex(@"\\cell"); 
      cleaned = regex.Replace(cleaned, " "); 
      Clipboard.SetText(cleaned, TextDataFormat.Rtf); 
     } 
    } 

"KeyDown"이벤트에 대한이 이벤트. 내가 richTextBox1.Text = st; 의지로 전체 상자의 텍스트를 덮어 쓰지 않으려로

private void RTB_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.V) 
     { 
      RichTextBox rtb = sender as RichTextBox; 
      e.Handled = true; 
      CleanClipboardText(); 
      rtb.Paste(); 
     } 
    } 

나는 .Paste();을 사용했다. 그러나 원하는 경우 CleanClipboardText 메서드에서 rtf 데이터의 문자열을 반환 한 다음 RichTextBox.Rtf을 대신 설정해야 할 수 있습니다.

관련 문제