2012-12-04 3 views
2

많은 RichTextBox를 사용하는 C# winForms 응용 프로그램에서 작업하고 있습니다. 이미지를 복사하여 RichTextBox에 붙여 넣으면 이미지가 게시된다는 것을 알았습니다. RichTextBox에 이미지를 붙여 넣지 않도록하는 방법이 있습니까? 즉, 키보드 문자 만 허용합니다.서식있는 텍스트 상자에서 이미지 방지

+1

나는 당신이 붙여되었을 수있는 이미지를 제거하여 RichTextBox의 내용이 변경된 것을 인식하고 RTF 내용에 몇 가지 조작을 수행한다 할 수있는 최선 생각한다. –

+0

을 내가 알고 수있는 방법이 이미지인가요? – Emo

+0

RTF 형식은 '태그'를 정의합니다. RTF를 몇 가지 수단 (예 : 정규식)을 사용하여 구문 분석하고 이미지와 관련된 태그를 제거해야합니다. –

답변

1

나는 내 질문에 대답 할 수있었습니다. 여기 누군가가 다른 사람을 찾고있는 경우입니다.

private void InputExpressionRchTxt_KeyDown(object sender, KeyEventArgs e) 
{ 
    bool ctrlV = e.Modifiers == Keys.Control && e.KeyCode == Keys.V; 
    bool shiftIns = e.Modifiers == Keys.Shift && e.KeyCode == Keys.Insert; 
    if (ctrlV || shiftIns) 
     if (Clipboard.ContainsImage()) 
      e.Handled = true; 
} 
0

아마도 붙여 넣기 이벤트를 잡아서 RichTextBox로 복사 한 개체를 확인할 수 있습니다. 이미지 인 경우 삭제하십시오.

+0

이미지인지 확인하는 방법은?! – Emo

+0

디버그 및 무슨 일이 일어나는지보십시오 :) – Abbas

+0

그냥 할 : 만약 (copyObject.GetType() 이미지입니다) 사실입니다 - 파괴 또는 어쩌면 텍스트 상자 – zzfima

1

위의 대답의 문제는 혼합 된 콘텐츠가있는 경우에는 작동하지 않는다는 것입니다. 예를 들어 스프레드 시트에서 몇 행을 강조 표시하고 리치 텍스트 상자에 붙여 넣으면 원본 텍스트 이외의 다른 텍스트로 끝납니다. 나는 더 나은 솔루션은 다음과 생각 :

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.V) 
     { 
      if (Clipboard.GetData("Text") != null) 
       Clipboard.SetText((string)Clipboard.GetData("Text"), TextDataFormat.Text); 
      else 
       e.Handled = true; 
     }    
    } 

편집 : 방법은 아래 MrCC 공유하고 내 위의 방법보다 더 직접적인/더 나은 방법입니다했다.

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.V) 
     { 
      if (Clipboard.ContainsText()) 
       richTextBox1.Paste(DataFormats.GetFormat(DataFormats.Text)); 
      e.Handled = true; 
     } 
    } 
+1

동의. 예를 들어 Onenote에서 텍스트를 복사하면 클립 보드에 텍스트와 해당 텍스트를 나타내는 비트 맵 이미지가 채워집니다. 어떤 이유에서 CTRL-V는 항상 비트 맵 표현을 삽입 했으므로 CTRL-V를 가로채는 것이 필요합니다. 위의 코드는 약간의 로터리 (loopabout)입니다. 클립 보드가 있으면 순수 텍스트 형식으로 덮어 씁니다. 내부 처리기가 실제로 붙여 넣기를 수행 할 수있게합니다 (따라서 if 분기에서 e.Handled = true;는 사용하지 마십시오). 더 직접적 일 것입니다 :'(Clipboard.ContainsText()) richTextBox1.Paste (DataFormats.GetFormat (DataFormats.Text));'그리고'e.Handled = true; '를 어느 브랜치에 설정합니다. – MrCC

+0

정말 옳은 소식입니다. 너의 방법이 더 좋다. 틀림없이 내가 내 솔루션을 게시했을 때 클립 보드를 교체하지 않고도 문제가 해결 될 수 있다고 생각했지만 정확한 방법을 파악할 수는 없었습니다. 방법을 공유해 주셔서 감사합니다. 나는 당신의 것을 포함하기 위해 위의 나의 대답을 편집했다. –

+0

QWERTY 키보드에서만 작동하는 것처럼 보입니다. 마우스와 컨텍스트 메뉴 또는 다른 키보드가 있다면 어떻게 작동합니까? 붙여 넣기를 감지하는 더 높은 수준 또는 더 추상적 인 방법이 있습니까? –

관련 문제