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

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

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

No.95068 の関連記事表示

<< 0 >>
■95068  CHARFORMATのデフォルトについて
□投稿者/ Visual C#初心者 -(2020/06/21(Sun) 20:17:54)

    分類:[C#] 

    Visual studio 2019でCHARFORMATを
    拡張メソッドで使用しています.
    文字を太文字にしてからまた元に戻すといった
    機能をもたせたいのですが,可能でしょうか?

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

■95069  Re[1]: CHARFORMATのデフォルトについて
□投稿者/ 魔界の仮面弁士 -(2020/06/21(Sun) 23:06:18)
    No95068 (Visual C#初心者 さん) に返信
    > 文字を太文字にしてからまた元に戻すといった
    > 機能をもたせたいのですが,可能でしょうか?

    できますよ。
    No94964 のスレッドに回答したときに、そのためのコードも掲載しています。
記事No.95068 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95075  Re[2]: CHARFORMATのデフォルトについて
□投稿者/ 魔界の仮面弁士 -(2020/06/22(Mon) 10:41:59)
    No95069 (魔界の仮面弁士 さん) に返信
    >>文字を太文字にしてからまた元に戻すといった
    >>機能をもたせたいのですが,可能でしょうか?
    > No94964 のスレッドに回答したときに、そのためのコードも掲載しています。

    先のコードで使っている CHARFORMAT2 は、CHARFORMAT を拡張した物(構造体サイズが異なる)であり、
    使い方は殆ど一緒です。CHARFORMAT2 / CHARFORMAT どちらでも同じように書けます。

    また、『元に戻す』というのが、Ctrl+Z などの「アンドゥ」の話だとしたら、このあたりが参考になるかと思います。
    http://pineplanter.moo.jp/non-it-salaryman/2017/11/29/csharp-undo-richtextbox/
記事No.95068 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95084  Re[3]: CHARFORMATのデフォルトについて
□投稿者/ VisualC#初心者 -(2020/06/23(Tue) 00:14:21)
    No95075 (魔界の仮面弁士 さん) に返信
    > ■No95069 (魔界の仮面弁士 さん) に返信
    > >>文字を太文字にしてからまた元に戻すといった
    > >>機能をもたせたいのですが,可能でしょうか?
    >>No94964 のスレッドに回答したときに、そのためのコードも掲載しています。
    >
    > 先のコードで使っている CHARFORMAT2 は、CHARFORMAT を拡張した物(構造体サイズが異なる)であり、
    > 使い方は殆ど一緒です。CHARFORMAT2 / CHARFORMAT どちらでも同じように書けます。
    >
    > また、『元に戻す』というのが、Ctrl+Z などの「アンドゥ」の話だとしたら、このあたりが参考になるかと思います。
    > http://pineplanter.moo.jp/non-it-salaryman/2017/11/29/csharp-undo-richtextbox/

    ご丁寧にありがとうございます。
    作成して頂いたコードですが拡張メソッド化したい場合、
    SelectionBold等がboolで宣言されてるのでこれをvoidに変えて
    みれば良いのでしょうか?


記事No.95068 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95085  Re[4]: CHARFORMATのデフォルトについて
□投稿者/ VisualC#初心者 -(2020/06/23(Tue) 01:15:55)
    No95084 (VisualC#初心者 さん) に返信
    > ■No95075 (魔界の仮面弁士 さん) に返信
    >>■No95069 (魔界の仮面弁士 さん) に返信
    >>>>文字を太文字にしてからまた元に戻すといった
    >>>>機能をもたせたいのですが,可能でしょうか?
    > >>No94964 のスレッドに回答したときに、そのためのコードも掲載しています。
    >>
    >>先のコードで使っている CHARFORMAT2 は、CHARFORMAT を拡張した物(構造体サイズが異なる)であり、
    >>使い方は殆ど一緒です。CHARFORMAT2 / CHARFORMAT どちらでも同じように書けます。
    >>
    >>また、『元に戻す』というのが、Ctrl+Z などの「アンドゥ」の話だとしたら、このあたりが参考になるかと思います。
    >>http://pineplanter.moo.jp/non-it-salaryman/2017/11/29/csharp-undo-richtextbox/
    >
    > ご丁寧にありがとうございます。
    > 作成して頂いたコードですが拡張メソッド化したい場合、
    > SelectionBold等がboolで宣言されてるのでこれをvoidに変えて
    > みれば良いのでしょうか?
    >
    >
    >

    拡張メソッドを扱うのが初めてなので、
    正直サンプルコードをどのように変更すれば良いのか分かりません。
    public static voidメソッド名とすれば良いのかは
    なんとなく分かったのですが、構造体のCHARFORMAT/CHARFOMAT2構造体
    の中身とどうリンクさせればいいか思いつかないです。

    何となく思ってみたのが、boolでフォント状態を判定できるSelectionBold等が
    あるので、これをpublic static vold メソッド(bool 引数)とし、引数にSelectionBold
    を渡してあげるといった感じでしょうか?

    ただ、メソッド内をどうすれば良いかが分からないので、ご教示頂けますと幸いです。

    宜しくお願い致します。
記事No.95068 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95086  Re[5]: CHARFORMATのデフォルトについて
□投稿者/ 魔界の仮面弁士 -(2020/06/23(Tue) 07:22:35)
    2020/06/23(Tue) 07:32:39 編集(投稿者)

    No95085 (VisualC#初心者 さん) に返信
    >>作成して頂いたコードですが拡張メソッド化したい場合、
    >>SelectionBold等がboolで宣言されてるのでこれをvoidに変えて
    >>みれば良いのでしょうか?

    プロパティを拡張メソッドに変更する場合、setter と getter を別々のメソッドとして提供することになります。

    たとえば DataRowExtensions では、
    DataRow に対するインデクサの読み書きを
    ジェネリックな拡張メソッドにするために、
    getter と setter のペアが用意されています。

    // getter 系の拡張メソッド
    public static T Field<T> (this DataRow row, string columnName)

    // setter 系の拡張メソッド
    public static void SetField<T> (this DataRow row, string columnName, T value)


    ※実際にはもっと多くのオーバーロードがあります。
    https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowextensions


    で、上記 SetField 拡張メソッドの実装は、
     row[column] = (object)value ?? DBNull.Value;
    となっています。


    > 構造体のCHARFORMAT/CHARFOMAT2構造体
    > の中身とどうリンクさせればいいか思いつかないです。
    先のサンプルでは、
     public bool SelectionBold
     {
      get => GetCharFormat_Masks().HasFlag(CFE.Bold);
      set => SetCharFormat_Masks(CFM.Bold, value ? CFE.Bold : CFE.None);
     }
    としていましたので、これを拡張メソッドにするなら、たとえば
     public static bool GetSelectionBold (this RichTextBox rtb) => GetCharFormat_Masks(rtb).HasFlag(CFE.Bold);
     public static void SetSelectionBold (this RichTextBox rtb, bool value) => SetCharFormat_Masks(rtb, CFM.Bold, value ? CFE.Bold : CFE.None);
    などとします。


    上記から呼ばれているヘルパーメソッドとなる
    private void SetCharFormat_Masks(CFM dwMask, CFE dwEffects)
    private CFE GetCharFormat_Masks()
    については、インスタンスメソッドから static メソッドに変更したうえで
    引数 RichTextBox rtb を追加しておき、元のサンプルで
     new HandleRef(this, Handle)
    としていた箇所を
     new HandleRef(rtb, rtb.Handle)
    と書き換えます。
記事No.95068 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95135  Re[6]: CHARFORMATのデフォルトについて
□投稿者/ Visual C#初心者 -(2020/06/25(Thu) 03:39:54)
    No95086 (魔界の仮面弁士 さん) に返信
    > 2020/06/23(Tue) 07:32:39 編集(投稿者)
    >
    > ■No95085 (VisualC#初心者 さん) に返信
    > >>作成して頂いたコードですが拡張メソッド化したい場合、
    > >>SelectionBold等がboolで宣言されてるのでこれをvoidに変えて
    > >>みれば良いのでしょうか?
    >
    > プロパティを拡張メソッドに変更する場合、setter と getter を別々のメソッドとして提供することになります。
    >
    > たとえば DataRowExtensions では、
    > DataRow に対するインデクサの読み書きを
    > ジェネリックな拡張メソッドにするために、
    > getter と setter のペアが用意されています。
    >
    > // getter 系の拡張メソッド
    > public static T Field<T> (this DataRow row, string columnName)
    >
    > // setter 系の拡張メソッド
    > public static void SetField<T> (this DataRow row, string columnName, T value)
    >
    >
    > ※実際にはもっと多くのオーバーロードがあります。
    > https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowextensions
    >
    >
    > で、上記 SetField 拡張メソッドの実装は、
    >  row[column] = (object)value ?? DBNull.Value;
    > となっています。
    >
    >
    >>構造体のCHARFORMAT/CHARFOMAT2構造体
    >>の中身とどうリンクさせればいいか思いつかないです。
    > 先のサンプルでは、
    >  public bool SelectionBold
    >  {
    >   get => GetCharFormat_Masks().HasFlag(CFE.Bold);
    >   set => SetCharFormat_Masks(CFM.Bold, value ? CFE.Bold : CFE.None);
    >  }
    > としていましたので、これを拡張メソッドにするなら、たとえば
    >  public static bool GetSelectionBold (this RichTextBox rtb) => GetCharFormat_Masks(rtb).HasFlag(CFE.Bold);
    > などとします。
    >
    >
    > 上記から呼ばれているヘルパーメソッドとなる
    > private void SetCharFormat_Masks(CFM dwMask, CFE dwEffects)
    > private CFE GetCharFormat_Masks()
    > については、インスタンスメソッドから static メソッドに変更したうえで
    > 引数 RichTextBox rtb を追加しておき、元のサンプルで
    >  new HandleRef(this, Handle)
    > としていた箇所を
    >  new HandleRef(rtb, rtb.Handle)
    > と書き換えます。

    ご回答ありがとうございます.
    なんとかメソッドとして実装できましたが,
    肝心のBold機能を実装したいです.

    >  public static void SetSelectionBold (this RichTextBox rtb, bool value) => SetCharFormat_Masks(rtb, CFM.Bold, value ? CFE.Bold : CFE.None);

    は恐らく太字の状態ならばデフォルトに戻す機能になって
    いると思うので,BoldをNone,NoneをBoldに変えてみましたが
    こちらも上手くいかないです.
    そもそもSetCharFormat_Masks自体の中身がよく理解できていないので,
    こちらも併せてご教示頂けますと幸いです.
記事No.95068 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95255  Re[7]: CHARFORMATのデフォルトについて
□投稿者/ Visual C#初心者 -(2020/07/07(Tue) 20:53:01)
    No95135 (Visual C#初心者 さん) に返信
    > ■No95086 (魔界の仮面弁士 さん) に返信
    >>2020/06/23(Tue) 07:32:39 編集(投稿者)
    >>
    >>■No95085 (VisualC#初心者 さん) に返信
    >>>>作成して頂いたコードですが拡張メソッド化したい場合、
    >>>>SelectionBold等がboolで宣言されてるのでこれをvoidに変えて
    >>>>みれば良いのでしょうか?
    >>
    >>プロパティを拡張メソッドに変更する場合、setter と getter を別々のメソッドとして提供することになります。
    >>
    >>たとえば DataRowExtensions では、
    >>DataRow に対するインデクサの読み書きを
    >>ジェネリックな拡張メソッドにするために、
    >>getter と setter のペアが用意されています。
    >>
    >>// getter 系の拡張メソッド
    >>public static T Field<T> (this DataRow row, string columnName)
    >>
    >>// setter 系の拡張メソッド
    >>public static void SetField<T> (this DataRow row, string columnName, T value)
    >>
    >>
    >>※実際にはもっと多くのオーバーロードがあります。
    >>https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowextensions
    >>
    >>
    >>で、上記 SetField 拡張メソッドの実装は、
    >> row[column] = (object)value ?? DBNull.Value;
    >>となっています。
    >>
    >>
    > >>構造体のCHARFORMAT/CHARFOMAT2構造体
    > >>の中身とどうリンクさせればいいか思いつかないです。
    >>先のサンプルでは、
    >> public bool SelectionBold
    >> {
    >>  get => GetCharFormat_Masks().HasFlag(CFE.Bold);
    >>  set => SetCharFormat_Masks(CFM.Bold, value ? CFE.Bold : CFE.None);
    >> }
    >>としていましたので、これを拡張メソッドにするなら、たとえば
    >> public static bool GetSelectionBold (this RichTextBox rtb) => GetCharFormat_Masks(rtb).HasFlag(CFE.Bold);
    >>などとします。
    >>
    >>
    >>上記から呼ばれているヘルパーメソッドとなる
    >> private void SetCharFormat_Masks(CFM dwMask, CFE dwEffects)
    >> private CFE GetCharFormat_Masks()
    >>については、インスタンスメソッドから static メソッドに変更したうえで
    >>引数 RichTextBox rtb を追加しておき、元のサンプルで
    >> new HandleRef(this, Handle)
    >>としていた箇所を
    >> new HandleRef(rtb, rtb.Handle)
    >>と書き換えます。
    >
    > ご回答ありがとうございます.
    > なんとかメソッドとして実装できましたが,
    > 肝心のBold機能を実装したいです.
    >
    >> public static void SetSelectionBold (this RichTextBox rtb, bool value) => SetCharFormat_Masks(rtb, CFM.Bold, value ? CFE.Bold : CFE.None);
    >
    > は恐らく太字の状態ならばデフォルトに戻す機能になって
    > いると思うので,BoldをNone,NoneをBoldに変えてみましたが
    > こちらも上手くいかないです.
    > そもそもSetCharFormat_Masks自体の中身がよく理解できていないので,
    > こちらも併せてご教示頂けますと幸いです.

    自己完結できたので解決策済みします.
    ありがとうございました。
記事No.95068 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95256  Re[8]: CHARFORMATのデフォルトについて
□投稿者/ Visual C#初心者 -(2020/07/07(Tue) 20:53:26)
    No95255 (Visual C#初心者 さん) に返信
    > ■No95135 (Visual C#初心者 さん) に返信
    >>■No95086 (魔界の仮面弁士 さん) に返信
    > >>2020/06/23(Tue) 07:32:39 編集(投稿者)
    > >>
    > >>■No95085 (VisualC#初心者 さん) に返信
    > >>>>作成して頂いたコードですが拡張メソッド化したい場合、
    > >>>>SelectionBold等がboolで宣言されてるのでこれをvoidに変えて
    > >>>>みれば良いのでしょうか?
    > >>
    > >>プロパティを拡張メソッドに変更する場合、setter と getter を別々のメソッドとして提供することになります。
    > >>
    > >>たとえば DataRowExtensions では、
    > >>DataRow に対するインデクサの読み書きを
    > >>ジェネリックな拡張メソッドにするために、
    > >>getter と setter のペアが用意されています。
    > >>
    > >>// getter 系の拡張メソッド
    > >>public static T Field<T> (this DataRow row, string columnName)
    > >>
    > >>// setter 系の拡張メソッド
    > >>public static void SetField<T> (this DataRow row, string columnName, T value)
    > >>
    > >>
    > >>※実際にはもっと多くのオーバーロードがあります。
    > >>https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowextensions
    > >>
    > >>
    > >>で、上記 SetField 拡張メソッドの実装は、
    > >> row[column] = (object)value ?? DBNull.Value;
    > >>となっています。
    > >>
    > >>
    >>>>構造体のCHARFORMAT/CHARFOMAT2構造体
    >>>>の中身とどうリンクさせればいいか思いつかないです。
    > >>先のサンプルでは、
    > >> public bool SelectionBold
    > >> {
    > >>  get => GetCharFormat_Masks().HasFlag(CFE.Bold);
    > >>  set => SetCharFormat_Masks(CFM.Bold, value ? CFE.Bold : CFE.None);
    > >> }
    > >>としていましたので、これを拡張メソッドにするなら、たとえば
    > >> public static bool GetSelectionBold (this RichTextBox rtb) => GetCharFormat_Masks(rtb).HasFlag(CFE.Bold);
    > >>などとします。
    > >>
    > >>
    > >>上記から呼ばれているヘルパーメソッドとなる
    > >> private void SetCharFormat_Masks(CFM dwMask, CFE dwEffects)
    > >> private CFE GetCharFormat_Masks()
    > >>については、インスタンスメソッドから static メソッドに変更したうえで
    > >>引数 RichTextBox rtb を追加しておき、元のサンプルで
    > >> new HandleRef(this, Handle)
    > >>としていた箇所を
    > >> new HandleRef(rtb, rtb.Handle)
    > >>と書き換えます。
    >>
    >>ご回答ありがとうございます.
    >>なんとかメソッドとして実装できましたが,
    >>肝心のBold機能を実装したいです.
    >>
    > >> public static void SetSelectionBold (this RichTextBox rtb, bool value) => SetCharFormat_Masks(rtb, CFM.Bold, value ? CFE.Bold : CFE.None);
    >>
    >>は恐らく太字の状態ならばデフォルトに戻す機能になって
    >>いると思うので,BoldをNone,NoneをBoldに変えてみましたが
    >>こちらも上手くいかないです.
    >>そもそもSetCharFormat_Masks自体の中身がよく理解できていないので,
    >>こちらも併せてご教示頂けますと幸いです.
    >
    > 自己完結できたので解決策済みします.
    > ありがとうございました。
記事No.95068 のレス / END /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -