【C#】特定の文字列で分割する【Split】

文字列「a,,,b,,,c」があるとき、「,,,」で分割して「a」と「b」と「c」を得たい場合は、Splitを利用する

string s = "a,,,b,,,c";

string[] values = s.Split(new string[] { ",,," }, StringSplitOptions.None);

結果

values[0] = “a”;
values[1] = “b”;
values[2] = “c”;

となる。

VB.NETのSplitより書き方が面倒・・・

【C#】StreamReaderにて、「System.ArgumentException: パスに無効な文字が含まれています。」が発生する

<エラー内容>

System.ArgumentException: パスに無効な文字が含まれています。

場所 System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
場所 System.IO.Path.GetFileName(String path)
場所 System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
場所 System.IO.StreamReader..ctor(String path, Encoding encoding)

<原因>

引数で渡すパスの前後にダブルクォーテーション(“)が記載されていたために発生した(パス自体を設定ファイルから読み込んだものを使用していたため気付くのが遅れた)。

【C#】【WindowsForms】ボタンを元の色に戻す

一度でも変更してしまうと、以下の2つのプロパティを設定しないと元に戻らない。

//ボタンの色を消す
button.BackColor = Color.Empty; //ボタンの色を変えるとfalseが設定されるため、
//既定(true)にしてスタイルを戻す
button.UseVisualStyleBackColor = true;

 

【C#】構成システムを初期化できませんでした。エラーが発生する

<エラー内容>

System.Configuration.ConfigurationErrorsException: ‘構成システムを初期化できませんでした。’

内部例外
ConfigurationErrorsException: config ファイルにつき 1 つの <configSections> 要素のみが許可されます。要素が存在する場合、ルート <configuration> 要素の最初の子でなければなりません。

<原因>

App.configファイルに、<configSections>を追加した際、既に存在していた<startup>よりも後に記載したところ、上記エラーが発生。

<configuration>の開始タグ直後に、<configSections>を移動したところエラーは出なくなった。

(良く分からないが、この仕様は変なのでは???)

【C#】FormまたはButtonのClickイベントが発生しない場合(管理者権限で実行していないか?)

ここでは一例です。他にも原因があるかもしれません。

<現象>

Win32 APIのSendInputを利用してマウス操作を自動化して、FormやButtonのクリックを試したが、マウスカーソルの移動はできるが、クリックイベントが来なかった。

<原因>

クリックしたいFormが管理者権限になっており、通常権限にしたところクリックできるようになった。

(C#は直接は関係ない話だと思います・・・)

【VB.NET】RSS読み込み時、「リモート パーティがトランスポート ストリームを終了したため、認証に失敗しました。」が発生する

■現象

電光ニュースのYahooのRSS読み込み時、「System.Net.WebException: 接続が切断されました: 送信時に、予期しないエラーが発生しました。。 —> System.IO.IOException: リモート パーティがトランスポート ストリームを終了したため、認証に失敗しました。」エラーになる現象を確認。

YahooがTLS1.2より前のプロトコルに対応しなくなったことが原因。

■対応

TLS1.2を有効にするため、.NET Framework4から4.6に上げた後、RSS取得処理の前に、

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

を追加したところ、エラー無く取得できるようになった。

【UWP】WindowsFormとの対応表

WindowsFormUWP
クリックイベントprivate void button_Click(object sender, EventArgs e)private void button_Click(object sender, RoutedEventArgs e)
ラベルコントロールLabelTextBlock
コントロール表示control.Show()control.Visibility = Visibility.Visible
コントロール非表示control.Hide()control.Visibility = Visibility.Collapsed
テキストボックスクリアtextBox.Clear()textBox.Text = “”
テキストボックスKeyDownイベントprivate void textBox_KeyDown(object sender, KeyEventArgs e)private void textBox_KeyDown(object sender, KeyRoutedEventArgs e)
TextBoxの最終行へスクロールhttps://dobon.net/vb/dotnet/control/tbscrolltolast.htmlhttps://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867
タイマーTimerコントロールDispatcherTimerコントロール
タイマーTickイベントprivate void timer_Tick(object sender, EventArgs e)private void timer_Tick(object sender, object e)
EntityFrameworkEntityFrameworkMicrosoft.EntityFrameworkCore

プロジェクトのターゲットの最小バージョンをWindows 10 Fall Creators Updateに上げないと、NuGetから入れられない

SQLiteSystem.Data.SQLiteMicrosoft.EntityFrameworkCore.Sqlite

SqliteConnectionやSqliteCommandのようにSQLiteの表記が先頭以外小文字になっているので注意

SQLite新規ファイル作成SQLiteConnection.CreateFile(“ファイル名”);CreateFileが無くなっていた・・・
アクセスするだけで、0KBのファイルが作成された。
フォルダ名を指定せずにファイル作成カレントディレクトリに作成されるWindows.Storage.ApplicationData.Current.LocalFolder.Path

例)C:\Users\ユーザ名\AppData\Local\Packages\xxxxx-xxxxx-xxxxx-xxxxx_xxxxx\LocalState