全般

string.CompareTo

実際は、string.Compare(a, b, StringComparison.CurrentCulture)と同義
string.Compare(a, b, StringComparison.Ordinal)または、string.CompareOrdinalを使った方が無難。
特に

var listStr = new List<string>();

for(int i=0; ' ' + i <= '~'; i++)
{
  char c = (char)(' ' +i);
   listStr.Add(new string(c, 1));
}

Action<List<string>> print = (list) =>
{
  foreach (string s in list)
   {
       System.Diagnostics.Debug.Write(s);
   }
   System.Diagnostics.Debug.WriteLine(""); 
};

listStr.Sort(delegate(string a, string b) { return a.CompareTo(b); });
print(listStr);
結果:'- !"#$%&()*,./:;?@[]^_`{|}~+<=>123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

listStr.Sort(delegate(string a, string b) { return string.Compare(a, b, StringComparison.CurrentCulture); });
print(listStr);
結果:'- !"#$%&()*,./:;?@[]^_`{|}~+<=>123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

listStr.Sort(delegate(string a, string b) { return string.CompareOrdinal(a, b); });
print(listStr);
結果: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~

var listStr2 = new List<string>();
for(int i=0; 'A' + i <= 'Z'; i++)
{
  char c = (char)('A' + i);
   listStr2.Add(new string(c, 1));
   listStr2.Add("-" + new string(c, 1));
   listStr2.Add("A" + new string(c, 1));
}

Action<List<string>> print2 = (list) =>
{
  foreach (string s in list)
   {
       System.Diagnostics.Debug.Write(s + " ");
   }
   System.Diagnostics.Debug.WriteLine("");
};

listStr2.Sort(delegate(string a, string b) { return a.CompareTo(b); });
print2(listStr2);
結果:A -A AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ B -B C -C D -D E -E F -F G -G H -H I -I J -J K -K L -L M -M N -N O -O P -P Q -Q R -R S -S T -T U -U V -V W -W X -X Y -Y Z -Z

listStr2.Sort(delegate(string a, string b) { return string.CompareOrdinal(a, b); });
print2(listStr2);
結果:-A -B -C -D -E -F -G -H -I -J -K -L -M -N -O -P -Q -R -S -T -U -V -W -X -Y -Z A AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ B C D E F G H I J K L M N O P Q R S T U V W X Y Z

DataTable並び替え

dt = New DataView(dt, Nothing, "KEY1, KEY2", DataViewRowState.CurrentRows).ToTable()

改行コード

System.Environment.NewLine
※CSVとか明示的に改行する場合はこれを使用すること!

string.Compre

string.Compare(strA, strB)
0 より小さい値 strA が strB より小さい。
0 (ゼロ) strA と strB は等しい。
0 より大きい値 strA が strB より大きい。

string.Format

左詰め:String.Format("{0, 4}", num)
右詰め:String.Format("{0, -4}", num)
0詰め:String.Format("{0:D4}", num)
複合:String.Format("{0, 8:D4}", num)

タブキーイベントを取得する

タブキーは特殊イベントキーなので、KeyDown/KeyPress/KeyUpでは拾えない。
PreviewKeyDownイベント処理を行う。
それと同時にFormでも処理を行うので
protected override bool ProcessDialogKey(Keys keyData)
{
if (KeyData == Keys.Tab) return true;
 return false;
}
でオーバーライドして上記のようにtrueを返すようにする。
このとき通常のフォーカス移動は行われないので注意。

アクティブフォームの取得

Form.ActiveForm

exe,dllのコピー

XCOPY /Y "$(TargetDir)$(ProjectName).*" "$(ProjectDir)....in\"

↓のような構成
+-bin
+-src+-prj1
      -prj2


フォーマット

System.Diagnostics.Debug.WriteLine(String.Format("{0:0.00}%", 0.1));
→0.10%
System.Diagnostics.Debug.WriteLine(String.Format("{0:#.##}%", 0.1));
→.1%
※#,##0は四捨五入されるっぽい

DataRowのソート

          DataView view = new DataView(gridDataTable.Copy());
           view.Sort = "SUM_TOTAL DESC";
           gridDataTable.Clear();
           foreach(DataRowView drv in view)
           {
               gridDataTable.ImportRow(drv.Row);
           }

フォントの書体だけ変更

Font f = textbox.Font;
FontFamily family = new FontFamily("NSimSun");
textbox.Font = new Font(family, f.Size, f.Style, f.Unit);

リソースからbitmapを読み込む

Bitmap bmp = Properties.Resources.TestImage;
this.pictureBox1.Image = Image.FromHbitmap(bmp.GetHbitmap());

nullまたは空文字判定

String.IsNullOrEmpty[.NetFramework2.0]

正規表現仕様


切捨て、切上げ、四捨五入

切捨て:Math.Floor (負の数はCellingを使う)
切上げ:Math.Celling (負の数はFloorを使う)
四捨五入:Rount ※MidpointRounding.AwayFromZeroを指定する

曜日を漢字で表示する

string[] weeks = { "日", "月", "火", "水", "木", "金", "土" };
weeks[(int)DateTime.Now.DayOfWeek]

コンボボックス

コンボボックスにObjectを追加するときは、
ToString()をオーバーライドしとくと楽だよ。

データセット

データセットはデータテーブルの集まり。
データアダプタはSqlDataAdapterなど。
dataset.GIF

ラベル透過

Image画像の上にラベルを置くとそのままでは親コントロールはformになるので、
親コントロールをpictureboxに変更する必要がある。

[参考]

フォーム上でキーイベント取得

_KeyPress(object sender, KeyPressEventArgs e)イベント
e.KeyChar == (char)Keys.Escapeなどで判定!

スレッド

System.Threading.Thread.Sleep(1000); // 1秒待つ

フォームの表示時のイベント処理順番

  1. Loadイベント
  2. Activatedイベント
  3. Shownイベント(.NETFramework2.0以降)

エディタのショートカットキー


DateTime型を文字列に変換

st.ToString("yyyy/MM/dd HH:mm:ss.fff")

コンソールに出力

Console.WriteLine("Hello, world!")

フォルダ内のファイル数を取得

Dim FileCount As Integer = System.IO.Directory.GetFiles(FolderName).Length

ファイル名取得、移動など

My.Computer.FileSystem.GetFiles(...)
My.Computer.FileSystem.MoveFile(移動元、移動先、上書き確認有無)

ファイル・ディレクトリが存在するか

System.IO.File.Exists(name)
System.IO.Directory.Exists(name)

実行ファイルのパス(exeやdll)

System.Reflection.Assembly.GetExecutingAssembly().Location

Option Explicit On

明示的な宣言を強制する(Dimとか絶対つけなきゃ)

コンソールアプリケーションの戻り値

正常終了は0、異常終了はそれ以外を返すのが一般的

ビルドとリビルド

ビルド→差分だけコンパイル
リビルド→全部コンパイル

FlexGridの内でのカーソル移動

.Select(row, col, scroll) ※scrollはboolean型

データリーダ設定

          Dim hCommand As System.Data.SqlClient.SqlCommand = database.Connection.CreateCommand
          hCommand.CommandText = strSql
           Dim hReader As System.Data.SqlClient.SqlDataReader = hCommand.ExecuteReader()
           hCommand.Dispose()
           While (hReader.Read())
           End While
           hReader.Close()

DataTable

forでまわす場合は、

For Each dr As DataRow In dt.Rows

Compute

全件を足す場合はCompute("SUM(hoge)", null)

一時フォルダのパス取得

System.IO.Path.GetTempPath();

CSVファイル読込(.NET Framework 2.0以降)

Dim parser As New Microsoft.VisualBasic.FileIO.TextFieldParser(foundFile, System.Text.Encoding.GetEncoding("Shift_JIS"))

CSVファイル読込(自作)

          System.IO.StreamReader reader = new System.IO.StreamReader(@"C:    est.txt",System.Text.Encoding.GetEncoding("shift_jis"));
           while(reader.Peek() > -1)
           {
               string[] stringBuffer; 
               stringBuffer = reader.ReadLine().Split(',');
           }
           reader.Close();

文字列のバイト数を取得

  Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
   int num = sjisEnc.GetByteCount(str);

日付変換


セットアッププロジェクト

InstallAllUsersで初期値を設定 → true:すべてのユーザー, false:このユーザーのみ
InstallAllUsersVisibleで可視化 → true:可視(変更可), false:非可視(変更不可)

  • 最終更新:2011-03-22 11:16:44

このWIKIを編集するにはパスワード入力が必要です

認証パスワード