WPF:数値しか受け付けないテキストボックスの作り方

やりたいこと

 wpfで数値のみしか受け付けないテキストボックスを作りたい

答えへのリンク

qiita.com
 これを読めばOK。

ほぼコピペだが要点を記載

 PreviewTextInputで入力前に文字列を取得し、RegexクラスのIsMatch静的メソッドで数値かどうかを判定、数値以外ならば入力をキャンセル(e.Handlerにfalseを代入)。数値しか受け付けないテキストボックスは一つのユーザーコントロールに複数配置することが多いので、ここではsenderから文字列を取ることにして、複数のテキストボックスのPreviewTextInputにこのイベントを登録している。

using System.Text.RegularExpressions;

        Regex regex = new Regex("[^0-9.]+");
        private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            var text = ((TextBox)sender).Text + e.Text;
            e.Handled = regex.IsMatch(text);
        }

はてなブログで、①見出しを付ける ②プログラムのコードを記載する ③番号付きリストの番号がリセットされる ④キーワードリンクを削除する などについて

アブストラク

 はてなブログを少しだけ使ってみた。全体的にユーザーフレンドリーで、大した知識がなくても使える感じはよかった。よく使いそうな機能、わかりづらいポイントなど、現時点での感想をまとめた。

  1. 見出しを付けよう
  2. コードを記載する方法と、シンタックスハイライトに対応している言語一覧
  3. 番号付きリストが使いづらい
  4. キーワードリンクが鬱陶しい

見出しを付けよう

 デザインがデフォルトの状態で、「見たまま」編集をしているとofficeのwordを使っている感覚で(htmlの知識がなくても)ページを編集できる。この、「デザインがデフォルトの状態」で編集していると、見出しを付けてもメリハリがついているように感じなかったので、正直どうなの??と思っていた。が、ブログのデザインを変更すれば見出しを好みのタイプに変更できるので、見出しはちゃんとつけておきましょう。

プログラムのコードを記載する

 はてな記法、もしくはMarkdown記法で記載すると、比較的簡単によく見る感じの見た目がソースコードっぽいやつを記載できる。方法は例えば以下のサイト参照。
【はてなブログ】ソースコードを貼り付ける方法!(言語名&行番号表示) - 黒木ノ水岩
いろいろと書いてあってすべて理解するのがひたすらめんどい大変だが、自分ルールとして、

  • ブログの記事を執筆開始する際に、「はてな記法」で書き始める
  • 「>|言語名| ~コードの中身~ ||<」でコードを記入する

ことにする。「見たまま」編集では後から変更するのが面倒(できない?)らしい。また、このままだと行番号や言語名が表記されない、クリックでコードがコピーできないなど、いろんな機能がないシンプルなモードとなる。カスタマイズしたければ上記のサイトなどを参照すべし。
 また、シンタックスハイライトに対応している言語名の一覧は下記のサイト参照。
ソースコードを色付けして表示する(シンタックスハイライト) - はてなブログ ヘルプ
自分がよく使いそうなのは、c, cs, xml あたり。|言語名|のところに記載する文字は、c#ならばcs。xamlはなくxmlだった。
書き方の例
>|cs|
//ここにコードを書く
||<

番号付きリストの番号がリセットされる

 なんだこれ、なんでリセットされるんだ。はてな記法で書いていると、「シフト+エンター」での改行ができていない??のか、新しい段落が始まってしまい、番号がリセットされてしまうことがある。番号付きリストの途中でソースコードを入れると、「シフト+エンター」による改行ではうまくいかない。
対策として、素直にhtmlで記載する(<ol><li></li></ol>で書く)ことにする。下記のサイトを参考。
はてなブログに番号付きリストを表示したい - kimamamemo

キーワードリンクを削除する

 無料版ではできないらしい(下線を消すことはできる)。昔からあったこの鬱陶しい誰得な機能、無料版では削除できないらしい。このリンクが嫌でよくブラウザバックしたり、はてなブログを検索から除外したりしてたなぁ。。。最近は見た目の主張が小さくなって、少しはマシな気がするが、逆に誤クリックを誘発するステルス性を持ってしまったともいえる。はてなの辞書??かなんかのアクセス数稼ぎなのでしょうか??
 下線を消すには下記参照。
はてなブログのキーワードリンク下線を消す方法 - Random Life Blog
やり方を抜粋すると、ブログの基本画面->デザイン->カスタマイズ(スパナのアイコン)->デザインcssに下記のcssを追加することで下線が消える

/* 邪魔なキーワード下線を消す */
a.keyword {
    border: 0 !important;
    text-decoration: none !important;
    pointer-events: none !important;
    cursor: default;
    color: #5A5A5A;
}

Visual Studio:WPFのxamlでProperties.Settings.Defaultの値をバインド

アブストラク

 Xamlから設定の値をバインドする方法のメモ。

 例えばテキストボックスのテキストなどを設定のstringへ保存しておけば、アプリケーションを再起動した際、終了直前に記入してあった文字を復元することができる。この時、バインドしておけば、WindowのClosingイベント時にアプリケーションの設定を保存するだけでよくなる。

方法

 雑にほかサイトのURLをコピペ。

 バインド方法は下記のサイトを参照

yoshinorin.net

 アプリケーションの設定については下記のサイトを参照

dobon.net

その他

 一応自分でもコードを記載しておく。以下ではテキストボックス(TextBox1)のテキストを設定のTextValue1にバインドする。

  1. ソリューションエクスプローラーのProperties -> 設定にアプリケーションのプロパティ設定を追加(名前はTextValue1、種類はstring、値は何でもよい)
  2. 名前空間を宣言

    xmlns:prop ="clr-namespace:アプリケーションのフォルダ名.Properties"
    

  3. バインド

    <TextBox
       Name="TextBox1"
       Text="{Binding Path=TextValue1, Source={x:Static prop:Settings.Default}}" />
    

  4. WindowのClosingイベントにSaveを追加。(保存のタイミングはいつでも良い)

    private void MainWindow_Closing(object sender, CancelEventArgs e)
    {
        Properties.Settings.Default.Save();
    }
    


Visual Studio:ソリューションやプロジェクトをコピーする方法

アブストラク

 Visual Studioのソリューションやプロジェクトをコピーして、別のアプリケーションとして開発を進めたい場合の手順についてのメモ。

 機能が少なく、追加nugetパッケージなどをすべて把握しているアプリケーションならば作り直すのもやぶさかではない。だが、よくわからないがネットの情報を読み漁りながら作っていたり、試行錯誤を繰り返した挙句できたがったものなどはそうもいかない。少なくとも自分はレベルが低く、日常的に開発しているわけでもない。アプリを作った際、たとえその時その場では内容を理解していたとしてもどうせすぐに忘れるし、もう一度ググったり思い出すのもめんどくさい。なので、よく使う機能を備えたものを派生させて使いたい場合なんかは、コピーして使いまわしたい。

 以下の変更を行うことでアプリを別物として開発を進めると気分がよい。

  • ソリューションファイルが含まれるフォルダをコピー
  • gitリポジトリが登録されている場合は削除
    隠しフォルダの.gitを削除したら(多分)消すことができる
  • ソリューション名やプロジェクト名を変更する

Gitの機能を使えばもっとスマートにいくのか?ということがよく分かっていない。

方法

 ソリューション名やプロジェクト名を変更する場合は以下のリンクを参考に。

www.atmarkit.co.jp

自分のために手順をまとめると、

  1. visual studioのソリューションエクスプローラー上から、ソリューション名とプロジェクト名を変更
  2. .csprojファイルが含まれるフォルダの名前を変更。さらに.slnファイルをメモ帳などで開き、csprojファイルが含まれるフォルダの名を、変更のパスとなるように修正して上書き保存
  3. 最後に、アセンブリ名や名前空間を変更する。ソリューションエクスプローラーのPropertiesをダブルクリックして表示したアプリケーションのプロパティから、アセンブリ名と既定の名前空間を新しい名前に変更。
  4. 検索と置換で古いアセンブリ名などを新しい名前置換する。対象をソリューション全体にして、すべ置換によって置き換える

以上でいったんデバッグを開始してみて、問題なく動いたらOK。

その他

 今回このメモを残すときにコピーしたプロジェクトは

  • MaterialDesing, MetroWindowを導入して見た目を調整済
  • RS232C通信の確立と任意コマンド送受信
  • タイマーイベントで通信により得られたデータ列のバッファリング
  • ChartControlを使ったリアルタイムグラフ描画(各軸の極限値の動的な変更など、簡単な機能をもつ)
  • 結果をエクセルファイルへ保存

といったもの。モニターとして使い勝手がよく、めっちゃ使う。何日も文句言わずに動いてくれるし。また、ドライバの駆動や、PIDによるフィードバック制御だったりは、これを発展させて簡単に作れるし。