【C#】BitmapのSave()を呼び出すとSystem.ArgumentException: 使用されたパラメーターが有効ではありません。エラーが発生する

エラーになるコード(一部のみ抜粋)

        using (MemoryStream ms = new MemoryStream())
        {
            bitmap.Save(ms, ImageFormat.Png);

エラー内容

System.ArgumentException: ‘使用されたパラメーターが有効ではありません。’

原因

このエラーになるコードの前に、bitmapをusingを使って作成していたためだった。。

bitmapはnullにはなっていないが、Saveを呼び出すと上記エラーとなった。
usingを止めたところ、エラーが解消された。

 

【C#】AutoScrollが表示されているか確認する

フォームのAutoScrollを有効にしている場合に、実際にスクロールバーが表示されているかは以下のプロパティで取得できる

//右端のスクロールバーが表示されているか
Console.WriteLine(this.VerticalScroll.Visible);

//下のスクロールバーが表示されているか
Console.WriteLine(this.Horizo​​ntalScroll.Visible);

 

 

 

【C#】フォームのサイズを変更した際に、Paintでうまく描画されない

フォームのPaintイベントで背景などを描画している場合、フォームのサイズを変更した際に、Paintがうまく描画されない場合がある。

この場合、フォームのDoubleBufferedを確認する。Trueになっていれば、Falseにすれば正しく描画されるようになった。

 

【C#】列挙体で複数の値を選択する

動作確認

Visual Studio 2017 C#

列挙体の定義

[Flags]
private enum EnumSample
{
    //項目が混じらないように、それぞれ立てるビットの位置を変える
    a = 0b0001,     //「0b」から始めると2進数で書ける
    b = 0b0010,
    c = 0b0100,
    d = 0b1000
}

使い方

//aとcを選択する
var sample = EnumSample.a | EnumSample.c;

//選択されているかはHasFlagを利用して確認する
if (sample.HasFlag(EnumSample.a))
{
    //こっちに来る
    Console.WriteLine("aは存在");
}
else
{
    //こっちには来ない
    Console.WriteLine("aは未存在");
}

//どの項目が選択されているかを確認したい場合は、列挙体の全項目を回してチェックできる
foreach (EnumSample enumValue in Enum.GetValues(typeof(EnumSample)))
{
    Console.WriteLine($"{enumValue} = " + sample.HasFlag(enumValue));
    /*
     * 実行結果
     * a = True
     * b = False
     * c = True
     * d = False
     */
}

【C#】【Linq】ファイル名の昇順に並べたリストを作成する

目的

ファイル名が「file1.txt」「file2.txt」「file10.txt」などの規則性がある場合に、正しくソートしたい場合を想定。 今回は、ファイル名中の数値のみを正規表現で取得し、それをソートすることで実現した。

ソースコード

var fileList = (new DirectoryInfo(filePath)).GetFiles().
    Select(x =>
    new
    {
        name = x.FullName,
        //ファイル名だけ取り出す→数字だけ残す→数値に変換する(ソート用)
        no = int.Parse(Regex.Replace(Path.GetFileName(x.FullName), @"[^0-9]", ""))
    }
    ).OrderBy(x => x.no).ToList();

【Windowsアプリ】ConvertCRLF

2020/08/05 v1.0.0

テキストファイルの改行コードをCRLFに変換するコンソールアプリです(GUI画面はありません)

ConvertCRLF.exeにテキストファイルをドラッグ&ドロップすると、
変換を行います。
※ファイルを上書き保存しますので、バックアップを予め取得しておいてください!元に戻せません。

コマンドプロンプトからは、引数の1番目にテキストファイルパスを指定すれば実行できます。
例)
ConvertCRLF.exe “C:temphoge.txt”

戻り値)
0:正常終了(変換成功)
1:異常終了(変換失敗。エラー詳細はコンソール出力を参照)

ダウンロード

ダウンロード(13KB)
※ダウンロード後、Zipファイルを解凍する前に、ファイルを右クリックして「ブロックを解除」してください。