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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.94964 の関連記事表示

<< 0 >>
■94964  SelectionFontの英字・ひらがな混合の場合について
□投稿者/ Visual C#初心者 -(2020/06/06(Sat) 20:44:42)

    分類:[C#] 

    既出でしたらすみません.

    英字とひらがなを以下の例のように混合したまま選択し,

    例.あいueo

    SelectionFont.Bold,あるいはUnderlineでフォントスタイル
    で判断し,太字(下線)でなければフォントを太字(下線)
    にしたいです.
    しかしSelection.Boldの時にnullを返してしまうので,
    何かいい方法はありますでしょうか?

    なお,Select(x,1)で1文字ずつ判定させる方法は
    処理が遅いので使用したくないです.

    ご教示お願い致します.
親記事 /過去ログ164より / 関連記事表示
削除チェック/

■94967  Re[1]: SelectionFontの英字・ひらがな混合の場合について
□投稿者/ 魔界の仮面弁士 -(2020/06/07(Sun) 13:12:17)
    No94964 (Visual C#初心者 さん) に返信
    > SelectionFont.Bold,あるいはUnderlineでフォントスタイルで判断し,
    (中略)
    > しかしSelection.Boldの時にnullを返してしまうので,
    > 何かいい方法はありますでしょうか?

    SelectionFont.Bold および
    Selection.Bold がある何か…に対するフォント操作という点は理解しました。

    しかし前提条件がゴッソリ抜け落ちているので、状況を把握しにくいです。
    C# に関する質問…というのは分かりますが、一体何の話でしょうか。(^_^;)



    最初は Microsoft Word のオートメーション操作かと思いましたが、
    Word には SelectionFont というプロパティがありません。(Selection ならある)

    System.Windows.Forms.RichTextBox ではその逆で、
    Selection プロパティが存在しません。(SelectionFont ならある)

    System.Windows.Controls.RichTextBox だとしたら、Selection フォントが無く、
    しかも Selection プロパティが返す TextSelection 型に Bold プロパティがありません。


    ActiveX 版の RichTextBox が相手の場合は、フォント混在であろうと、
     axRichTextBox1.SelBold = true;
     axRichTextBox1.SelUnderline = true;
    で処理できますが…こちらは Selection も SelectionFont もありません。
記事No.94964 のレス /過去ログ164より / 関連記事表示
削除チェック/

■94968  Re[2]: SelectionFontの英字・ひらがな混合の場合について
□投稿者/ Visual C#初心者 -(2020/06/07(Sun) 13:43:15)
    No94967 (魔界の仮面弁士 さん) に返信
    > ■No94964 (Visual C#初心者 さん) に返信
    >>SelectionFont.Bold,あるいはUnderlineでフォントスタイルで判断し,
    > (中略)
    >>しかしSelection.Boldの時にnullを返してしまうので,
    >>何かいい方法はありますでしょうか?
    >
    > SelectionFont.Bold および
    > Selection.Bold がある何か…に対するフォント操作という点は理解しました。
    >
    > しかし前提条件がゴッソリ抜け落ちているので、状況を把握しにくいです。
    > C# に関する質問…というのは分かりますが、一体何の話でしょうか。(^_^;)
    >
    >
    >
    > 最初は Microsoft Word のオートメーション操作かと思いましたが、
    > Word には SelectionFont というプロパティがありません。(Selection ならある)
    >
    > System.Windows.Forms.RichTextBox ではその逆で、
    > Selection プロパティが存在しません。(SelectionFont ならある)
    >
    > System.Windows.Controls.RichTextBox だとしたら、Selection フォントが無く、
    > しかも Selection プロパティが返す TextSelection 型に Bold プロパティがありません。
    >
    >
    > ActiveX 版の RichTextBox が相手の場合は、フォント混在であろうと、
    >  axRichTextBox1.SelBold = true;
    >  axRichTextBox1.SelUnderline = true;
    > で処理できますが…こちらは Selection も SelectionFont もありません。

    ご返信ありがとうございます。
    こちらの説明不足と記載ミスがあり、失礼致しました。

    まず、開発環境としてはVisual C#のwinFormです。
    Richtextbox上のフォント混在文字列を選択した状態で
    太字(下線)の有無をobj.SelectionFont.Bold(Underline)で
    判定したいという趣旨になります。

    上記で
    >>しかしSelection.Boldの時にnullを返してしまうので,
    と記載してしまいましたが正しくはSelectionFont.Bold
    になります。

    伺いたい内容としては、SelectionFont.Boldで太字判定
    させたくても、フォント混在の場合はnullを返すので、
    SelectionFont以外で良い方法があれば教えて頂ければ
    ということになります。

    以上になります。
記事No.94964 のレス /過去ログ164より / 関連記事表示
削除チェック/

■94977  Re[3]: SelectionFontの英字・ひらがな混合の場合について
□投稿者/ 魔界の仮面弁士 -(2020/06/08(Mon) 11:39:29)
    No94968 (Visual C#初心者 さん) に返信
    > 伺いたい内容としては、SelectionFont.Boldで太字判定
    > させたくても、フォント混在の場合はnullを返すので、

    「選択項目を太字(下線)にしたい」という点さえ実施できれば、
    「選択項目の太字(下線)の有無を判断したい」という点は、
    必ずしも必要ない気がします。(判定せずに強制適用すれば済む話なので)

    フォントが混在している範囲に対しても、選択範囲の Bold や Underline や Italic の設定を、
    一括して適用できれば良いのですよね。(ActiveX 版の RichTextBox はそういう実装になっている)


    > Richtextbox上のフォント混在文字列を選択した状態で
    > 太字(下線)の有無をobj.SelectionFont.Bold(Underline)で
    > 判定したいという趣旨になります。

    API を併用しても構わないのであれば、CHARFORMAT / CHARFORMAT2 構造体に
     .dwMask  = (CFM_Bold | CFM_UNDERLINE);
     .dwEffects= (CFE_Bold | CFE_UNDERLINE);
    をセットしておいた上で、
    EM_SETCHARFORMAT を SendMessage すれば、選択範囲内すべてを太字かつ下線にできます。同様に .dwMask 指定にて
    EM_GETCHARFORMAT を SendMessage すれば、選択範囲内すべてに太字/下線がそれぞれ適用済みなのかを取得できます。

    EM_GETCHARFORMAT は、選択範囲に対して「一部の文字だけが設定された状態」と「まったく設定されていない状態」とを
    区別できませんが、今回の要件では問題無いでしょう。

    C# 版のサンプル書いたので、後でアップしておきます。
記事No.94964 のレス /過去ログ164より / 関連記事表示
削除チェック/

■94978  Re[4]: SelectionFontの英字・ひらがな混合の場合について
□投稿者/ 魔界の仮面弁士 -(2020/06/08(Mon) 13:02:36)
    No94977 (魔界の仮面弁士) に追記
    > API を併用しても構わないのであれば、CHARFORMAT / CHARFORMAT2 構造体に
    >  .dwMask  = (CFM_Bold | CFM_UNDERLINE);
    >  .dwEffects= (CFE_Bold | CFE_UNDERLINE);
    > をセットしておいた上で、
    > EM_SETCHARFORMAT を SendMessage すれば、選択範囲内すべてを太字かつ下線にできます。同様に .dwMask 指定にて
    > EM_GETCHARFORMAT を SendMessage すれば、選択範囲内すべてに太字/下線がそれぞれ適用済みなのかを取得できます。


    サンプルコードを置いときます。
    http://www.vb-user.net/junk/replySamples/2020.06.08.10.53/RichTextBoxWankuma.cs

    動作確認環境:
     Win10 v2004(x64)
     VS2017 VS2019 v16.6.1/VS2019 v16.6.0/v15.9.23
     .NET Framework 4.8/4.6.1


    RichTextBox を継承して、SelectionBold / SelectionItalic / SelectionUnderline プロパティを追加してありますが、
    継承だと都合が悪い場合は、拡張メソッドの形に書き換えてみてください。


    サンプル中で使用されない定数などもあえて取り込んであるので、やや冗長的なコードになっています。
    邪魔なようであれば、不要な宣言を削ぎ落してください。

    なお、C# 7.0 以降の構文で記述しているので、VS2015以下の場合は、プロパティ構文の手直しが必要です。
    また、.NET 4 未満の場合は、Enum.HasFlag の箇所をビットフラグ判定の構文に修正してください。

    ※ RichTextBox のバージョン判定は省略していますので、Win98 + .NET 1.1 などの組み合わせだと、多分動かないです。
記事No.94964 のレス /過去ログ164より / 関連記事表示
削除チェック/

■94993  Re[5]: SelectionFontの英字・ひらがな混合の場合について
□投稿者/ Visual C#初心者 -(2020/06/09(Tue) 21:32:43)
    No94978 (魔界の仮面弁士 さん) に返信
    > ■No94977 (魔界の仮面弁士) に追記
    >>API を併用しても構わないのであれば、CHARFORMAT / CHARFORMAT2 構造体に
    >> .dwMask  = (CFM_Bold | CFM_UNDERLINE);
    >> .dwEffects= (CFE_Bold | CFE_UNDERLINE);
    >>をセットしておいた上で、
    >>EM_SETCHARFORMAT を SendMessage すれば、選択範囲内すべてを太字かつ下線にできます。同様に .dwMask 指定にて
    >>EM_GETCHARFORMAT を SendMessage すれば、選択範囲内すべてに太字/下線がそれぞれ適用済みなのかを取得できます。
    >
    >
    > サンプルコードを置いときます。
    > http://www.vb-user.net/junk/replySamples/2020.06.08.10.53/RichTextBoxWankuma.cs
    >
    > 動作確認環境:
    >  Win10 v2004(x64)
    >  VS2017 VS2019 v16.6.1/VS2019 v16.6.0/v15.9.23
    >  .NET Framework 4.8/4.6.1
    >
    >
    > RichTextBox を継承して、SelectionBold / SelectionItalic / SelectionUnderline プロパティを追加してありますが、
    > 継承だと都合が悪い場合は、拡張メソッドの形に書き換えてみてください。
    >
    >
    > サンプル中で使用されない定数などもあえて取り込んであるので、やや冗長的なコードになっています。
    > 邪魔なようであれば、不要な宣言を削ぎ落してください。
    >
    > なお、C# 7.0 以降の構文で記述しているので、VS2015以下の場合は、プロパティ構文の手直しが必要です。
    > また、.NET 4 未満の場合は、Enum.HasFlag の箇所をビットフラグ判定の構文に修正してください。
    >
    > ※ RichTextBox のバージョン判定は省略していますので、Win98 + .NET 1.1 などの組み合わせだと、多分動かないです。

    ありがとうございます!
    自分で勉強して実装してみます.
    お手数おかけしました.
記事No.94964 のレス / END /過去ログ164より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -