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

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

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

Re[3]: 半角/全角スペースの可視化


(過去ログ 136 を表示中)

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

■80163 / inTopicNo.1)  半角/全角スペースの可視化
  
□投稿者/ ふたも (1回)-(2016/06/17(Fri) 10:02:14)

分類:[C#] 

はじめて投稿させてもらいます。

VS2005 C# WindowsFormアプリケーション

プログラム実行中にDataGridViewの特定TextBoxColumnで、
半角と全角スペース入力箇所を可視化したいです。

イメージとしては、VSの場合、IDE操作で編集メニュー>>詳細>>スペース表示でコード上に表示される・のようなものです。
秀丸エディタやサクラエディタの場合、□表示です。

可能であれば、半角と全角スペースの区別をわかりやすくするために、
小さい四角と大きい四角で表示できたらと思います。


他エディタ同士でのコピー&ペースト時は、同じスペースとして扱われているようなので、
表示だけの問題と思いますが、やり方に検討が付きません。

ご教授よろしくお願いいたします。

引用返信 編集キー/
■80165 / inTopicNo.2)  Re[1]: 半角/全角スペースの可視化
□投稿者/ King (5回)-(2016/06/17(Fri) 10:35:57)
私の場合は自力で描画していますね。
等幅フォントじゃないと計算が大変なんで等幅フォント限定で対応しています。
引用返信 編集キー/
■80166 / inTopicNo.3)  Re[1]: 半角/全角スペースの可視化
□投稿者/ WebSurfer (941回)-(2016/06/17(Fri) 10:41:26)
No80163 (ふたも さん) に返信

DataGridView.CellFormatting イベントのハンドラで空白を希望の文字に書き換える
という方法はいかがですか?

DataGridView.CellFormatting イベント
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellformatting(v=vs.100).aspx
引用返信 編集キー/
■80167 / inTopicNo.4)  Re[2]: 半角/全角スペースの可視化
□投稿者/ ふたも (3回)-(2016/06/17(Fri) 11:33:22)
No80165 (King さん) に返信
> 私の場合は自力で描画していますね。
> 等幅フォントじゃないと計算が大変なんで等幅フォント限定で対応しています。

Kingさん>
案ありがとうございます。
やはり簡単にはいかないのですね・・・

現在MS UI Gothicを使用しているので、ちょっと大変そうですね。
等幅フォントを変えたいのですが、隣に対象外のTextBoxColumnがあるので悩みます。
区別をするためにフォントが違うという事で良さそうですが。
確認も大変そうだし等幅フォント案が無難そうですね。




引用返信 編集キー/
■80168 / inTopicNo.5)  Re[2]: 半角/全角スペースの可視化
□投稿者/ ふたも (4回)-(2016/06/17(Fri) 12:00:38)
No80166 (WebSurfer さん) に返信
> ■No80163 (ふたも さん) に返信
>
> DataGridView.CellFormatting イベントのハンドラで空白を希望の文字に書き換える
> という方法はいかがですか?
>
> DataGridView.CellFormatting イベント
> https://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellformatting(v=vs.100).aspx

WebSurferさん>
案ありがとうございます。
試してみて空白を希望文字に書き換えれたのですが、
希望文字に変えるので、そこは文字として扱われますよね・・・
情報不足で申し訳ないのですが、
そのTextBoxColumnの内容をコピーして別のColumnへペーストしたりするので、
その際に、再度変換処理しないといけないので難しですよね

引用返信 編集キー/
■80169 / inTopicNo.6)  Re[3]: 半角/全角スペースの可視化
□投稿者/ WebSurfer (942回)-(2016/06/17(Fri) 12:44:22)
No80168 (ふたも さん) に返信

> そのTextBoxColumnの内容をコピーして別のColumnへペーストしたりするので、
> その際に、再度変換処理しないといけないので難しですよね

先に紹介した方法ではそうせざるを得ないですね。

それをしなくてもいい方法としては、思いつきですが、以下のようにもできると思います。

下のコードは、昔、ある列の文字のみハイパーリンクのように見せるため作ったサンプルです。
それに半角空白を□に置き換えるコードを追加しています。

こうすると初期画面での表示は、例えば Ana□Trujillo□... というようになりますが、それ
をクリックすると元の文字列 Ana Trujillo Emparedados y helados が表示されるので、右ク
リックしてそれをコピーするということはできます。

private void customersDataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    // CompanyName 列の DataGridViewTextBoxColumn を書き換え。
    // 当然、マウスポインタは指型にならないし、クリックしても変化なし
    if (this.customersDataGridView.Columns["dataGridViewTextBoxColumn2"].Index == e.ColumnIndex && e.RowIndex >= 0)
    {
        using (
            Brush gridBrush = new SolidBrush(this.customersDataGridView.GridColor),
            backColorBrush = new SolidBrush(e.CellStyle.BackColor))
        {
            using (Pen gridLinePen = new Pen(gridBrush))
            {
                // Erase the cell.
                e.Graphics.FillRectangle(backColorBrush, e.CellBounds);

                // Draw the grid lines (only the right and bottom lines;
                // DataGridView takes care of the others).
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                    e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom - 1);
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                    e.CellBounds.Top, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom);

                Font font = new Font(e.CellStyle.Font, FontStyle.Underline);

                StringFormat format1 = new StringFormat() { 
                    FormatFlags = StringFormatFlags.NoWrap, 
                    Alignment = StringAlignment.Near, 
                    LineAlignment = StringAlignment.Center, 
                    Trimming = StringTrimming.EllipsisCharacter };

                // Draw the text content of the cell, ignoring alignment.
                if (e.Value != null)
                {
                    //e.Graphics.DrawString((String)e.Value, font,
                    //    Brushes.Blue, e.CellBounds.X + 2,
                    //    e.CellBounds.Y + 2, StringFormat.GenericDefault);

                    // わんくま掲示板の検証用
                    String s = (String)e.Value;
                    e.Graphics.DrawString(s.Replace(' ', '□'), font,
                        Brushes.Blue, e.CellBounds, format1);

                    //e.Graphics.DrawString((String)e.Value, font,
                    //    Brushes.Blue, e.CellBounds, format1);
                }
                e.Handled = true;
            }
        }                
    }
}

引用返信 編集キー/
■80170 / inTopicNo.7)  Re[4]: 半角/全角スペースの可視化
□投稿者/ ふたも (5回)-(2016/06/17(Fri) 14:32:33)
No80169 (WebSurfer さん) に返信
> ■No80168 (ふたも さん) に返信
>
> 下のコードは、昔、ある列の文字のみハイパーリンクのように見せるため作ったサンプルです。
> それに半角空白を□に置き換えるコードを追加しています。

再度ありがとうございます。
ハイパーリンク風の下線や青色はやめるなどして試してみましたら、
そのような動作致しました!

しかし、編集中の表示でもスペース表示はしないとダメそうなので、
描画するしかなさそうです・・・
この場合、CellValueChangedイベントでの処理という事になるのでしょうか?
おわかりでしたら回答お願いいたします。

CellPaintingの実装は初めてなので、また調べてみます。

引用返信 編集キー/
■80171 / inTopicNo.8)  Re[5]: 半角/全角スペースの可視化
□投稿者/ WebSurfer (943回)-(2016/06/17(Fri) 15:42:47)
No80170 (ふたも さん) に返信

> しかし、編集中の表示でもスペース表示はしないとダメそうなので、

個人的には、不可能とは言わないまでも無理だと思います・・・が、自分が知らないだけ
という可能性も否定し切れません。

お役に立てずすみませんが、他の回答者の方の回答をお待ちください。
引用返信 編集キー/
■80172 / inTopicNo.9)  Re[6]: 半角/全角スペースの可視化
□投稿者/ daive (119回)-(2016/06/18(Sat) 09:24:24)
2016/06/18(Sat) 09:30:09 編集(投稿者)

参考になるかどうか不明ですが、
OpenSource Editor の名称などで、スペース 可視化 などで検索されると、
ソースコードは、見つかるかもしれません。

検索例
「ATOM ソース」
https://www.google.co.jp/search?hl=ja&q=Atom+%E3%82%BD%E3%83%BC%E3%82%B9&lr=lang_ja&gws_rd=ssl
Eclipse 空白文字 改行コード Tab 表示
https://www.google.co.jp/search?hl=ja&q=Atom+%E3%82%BD%E3%83%BC%E3%82%B9&lr=lang_ja&gws_rd=ssl#lr=lang_ja&hl=ja&tbs=lr:lang_1ja&q=Eclipse+%E7%A9%BA%E7%99%BD%E6%96%87%E5%AD%97+%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89+Tab+%E8%A1%A8%E7%A4%BA

ATOM は半角スペース表示、非表示設定が可能な様子。
Eclipse は細かい設定が可能な様子。
ソースが公開されているエディタは、ありますので、
探してみてください。
引用返信 編集キー/
■80183 / inTopicNo.10)  Re[7]: 半角/全角スペースの可視化
□投稿者/ ふたも (6回)-(2016/06/20(Mon) 09:41:45)
No80172 (daive さん) に返信
> 2016/06/18(Sat) 09:30:09 編集(投稿者)
>
> 参考になるかどうか不明ですが、
> OpenSource Editor の名称などで、スペース 可視化 などで検索されると、
> ソースコードは、見つかるかもしれません。
>
> 検索例
> 「ATOM ソース」
> https://www.google.co.jp/search?hl=ja&q=Atom+%E3%82%BD%E3%83%BC%E3%82%B9&lr=lang_ja&gws_rd=ssl
> Eclipse 空白文字 改行コード Tab 表示
> https://www.google.co.jp/search?hl=ja&q=Atom+%E3%82%BD%E3%83%BC%E3%82%B9&lr=lang_ja&gws_rd=ssl#lr=lang_ja&hl=ja&tbs=lr:lang_1ja&q=Eclipse+%E7%A9%BA%E7%99%BD%E6%96%87%E5%AD%97+%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89+Tab+%E8%A1%A8%E7%A4%BA
>
> ATOM は半角スペース表示、非表示設定が可能な様子。
> Eclipse は細かい設定が可能な様子。
> ソースが公開されているエディタは、ありますので、
> 探してみてください。

daive さん>返信遅れて申し訳ありません。
参考ありがとうございます。
エディタの設定はたくさん出てくるのですが、
なかなか見つかりませんね・・・探し方が悪いと思うのですが・・・

他のコードを解析してC#に移植するのが、
結構大変そうなので、一旦描画にて対応したいと思います。


引用返信 編集キー/
■80185 / inTopicNo.11)  Re[1]: 半角/全角スペースの可視化
□投稿者/ ふたも (7回)-(2016/06/20(Mon) 09:44:38)
他にも調べないといけないのですが、
描画実装して見てもらう事にします。

ひとまず解決済みとさせて頂きたいと思います。
みなさん、お忙しいところ、ありがとうございました。
解決済み
引用返信 編集キー/
■80193 / inTopicNo.12)  Re[2]: 半角/全角スペースの可視化
□投稿者/ daive (120回)-(2016/06/20(Mon) 14:54:41)
見つからないとの事なので、
時間の取れる時に、参考にしてください。

atom/atom
https://github.com/atom/atom

atom:検索例です。
https://github.com/search?utf8=%E2%9C%93&q=atom&type=Repositories&ref=searchresults

Eclipse:検索例です。
https://github.com/search?utf8=%E2%9C%93&q=Eclipse

Eclipse であれば、まずは、ここからかも。
Home / Eclipse Wiki / Git
http://wiki.eclipse.org/Git


解決済み
引用返信 編集キー/
■80198 / inTopicNo.13)  Re[3]: 半角/全角スペースの可視化
□投稿者/ 通りすがり (1回)-(2016/06/21(Tue) 13:19:14)
TTFか何かのフォントを2種類用意して一方のフォントはスペースの文字コードは描画という形すれば文字コードの変更無しでフォントの切り替えだけで表示出来るのでは?
いっそスペースや改行コード専用のfont作ってそちらで細かく切り替えでも良いかもですね。
スレチならごめんなさい


引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -