| C#
について
● いわゆる覚え書き。自分が学んだことを忘れないように残しておこうと思います。 ● 目次 ●
・ はじめに
・ String型をint型に変換するには?
・ String型を16進数のint型に変換するには?
・ String型(Unicode)をSJISに変換するには?
・ 今日の日付をDateTime型で取得するには?
・ 今日の日付をString型で取得するには?
・ DateTimeFormatInfoの形式指定文字列とは?
・ 書式設定あれこれ
・ フルパスからファイル名のみを取得するには?
・ フルパスからファイル名以外のパスを取得するには?
・ フォームサイズを最大化するには?
・ レジストリへデータを保存するには?
・ レジストリからデータを取得するには?
・ 二重起動を防止するには?
・ 部分文字列の取得
・ nullと""の違い
・ 先頭文字列が一致しているか判断する
・ テキストボックス(TextBox)に数字しか入力できないようにする
・ 正規表現:電子メールかをチェックする
・ 正規表現:○文字以上○文字以下かをチェックする
・ あとがき
はじめに
2002年春から、仕事で.NET環境での開発をすることになり、C#の勉強を始めました。
勉強と言う実践の中で(コワッ)、忘れそうなものを覚書でまとめていきます。
ご注意
※ 私が実行している環境は、VisualStudio.NET 2003
Enterprise Edition がインストールされています。
※ OSはWindows XP SP2 で、Microsoft SQL
Server 2000がインストールされています。
String型をint型に変換するには? string型をint型に変換する時は、int.Parse(string)
を使用します。
ex)
string StringOne = "1";
int IntOne = int.Parse(StringOne);
コーンソールアプリケーションによるソースコードはコチラ。
※VisualStudio.NETを使用する事を前提としています。
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 職場のTさんより
記事作成日 : 2003/03/21
記事最終更新日 : 今のところなし
String型を16進数のint型に変換するには?
string型の文字列を16進数のint型として扱いたい時は、
int.Parse(string, System.Globalization.NumberStyles.HexNumber)
を使用します。
ex)
string StringHex = "fc";
int Hex = int.Parse(StringOne, System.Globalization.NumberStyles.HexNumber);
コーンソールアプリケーションによるソースコードはコチラ。
※VisualStudio.NETを使用する事を前提としています。
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 職場のTさんより
記事作成日 : 2003/03/21
記事最終更新日 : 今のところなし
String型(Unicode)をSJISに変換するには? (文字コードのエンコーディング)
.NET Frameworkで扱われる文字列はUnicodeなので、int型のSJISコードに変換したい場合は、
Unicode→SJISの変換となります。
それを実現する方法として、まずstring型で取得したUnicodeの文字列を一度EUCにエンコーディ
ングしてから バイト配列にし、それをint型にする方法を教わりました。
詳しくはサンプルソースをご覧下さい。
文字コードのエンコーディングにはEncoding.GetEncoding(string)
を使用します。
ex)
Encoding euc = Encoding.GetEncoding("EUC-JP");
コーンソールアプリケーションによるソースコードはコチラ。
※VisualStudio.NETを使用する事を前提としています。
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 職場のTさんより
記事作成日 : 2003/03/21
記事最終更新日 : 今のところなし
今日の日付をDateTime型で取得するには?
.NET Frameworkのコレクションの中に、DateTime.Today と言うものがあります。
これによって本日の日付をDateTime型で簡単に取得する事が出来ます。
DateTime dt = DateTime.Today;
このTIPSについてのコメントを送る
関連情報 : 今日の日付をテキストで取得するには?
学習先 : http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html
記事作成日 : 2004/01/14
記事最終更新日 : 今のところなし
今日の日付をString型で取得するには?
DateTime.Today.ToString("D");
のようにすると、String型で取得する事が出来ます。
"D"の部分は、DateTimeFormatInfoの説明に詳しい事が書かれています。
説明によると"D"とは「LongDatePattern」(長い日付の値の形式パターン)
だそうです。つまり、2004/05/01 00:00:00 みたいな形式のことです(確か)。
例) 2004/05/01 と出力したい時
string yyyymmdd.Text = DateTime.Today.ToString("yyyy/MM/dd");
例) 2004(年だけ)を表示したい時
string yyyy.Text = DateTime.Today.ToString("yyyy");
例) 2004(年だけ)を表示したい時
string mm.Text = DateTime.Today.ToString("MM");
例) 2004(年だけ)を表示したい時
string dd.Text = DateTime.Today.ToString("dd");
※ 月の「MM」だけが大文字なのは、分を表すmmがあるせいだと思われます。
また、MMとMを二つにすることで、一桁の月には、前にゼロがつきます。
前にゼロをつけたくない場合は、「M」とすればOKです。
このTIPSについてのコメントを送る
関連情報 : 今日の日付をDateTime型で取得するには?
DateTimeFormatInfoの形式指定文字列とは? 学習先 : http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html
記事作成日 : 2004/01/14
記事最終更新日 : 2005/03/20 寒い記述を発見したので修正。
DateTimeFormatInfoの形式指定文字列とは?
DateTime.Today.ToString("yyyy");
のようにすると、指定した形式で欲しいデータを取得する事ができます。
| d |
その月の日付。1 桁の日付で、先行ゼロが付きません |
| dd |
その月の日付。1 桁の日には、先行ゼロが付きます |
| ddd |
AbbreviatedDayNames の定義に基づく、曜日の省略名 |
| dddd |
DayNames の定義に基づく、曜日の完全名 |
| M |
月を表す数値。1 桁の月で、先行ゼロが付きません |
| MM |
月を表す数値。1 桁の月には、先行ゼロが付きます |
| MMM |
AbbreviatedMonthNames の定義に基づく、月の省略名 |
| MMMM |
MonthNames の定義に基づく、月の完全名 |
| y |
世紀を指定しない年 世紀を指定しない年が 10 未満の場合、その年は先行ゼロを付けずに表示されます
|
| yy |
世紀を指定しない年 世紀を指定しない年が 10 未満の場合、その年は先行ゼロを付けて表示されます |
| yyyy |
世紀を含む 4 桁の年 |
| gg |
時期または時代 (年号) 形式指定される日付に、関連付けられた時期または時代 (年号) の文字列がない場合、このパターンは無視されます |
| h |
12時間形式の時間 1桁の時刻で、先行ゼロが付きません |
| hh |
12時間形式の時間 1桁の時刻で、先行ゼロが付きます |
| H |
24時間形式の時間 1桁の時刻で、先行ゼロが付きません |
| HH |
24時間形式の時間 1桁の時刻で、先行ゼロが付きます |
| m |
分 1桁の分で、先行ゼロが付きません |
| mm |
分 1桁の分で、先行ゼロが付きます |
| s |
秒 1桁の秒で、先行ゼロが付きません |
| ss |
秒 1桁の秒には、先行ゼロが付きます |
このTIPSについてのコメントを送る
関連情報 : 今日の日付をDateTime型で取得するには?
学習先 : ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpref/html/frlrfSystemGlobalizationDateTimeFormatInfoClassTopic.htm
記事作成日 : 2004/01/14
記事最終更新日 : 今のところなし
書式設定あれこれ
| 0:HH:mm:ss |
時、分、秒、を2桁ずつ。先行ゼロが付きます |
| 0:HH |
時を2桁ずつ。先行ゼロが付きます |
| 0:mm |
分を2桁ずつ。先行ゼロが付きます |
| 0:ss |
秒を2桁ずつ。先行ゼロが付きます |
| 0:D6 |
10進数の数字6桁、先行ゼロが付きます |
| *** |
********* |
| *** |
********* |
| *** |
********* |
このTIPSについてのコメントを送る
関連情報 : http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconstandardnumericformatstrings.asp
学習先 : http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconformattingoverview.asp
記事作成日 : 2004/03/18
記事最終更新日 : 今のところなし
フルパスからファイル名のみを取得するには?
FileInfoクラスを利用する
using System.IO;
// 省略
FileInfo fi = new FileInfo(fullname);
string fileName = fi.Name;
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2004/04/14
記事最終更新日 : 今のところなし
フルパスからファイル名以外のパスを取得するには?
SubString() メソッド
とLastIndexOf() メソッドを利用する
// フルパスから、ファイル名以外のパスを取得する
// SubString()で、「開始位置(引数1)」から「長さ(引数2)」のデータを取得する
// LastIndexOf() メソッドで、最後の¥マークの位置を取得する
string storage_space = fullname.Substring(0,fullname.LastIndexOf("\\")+1);
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2004/04/14
記事最終更新日 : 今のところなし
フォームサイズを最大化するには?
// 自分自身のフォームサイズを最大化
this.WindowState = FormWindowState.Maximized;
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2004/04/22
記事最終更新日 : 今のところなし
レジストリへデータを保存するには?
レジストリへ、キーとともに記憶させたい文字列を保存する
【 レジストリ保存用クラス 】
using System;
using Microsoft.Win32;
namespace Mondry
{
public class Registry
{
public string Save(string company_name, string project_name,
string app_name, string key, string data)
{
RegistryKey rk;
string subKey = "Software\\" + company_name + "\\" +
project_name + "\\" + app_name;
string res = "";
try
{
rk = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(subKey);
rk.SetValue(key, data);
}
catch(System.Exception se)
{
// レジストリ保存エラー(エラーの時はエラーメッセージを return する)
res = se.Message;
return res;
}
finally
{
}
return res;
}
}
-----------------------------------------------------------------------------
【 呼び出し側 】
private void SaveRegistryData()
{
// レジストリのHKEY_CURRENT_USERツリーに
// 会社名, プロジェクト名, アプリケーション名と言う階層を作成し(または検索し)
// データをキー名で保存
Registry reg = new Mondry.Registry();
string company_name = "CompanyName";
// 会社名
string project_name = "ProjectName"; // プロジェクト名
string app_name = "ApplicationName"; // アプリケーション名
string key = "KeyName"; // キー名
string data = "保存用データ"; // 保存用データ
string res = reg.Save(company_name, project_name, app_name,
key, data);
if (res != "")
{
// 例外発生
MessageBox.Show("レジストリへの文字列保存に失敗しました:" +
res,
"レジストリ保存エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2004/04/23
記事最終更新日 : 今のところなし
レジストリからデータを取得するには?
レジストリへ保存されている、キーと関連付けられた文字列を読み出す
【 レジストリ読み出し用クラス 】
using System;
using Microsoft.Win32;
namespace Mondry
{
public class Registry
{
public string Get(string company_name, string project_name,
string app_name, string key, string default_value)
{
RegistryKey rk;
string subKey = "Software\\" + company_name + "\\" +
project_name
+ "\\" + app_name;
string data = "";
try
{
rk = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(subKey);
data = (string)rk.GetValue(key, default_value);
}
catch(System.NullReferenceException snre)
{
// レジストリデータが存在しない場合(初回作成時)はスローする
data = default_value;
return data;
}
catch(System.Exception se)
{
// レジストリ読み出しエラー(エラーの時は""のまま
return する)
return data;
}
finally
{
}
return data;
}
}
}
-----------------------------------------------------------------------------
【 呼び出し側 】
private void GetRegistryData()
{
// レジストリのHKEY_CURRENT_USERツリーから
// 会社名, プロジェクト名, アプリケーション名と言う階層を検索し
// データをキー名で取得
Registry reg = new Mondry.Registry();
string company_name = "CompanyName";
// 会社名
string project_name = "ProjectName"; // プロジェクト名
string app_name = "ApplicationName"; // アプリケーション名
string key = "KeyName"; // キー名
string default_value = "既定値";// データが存在しなかった場合の代用値
string data = reg.Get(company_name, project_name, app_name,
key, default_value);
// 取得文字列格納場所
string SetData;
if (data != "")
{
SetData = data;
}
else
{
// 例外発生
MessageBox.Show("レジストリに保存された文字列の読み出しに失敗しました",
"レジストリ読み出しエラー",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2004/04/23
記事最終更新日 : 今のところなし
二重起動を防止するには?
二重起動の防止が考慮された岡部さんのコード
|
【 二重起動防止を考慮された起動時の処理 】
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Threading;
namespace StartUp
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class fStartUp : System.Windows.Forms.Form
{
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;
public fStartUp()
{
//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();
//
// TODO: InitializeComponent 呼び出しの後に、コンストラクタ
// コードを追加してください。
InitializeApplication();
}
/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
【フォーム デザイナで生成されたコード】(省略)
private System.Windows.Forms.Label label1;
/// <summary>
/// Initialize結果判定用
/// </summary>
private bool isInit = false;
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
// Windows XP のビジュアルスタイルを有効にする
Application.EnableVisualStyles();
// Mutexインスタンス作成
Mutex m = new Mutex(false, "Application");
// 二重起動防止
if (m.WaitOne(0, false))
{
// Formインスタンス作成
using (fStartUp f = new fStartUp())
{
// Initializeが正常終了していればRun
if (f.isInit)
{
Application.Run(f);
}
}
// Mutex開放
m.ReleaseMutex();
}
else
{
MessageBox.Show ("既に起動されています。",
"Application", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
// MutexをClose
m.Close();
}
private void InitializeApplication()
{
// Applicationの起動処理(非機能用件)
// 異常終了時はReturn
// 正常終了時は最後まで実行
// Initialize成功
this.isInit = true;
}
}
}
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 株式会社 コアクリエイトシステム 岡部
充さん がC# UsersGroupMLに投稿されたコード。
岡部
充さん の許可を頂いて掲載しています。
記事作成日 : 2004/10/12
記事最終更新日 : 2004/11/05 岡部さんより新しいコードを頂いたのでコードを修正しました。
部分文字列の取得
SubString()メソッドを使って、String型のデータから部分的に文字列を取得する。
// String型の変数 data の 0バイト目から4バイトを変数
a に取得
string a = data.Substring(0, 4);
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2005/03/20
記事最終更新日 : 今のところなし
nullと""の違い
null は、オブジェクトが存在しないことを表し、
"" (空文字)は、長さゼロの文字列のオブジェクト。
※最初の頃、似たような結果のこの2つの違いがよく分からなくて不思議だった(^_^;
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2005/06/08
記事最終更新日 : 今のところなし
先頭文字列が一致しているか判断する
StartsWith()メソッドを使って、String型のデータの先頭文字列が指定文字列と一致しているかを判断する。
// ファイル名の先頭が指定した文字列と一緒かどうかを判断する
FileInfo fi = new FileInfo("C:\\file.di");
string file = "C:\\file.di01a";
if (file.StartsWith(fi.Name))
{
// 先頭が一致した時の処理
}
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2005/06/18
記事最終更新日 : 今のところなし
TextBoxに数字しか入力できないようにする
TextBoxに数字のみの入力を許可し、他の文字の入力は認めないようにする。
1. TextBoxのImeModeプロパティ を Disable にしてIMEを無効化する。
2. KeyPressイベントを作成し、以下のように記述する
// テキストボックスに数字しか入力できないようにする
private void TextBox1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs
e)
{
if (e.KeyChar < '0' || e.KeyChar > '9')
{
e.Handled = true;
}
}
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : 今のところなし
記事作成日 : 2005/07/07
記事最終更新日 : 今のところなし
正規表現:電子メールかをチェックする
Regex.IsMatch メソッドを使用して、文字列が電子メールの形式であるかを検証する。
using System.Text.RegularExpressions;
// (中略)
// 電子メール形式でない時は false を返すメソッド
private bool IsValidEmailFormat(string email)
{
return Regex.IsMatch(email,
@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
{
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : .NET Framework 開発者ガイド .NET Framework
の正規表現
記事作成日 : 2005/09/03
記事最終更新日 : 今のところなし
正規表現:○文字以上○文字以下かをチェックする
Regex.IsMatch メソッドを使用して、文字列が電子メールの形式であるかを検証する。
using System.Text.RegularExpressions;
// (中略)
// 名前が2文字以上20文字以下の範囲に無い場合は false を返すメソッド
private bool IsValidNameFormat(string name)
{
// 電子メール形式の時はtrue を返す
return Regex.IsMatch( name, ".{2,20}");
{
|
このTIPSについてのコメントを送る
関連情報 : 今のところなし
学習先 : .NET Framework 開発者ガイド .NET Framework
の正規表現
記事作成日 : 2005/09/04
記事最終更新日 : 今のところなし
あとがき
記事作成日 : 2004/09/03
記事最終更新日 : まだない。
内容的におかしいところ、見づらい個所(色使い)などございましたらご指摘ください。
同じようにC#.NETを利用されている方からの苦労話も大歓迎です。
|