C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Richtextboxの書式を保持したい

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■94759 / inTopicNo.1)  Richtextboxの書式を保持したい
  
□投稿者/ ジョシュ (1回)-(2020/05/13(Wed) 15:01:03)

分類:[VB.NET/VB2005 以降] 

VisualStudio2019で開発を行っています。
WindowsFormアプリケーションでフォーム上にRichtextboxを配置し、フォント情報を設定した状態で動かし、
Wordから文章を配置したRichtextbox内に貼付けを行ったとき、wordで設定していたフォント情報が
そのままRichtextboxに反映されて表示されてしまいます。
Richtextboxに元々設定していたフォント情報を保持したまま文章を貼り付ける方法はないでしょうか。

ご教授いただければと思います。
よろしくお願いします。
引用返信 編集キー/
■94760 / inTopicNo.2)  Re[1]: Richtextboxの書式を保持したい
□投稿者/ 魔界の仮面弁士 (2716回)-(2020/05/13(Wed) 15:27:35)
2020/05/13(Wed) 15:32:13 編集(投稿者)

No94759 (ジョシュ さん) に返信
> Richtextboxに元々設定していたフォント情報を保持したまま文章を貼り付ける方法はないでしょうか。

Word からコピーされたクリップボード内に保持されている、
フォント以外の書式情報……たとえば、埋め込み画像や
段落の左寄せ/右寄せや文字色など……が失われても良いのなら、
クリップボードから「テキスト形式」のみを貼り付けてみては如何でしょう。

For Each fmt In New String() {"UnicodeText", "Text", "System.String"}
  Dim dataFormat = DataFormats.GetFormat(fmt)
  If RichTextBox1.CanPaste(dataFormat) Then
    RichTextBox1.Paste(dataFormat)
    Exit For
  End If
Next
引用返信 編集キー/
■94761 / inTopicNo.3)  Re[2]: Richtextboxの書式を保持したい
□投稿者/ ジョシュ (2回)-(2020/05/13(Wed) 15:45:45)
No94760 (魔界の仮面弁士 さん) に返信
> 2020/05/13(Wed) 15:32:13 編集(投稿者)
>
> ■No94759 (ジョシュ さん) に返信
>>Richtextboxに元々設定していたフォント情報を保持したまま文章を貼り付ける方法はないでしょうか。
>
> Word からコピーされたクリップボード内に保持されている、
> フォント以外の書式情報……たとえば、埋め込み画像や
> 段落の左寄せ/右寄せや文字色など……が失われても良いのなら、
> クリップボードから「テキスト形式」のみを貼り付けてみては如何でしょう。
>
> For Each fmt In New String() {"UnicodeText", "Text", "System.String"}
>   Dim dataFormat = DataFormats.GetFormat(fmt)
>   If RichTextBox1.CanPaste(dataFormat) Then
>     RichTextBox1.Paste(dataFormat)
>     Exit For
>   End If
> Next

ありがとうございます。
大変申し訳ないのですが、いただいた記述を使用する場所がわからないです。
RichTextBox1.KeyPressやRichTextBox1.KeyDownでペーストした時でしょうか?
引用返信 編集キー/
■94762 / inTopicNo.4)  Re[3]: Richtextboxの書式を保持したい
□投稿者/ 魔界の仮面弁士 (2717回)-(2020/05/13(Wed) 16:40:39)
No94761 (ジョシュ さん) に返信
> 大変申し訳ないのですが、いただいた記述を使用する場所がわからないです。

適当なボタンを用意して、そこの Click イベントに書いても良いですし、
右クリックのコンテキストメニューを追加しても良いでしょう。


[Shift]+[Insert] や [Ctrl]+[V] などを捕らえたいのであれば、
RichTextBox の ProcessCmdKey メソッドをオーバーライドします。


Public Class RichTextBoxEx
  Inherits RichTextBox
  Protected Overrides Function ProcessCmdKey(ByRef m As Message, keyData As Keys) As Boolean
    Dim modifiers As Keys = keyData And Keys.Control
    Dim keyCode As Keys = keyData And Keys.KeyCode

    Dim isShiftInsert = (modifiers = Keys.Shift AndAlso keyCode = Keys.Insert)
    Dim isControlV = (modifiers = Keys.Control AndAlso keyCode = Keys.V)
    If isShiftInsert OrElse isControlV Then
      For Each fmt In New String() {"UnicodeText", "Text", "System.String"}
        Dim dataFormat = DataFormats.GetFormat(fmt)
        If CanPaste(dataFormat) Then
          Paste(dataFormat)
          Return True
        End If
      Next
    End If
    Return MyBase.ProcessCmdKey(m, keyData)
  End Function
End Class
引用返信 編集キー/
■94763 / inTopicNo.5)  Re[4]: Richtextboxの書式を保持したい
□投稿者/ ジョシュ (3回)-(2020/05/13(Wed) 17:06:47)
No94762 (魔界の仮面弁士 さん) に返信
> ■No94761 (ジョシュ さん) に返信
>>大変申し訳ないのですが、いただいた記述を使用する場所がわからないです。
>
> 適当なボタンを用意して、そこの Click イベントに書いても良いですし、
> 右クリックのコンテキストメニューを追加しても良いでしょう。
>
>
> [Shift]+[Insert] や [Ctrl]+[V] などを捕らえたいのであれば、
> RichTextBox の ProcessCmdKey メソッドをオーバーライドします。
>
>
> Public Class RichTextBoxEx
>   Inherits RichTextBox
>   Protected Overrides Function ProcessCmdKey(ByRef m As Message, keyData As Keys) As Boolean
>     Dim modifiers As Keys = keyData And Keys.Control
>     Dim keyCode As Keys = keyData And Keys.KeyCode
>
>     Dim isShiftInsert = (modifiers = Keys.Shift AndAlso keyCode = Keys.Insert)
>     Dim isControlV = (modifiers = Keys.Control AndAlso keyCode = Keys.V)
>     If isShiftInsert OrElse isControlV Then
>       For Each fmt In New String() {"UnicodeText", "Text", "System.String"}
>         Dim dataFormat = DataFormats.GetFormat(fmt)
>         If CanPaste(dataFormat) Then
>           Paste(dataFormat)
>           Return True
>         End If
>       Next
>     End If
>     Return MyBase.ProcessCmdKey(m, keyData)
>   End Function
> End Class

[Shift]+[Insert] や [Ctrl]+[V] を想定していたので、メソッドをオーバーライドする方向で動作確認できました。
ありがとうございます
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ