トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Visual Studio .NET 2003 C#

[カテゴリ:言語]
[カテゴリ:C#]
[カテゴリ:メモ]

URL

VB 初級講座目次:
# C#ではないけどわかりやすいので
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/index_sta.htm

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html

@IT Insider.NET、.NET TIPS
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html

@IT:連載 改訂版 C#入門:
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html

Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/

WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html

WisdomSoft Microsoft .NET入門
http://wisdom.sakura.ne.jp/system/msnet/index.html

どっとねっとふぁん
http://dotnetfan.org/

緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/

どぼん!の .NET Tips
http://dobon.net/vb/dotnet/

.NET のつぼ
http://park16.wakwak.com/~mimi/dotnet/top.html

じゃんぬねっと、C# と VB.NET の入門サイト
http://jeanne.wankuma.com/

    1. C++;// 未確認飛行 C++、C# によるプログラミング入門:

http://ufcpp.net/study/csharp/index.html

Microsoft Win32 と Microsoft .NET Framework API との対応:
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx

バージョンを判別する方法

@IT:Windows TIPS -- Hint:.NET Frameworkのバージョンを確認する方法:
http://www.atmarkit.co.jp/fwin2k/win2ktips/246checkvdnfw/checkvdnfw.html

Visual C# を使用して Windows のバージョンを判別する方法:
http://support.microsoft.com/kb/304283/ja

.NET Framework のバージョン、および Service Pack が適用されているかどうかを確認する方法:
http://support.microsoft.com/kb/318785/ja

浅いコピー、深いコピー

シャローコピー と ディープコピー
http://blogs.wankuma.com/jeanne/archive/2006/04/07/22287.aspx

改行コード

Environment.NewLine

もしくは

"\r\n"

C#からVBScript,JScriptを実行

Visual Studio .NET クライアントで自動化した Office アプリケーションが終了しない:
http://support.microsoft.com/default.aspx?scid=kb;ja;317109

NyaRuRuの日記 - COM Interop, Marshal.ReleaseComObject:
http://d.hatena.ne.jp/NyaRuRu/20060727/p3

文字列の計算式の計算結果を取得する: .NET Tips: C#, VB.NET, Visual Studio:
http://dobon.net/vb/dotnet/programing/eval.html

Using the ScriptControl:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexpvb/html/usingscriptcontrolmethods.asp

MSScriptControl ExecuteStatement AddObject
MSScriptControl reference guid

MSScriptControl ExecuteStatement reference guid
IVsaReferenceItem microsoft.vsa
00020813-0000-0000-C000-000000000046

Microsoft スクリプト コントロールの概要
http://www.microsoft.com/Japan/msdn/Scripting/navigation.htm?/japan/msdn/scripting/scriptcontrol/scoverview.htm

Access ホスト オブジェクトと ScriptControl を使用しているコントロールに方法
# 関連情報たぐるもよし
http://support.microsoft.com/kb/185889/ja

PerlScript - miau's blog?:
http://miau.s9.xrea.com/blog/index.php?itemid=397

IActiveScriptParse - Google 検索:
http://www.google.co.jp/search?hl=ja&rlz=1B2GGGL_jaJP176&q=IActiveScriptParse&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

C#での ScriptControl.Run() のパラメータ指定方法
http://www.experts-exchange.com/Programming/Programming_Languages/C_Sharp/Q_21551458.html

改行キーでフォーカス移動

フォームで [Enter] キーが押された時にフォーカスを遷移させる
http://jeanne.wankuma.com/tips/form/cobolerform.html

フォームの KeyPreview が True である前提

// [Enter] キーで次の TabIndex があるコントロールへフォーカスを移す
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
    if (e.KeyCode == Keys.Enter) {
        if (! e.Control) {
            this.SelectNextControl(this.ActiveControl, ! e.Shift, true, true, true);
        }
    }
}
// フォーカス遷移後の音を消すためにキーイベントが処理されたことにする
private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) {
    if (e.KeyChar == (char)Keys.Enter) {
        e.Handled = true;
    }
}

関連付けられたアプリで開く

DOBON.NET .NET Tips - ファイルを関連付けられたソフトで開いて終了まで待機する(http://dobon.net/vb/dotnet/process/openfile.html
DOBON.NET .NET Tips - 動詞を指定してファイルを開く(http://dobon.net/vb/dotnet/process/processverb.html

.NET Visual Studio Installer

.NET Visual Studio Installerを使ったインストーラの作成 - コンピューター100%(http://computer.shipweb.jp/soft/dotnettips_wininst.htm

宇宙仮面の C# プログラミングhttp://ukamen.hp.infoseek.co.jp/Deployment/Deployment/index.htm

デバッグ

@IT:.NET TIPS デバッグ・メッセージをファイルに出力するには? - C# VB.NET VS.NET(http://www.atmarkit.co.jp/fdotnet/dotnettips/146debugonfile/debugonfile.html
@IT:.NET TIPS テスト用コードをデバッグ時にのみ実行するには? - C# VB.NET(http://www.atmarkit.co.jp/fdotnet/dotnettips/246debugonly/debugonly.html
@IT:.NET TIPS デバッグ・メッセージをコンソールに出力するには? - C# VB.NET VS.NET(http://www.atmarkit.co.jp/fdotnet/dotnettips/143debugoncon/debugoncon.html

DOBON.NET .NET Tips - 「アプリケーション構成ファイル」を使用して設定を読み込む(http://dobon.net/vb/dotnet/programing/appconfigfile.html
DOBON.NET .NET Tips - Trace.Writeメソッドでファイルに出力する(http://dobon.net/vb/dotnet/programing/tracelisteners.html

オブジェクトを確実に破棄する(IDisposable)

通常、オブジェクトが参照されなくなると、ガーベージコレクタによって自動的にデストラクタが呼び出されることで、オブジェクトが破棄となる。

出来る限り早くオブジェクトが持っているリソースを破棄したい場合、明示的にDisposeメソッドを呼ぶことでリソース開放できる。

まとめ
・オブジェクトの破棄は、ガーベージコレクタが自動で行う。
 →ユーザが明示的に破棄することはできない。
・ユーザはDisposeメソッドを呼ぶことで、明示的にリソースの
 開放を行うことができる。

---
IDisposableインターフェイスを持つクラスは、Disposeメソッドを実装しており、usingで明示的にオブジェクトの有効範囲を指定できる。
usingの範囲を外れたタイミングで自動的にDisposeメソッドを呼んでくれる。

配列

newで生成した後、配列サイズを動的に変更する場合は「可変長配列」を使う。

固定長配列
System.Array

可変長配列
System.Collections.ArrayList

コメントからのドキュメント生成

C# Tips −XMLドキュメントとNDoc−(http://www.divakk.co.jp/aoyagi/csharp_tips_ndoc.html
@IT:.NET TIPS C#でMSDNライブラリ風のAPIリファレンスを作成するには? - VS.NET(http://www.atmarkit.co.jp/fdotnet/dotnettips/185ndoc/ndoc.html

フォーム上のコントロールを列挙

@IT:.NET TIPS Windowsフォーム上のすべてのコントロールを列挙するには? - C# VB.NET(http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html

public Control[] GetAllControls(Control top)
{
  ArrayList buf = new ArrayList();
  foreach (Control c in top.Controls)
  {
    buf.Add(c);
    buf.AddRange(GetAllControls(c));
  }
  return (Control[])buf.ToArray(typeof(Control));
}

private void button1_Click(object sender, System.EventArgs e)
{
  Control[] all = GetAllControls(this);
  foreach (Control c in all)
  {
    Console.WriteLine(c.Name);
  }
} 

適切に処理されなかった例外の捕捉

@IT:.NET TIPS 適切に処理されなかった例外をキャッチするには? - C# VB.NET Windowsフォーム(http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html

using System;
using System.Windows.Forms;
using System.Threading;

namespace WindowsApplication1
{
  public class Program
  {
    [STAThread]
    static void Main()
    {
      // ThreadExceptionイベント・ハンドラを登録する
      Application.ThreadException += new
        ThreadExceptionEventHandler(Application_ThreadException);

      // UnhandledExceptionイベント・ハンドラを登録する
      Thread.GetDomain().UnhandledException += new
        UnhandledExceptionEventHandler(Application_UnhandledException);

      // メイン・スレッド以外の例外はUnhandledExceptionでハンドル
      //string buffer = "1"; char error = buffer[2];

      // ここで実行されるメイン・アプリケーション・スレッドの例外は
      // Application_ThreadExceptionでハンドルできる
      Application.Run(new Form1());
    }

    // 未処理例外をキャッチするイベント・ハンドラ
    // (Windowsアプリケーション用)
    public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
      ShowErrorMessage(e.Exception, "Application_ThreadExceptionによる例外通知です。");
    }

    // 未処理例外をキャッチするイベント・ハンドラ
    // (主にコンソール・アプリケーション用)
    public static void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
      Exception ex = e.ExceptionObject as Exception;
      if (ex != null)
      {
        ShowErrorMessage(ex, "Application_UnhandledExceptionによる例外通知です。");
      }
    }

    // ユーザー・フレンドリなダイアログを表示するメソッド
    public static void ShowErrorMessage(Exception ex, string extraMessage)
    {
      MessageBox.Show(extraMessage + " \n――――――――\n\n" +
        "エラーが発生しました。開発元にお知らせください\n\n" +
        "【エラー内容】\n" + ex.Message + "\n\n" +
        "【スタックトレース】\n" + ex.StackTrace);
    }
  }
} 

画像リソースの埋め込みと参照

埋め込み
1.「ソリューションエクスプローラ」より画像ファイルを追加(img/hogehoge.pngとします)
2.追加した画像ファイルの「ビルドアクション」を「埋め込まれたリソース」に変更

参照

System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
String name = asm.GetName().Name + ".img.hogehoge.png";
System.IO.Stream stream = asm.GetManifestResourceStream(name);
this.pictureBox1.Image = new System.Drawing.Bitmap(stream);

共通のイベントハンドラの中でオブジェクトを切り分ける

GetType() でオブジェクトのクラスを得て分岐させる。

private void hogehoge(object sender, System.EventArgs e)
{
	System.Windows.Forms.RadioButton radio = null;
	if (sender.GetType().ToString() == "System.Windows.Forms.RadioButton") 
	{
		radio = (System.Windows.Forms.RadioButton)sender;
		switch (radio.Name)
		{
			case "radioButton1":
				break;
			case "radioButton2":
				break;
			default:
				radio = null;
				break;
		}
	}
}

コントロール配列化

// コントロール配列
private System.Windows.Forms.PictureBox[] _pictureBoxs;

private void Form_Load(object sender, System.EventArgs e)
{
	// オブジェクトを順次代入しコントロール配列化
	this._pictureBoxs = new System.Windows.Forms.PictureBox[]
	{
		this.pictureBox1,
		this.pictureBox2,
		this.pictureBox3,
		this.pictureBox4,
		this.pictureBox5,
		this.pictureBox6,
		this.pictureBox7
	};

	// コントロール配列に対して処理する。
	for (int i = 0; i < this._pictureBoxs.Length; i++) 
	{
		this._pictureBoxs[i].Image = hogehoge;
	}
}

get,setアクセサ

private int hour;	// プロテクトメンバ(外部非公開)
public int Hour
{
	get		// getアクセサ経由で参照可能に。
	{
		return hour;
	}
	set		// setアクセサ経由で設定可能に。
	{
		hour = value;
	}
}

参照型(リファレンス)

retキーワードを定義側、呼出側の両方につける。

public void GetTime(ref int h, ref int m, ref int s)
{
	h = this.Hour;
	m = this.Minute;
	s = this.Second;
}
int theHour = 0;
int theMinute = 0;
int theSecond = 0;
t.GetTime(ref theHour, ref theMinute, ref theSecond);

out引数

基本的にはrefと同じであるが、事前の初期化が不要になる。

public void GetTime(out int h, out int m, out int s)
{
	h = this.Hour;
	m = this.Minute;
	s = this.Second;
}
int theHour;
int theMinute;
int theSecond;
t.GetTime(out theHour, out theMinute, out theSecond);

Validation(入力の検証)

イベントの遷移

 Enter → GotFocus → Leave → Validating → Validated → LostFocus

VB コントロールの遷移制御 - Validating, CausesValidationなど(http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard23.htm
Uchukamen C# Programming(http://www.uchukamen.com/Programming1/Validation/

正規表現による抽出

例 : URL 情報の抽出(http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconexampleextractingurlinformation.asp

"http://www.contoso.com:8080/letters/readme.html" の場合は "http:8080" が返されます。

using System.Text.RegularExpressions;

String Extension(String url) 
{
	Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",
	RegexOptions.Compiled);
	return r.Match(url).Result("${proto}${port}"); 
}

正規表現による置換

例 : 日付形式の変更(http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconexamplechangingdateformats.asp

Regex.Replace メソッドを使用して mm/dd/yy 形式の日付を dd-mm-yy 形式の日付に置換するコード例を次に示します。

using System.Text.RegularExpressions;

String MDYToDMY(String input) 
{
    return Regex.Replace(input, 
        "\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b",
        "${day}-${month}-${year}");
}

最終更新時間:2007年11月02日 00時02分49秒