C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[5]: SelectionFontの英字・ひらがな混合の場合について
(過去ログ 164 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 6 記事 (1 - 6 表示)] <<
0
>>
■94964
/ inTopicNo.1)
SelectionFontの英字・ひらがな混合の場合について
▼
■
□投稿者/ Visual C#初心者
(6回)-(2020/06/06(Sat) 20:44:42)
分類:[C#]
既出でしたらすみません.
英字とひらがなを以下の例のように混合したまま選択し,
例.あいueo
SelectionFont.Bold,あるいはUnderlineでフォントスタイル
で判断し,太字(下線)でなければフォントを太字(下線)
にしたいです.
しかしSelection.Boldの時にnullを返してしまうので,
何かいい方法はありますでしょうか?
なお,Select(x,1)で1文字ずつ判定させる方法は
処理が遅いので使用したくないです.
ご教示お願い致します.
引用返信
編集キー/
編集
■94967
/ inTopicNo.2)
Re[1]: SelectionFontの英字・ひらがな混合の場合について
▲
▼
■
□投稿者/ 魔界の仮面弁士
(2741回)-(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 もありません。
引用返信
編集キー/
編集
■94968
/ inTopicNo.3)
Re[2]: SelectionFontの英字・ひらがな混合の場合について
▲
▼
■
□投稿者/ Visual C#初心者
(8回)-(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以外で良い方法があれば教えて頂ければ
ということになります。
以上になります。
引用返信
編集キー/
編集
■94977
/ inTopicNo.4)
Re[3]: SelectionFontの英字・ひらがな混合の場合について
▲
▼
■
□投稿者/ 魔界の仮面弁士
(2743回)-(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# 版のサンプル書いたので、後でアップしておきます。
引用返信
編集キー/
編集
■94978
/ inTopicNo.5)
Re[4]: SelectionFontの英字・ひらがな混合の場合について
▲
▼
■
□投稿者/ 魔界の仮面弁士
(2744回)-(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 などの組み合わせだと、多分動かないです。
引用返信
編集キー/
編集
■94993
/ inTopicNo.6)
Re[5]: SelectionFontの英字・ひらがな混合の場合について
▲
▼
■
□投稿者/ Visual C#初心者
(9回)-(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 などの組み合わせだと、多分動かないです。
ありがとうございます!
自分で勉強して実装してみます.
お手数おかけしました.
解決済み
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-