【C#】フォーム右下のリサイズ用アイコンを消す

以下の図のような右下に表示されるアイコンを消したい。

表示を消すだけで良ければ、フォームのデザイナから、SizeGripStyleプロパティを「Hide」に設定する。

そもそも、サイズ変更させる必要がない場合は、FormBorderStyleをFixedSingleやFixed3DなどのFixed系にすればこのアイコンは表示されなくなる。

 

【C#】自動で折り返された分を含む行数を取得する

テキストボックスでWordWrapをTrueにしている場合など、右端に来た場合に自動で折り返された際には、もともとの文字列内に存在していた改行数と実際に見える行数が一致しない。

この場合は、RichTextBoxのGetLineFromCharIndexを利用すると実際に表示された行数を取得できる。

richTextBox1.GetLineFromCharIndex(richTextBox1.TextLength);

※例えば、以下の例では文字列中には改行は存在せず、RichTextBoxの幅にあわせて折り返されて見た目は3行だが、GetLineFromCharIndexは2が返ってくる。

 

【C#】コントロールの位置を計算して画面中央に表示させる

以下のように、LeftとTopを変更すればOK

//横軸の中央に移動させる
control.Left = (this.ClientSize.Width - control.Width) / 2;

//縦軸の中央に移動させる
control.Top = (this.ClientSize.Height - control.Height) / 2;

※this.Widthやthis.Heightを使うと計算しても中央にならないので、this.ClientSize.Widthとthis.ClientSize.Heightを利用すること

 

【C#】DateTimePickerで日付と曜日を表示する

DateTimePickerの表示形式にて、「2022/02/21 月」のように日付と曜日を表示させることができる。

コントロールのプロパティで、Formatを「Custom」にし、CustomFormatを「yyyy/MM/dd ddd」と変更する。
※FormatをCustomに変更しないと、反映されないので注意!

yyyy/MM/dd ddd とすると、以下の表示になる。

yyyy/MM/dd dddd とすると、以下の表示になる。

 

 

【C#】Windowsの環境変数の値を取得する

コマンドプロンプトでsetコマンドを実行した際と同じ値をC#で取得する場合のコードは以下の通り(実際に試して値が一致したことを確認した)

echo %APPDATA% と同じ結果

Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));

取得される値:C:¥Users¥(ユーザー名)¥AppData¥Roaming

echo %LOCALAPPDATA% と同じ結果

Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));

取得される値:C:¥Users¥(ユーザー名)¥AppData¥Local

echo %USERPROFILE% または echo %HOMEDRIVE%%HOMEPATH% と同じ結果

Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile));

取得される値:C:¥Users¥(ユーザー名) 

 

【C#】PictureBoxに画像をドラッグ&ドロップできない

原因

  1. AllowDropがtrueになっていない。
    フォームロードで「this.pictureBox1.AllowDrop = true;」を記載する
  2. Visual Studioを管理者で起動している。
    以下のようにタスクバーに「(管理者)」と記載されている場合は、ドラッグ&ドロップできない。一般ユーザーでVisual Stdioを起動すればOK。

【C#】XMLの予約語をエスケープする&元に戻す

エスケープする際には

System.Security.SecurityElement.Escape("<aaa>");

を利用する。

エスケープされた文字列を元に戻すには

System.Net.WebUtility.HtmlDecode("&lt;aaa&gt;");

を利用する。

違うクラスなので不安になるが、少なくともエスケープが必要な次の4つの文字

< > ” ‘ 

で問題なくデコードされた。

 

【C#】.NET Framework4.8から.NET 5へ移行(Windowsフォーム)

手順

  1. Visual Studio 2019インストール
  2. slnファイルが存在するフォルダをWindowsエクスプローラで開く
  3. Windowsエクスプローラのアドレスバーにcmdと入力してEnterキー押下
  4. try-convert -w hoge.sln と入力してEnterキー押下
  5. 以下のメッセージが表示されればコンバートは完了
    C:\~\hoge.csproj contains an App.config file. App.config is replaced by appsettings.json in .NET Core. You will need to delete App.config and migrate to appsettings.json if it’s applicable to your project.
    Conversion complete!
  6. App.configは不要とのことなので削除。hoge.csproj.oldファイルが作成されていたのでそれも削除した。
  7. hoge.slnをダブルクリックしてVisual Studioを起動。F5キー押下でアプリが起動できることを確認。
  8. このままだと何故かWindowsフォームのデザイナが表示されないため、プロジェクトの新しい項目の追加から、「フォーム(Windowsフォーム)」を追加する。
    少し待つと、元々あったフォームがデザイナ表示できるようになる。この状態になれば追加したフォームは削除してOK。移行完了!

 

感想

コンバートツールを利用するだけで.NET 5に移行できたが、これまでの.NET Frameworkのバージョンを上げるような手軽さではなく、完全な互換性もなさそうなので、移行する際には十分な検証が必要になるはず。

特に今回は小規模なプロジェクトで試したが、より複雑なものであれば失敗するかもしれない。
.NET Framework から .NET への移植の概要に移行できないパターンも記載されているのでそちらも参照のこと。

【C#】【WooCommerceNET】woocommerce_rest_cannot_viewエラーが発生する

環境

  • WordPress 5.7.2
  • WooCommerce 5.5.1
  • WooCommerceNET 0.8.3
  • Visual Studio 2019 C#

エラー内容

{
  "code": "woocommerce_rest_cannot_view",
  "message": "リソースをリストすることはできません。",
  "data": {
    "status": 401
  }
}

対処

new RestAPI()の第4引数にfalseを指定したところ、エラーが発生しなくなった。

以前は未指定(デフォルトのtrue)で問題なく使えていたので原因不明。
ここにたどり着くまでに時間がかかったのでメモとして残しておく。

【C#】正規表現で、1文字ずつタブを挿入する

//1文字ずつ、タブ(\t)を挿入する
System.Text.RegularExpressions.Regex.Replace("123456789", "(.+?)", "$1\t");

//実行結果(各数字の後にタブが挿入されている)
1	2	3	4	5	6	7	8	9	
  • “123456789”
    元の文字列
  • “(.+?)”
    検索条件(任意の1文字をヒットさせる)
  • “$1\t”
    置換条件($1=ヒットした文字が入る。\t=タブ記号)