組み込み型一覧 (名称は省略形: 例えば int は System.Int32 の省略形)
型 | 意味 | サンプル |
---|---|---|
sbyte | 8 ビット 符号付き整数 | sbyte val = -5; |
byte | 8 ビット 符号なし整数 | byte val = 5; |
short | 16 ビット 符号付き整数 | short val = -5; |
ushort | 16 ビット 符号なし整数 | ushort val = 5; |
int | 32 ビット 符号付き整数 | int val = -5; |
uint | 32 ビット 符号なし整数 | uint val = 5U; |
long | 64 ビット 符号付き整数 | long val = -5L; |
ulong | 64 ビット 符号なし整数 | ulong val = 5UL; |
float | 単精度浮動小数点 | float val = -1.23F; |
double | 倍精度浮動小数点 | double val = -1.23D; |
decimal | 10 進数 (有効桁 28) | decimal val = 1.23M; |
bool | ブール (true または false) | bool val = true; |
char | 文字型 (Unicode) | char val = 'a'; |
型 | 意味 | サンプル |
---|---|---|
string | 文字列型 (Unicode) | string val = "abc" |
object | クラスのベース型 (クラス以外も object に変換できる) | object o = new MyClass(); |
namespace ConsoleApplication1
{
/// <summary>Class1</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
// 値型の変数を参照型に変換することが出来ます.
//
// 例.
int i = 1;
object o = i;
// この操作を boxing (ボックス化) と言います.また,元の値型に戻すことも出来ます.
//
// 例.
int j = (int)o;
}
}
}
// ・コンテナ クラス等に値型を格納する時等は,この機能を使って参照型として格納することになります.
namespace ConsoleApplication1
{
struct Point
{
/* インスタンス フィールド初期化子は不可
public double x = 0.0;
public double y = 1.0;
*/
public double x;
public double y;
/* パラメータの無いコンストラクタは不可
public Point()
{
x = 1.0;
y = 1.0;
}
*/
// パラメータ付きコンストラクタは可
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
// メソッドは可
public void set(double x, double y)
{
this.x = x;
this.y = y;
}
/*
virtual は不可
public virtual void sset(double x, double y)
{
this.x = x;
this.y = y;
}
*/
// override は可
public override string ToString()
{
return "(" + x.ToString() + ", " + y.ToString() + ")";
}
}
/*
継承は不可
struct SubPoint : Point
{
}
*/
/// <summary>Class1</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
Point p1 = new Point();
Point p2 = new Point(10.0, 20.0);
// new しなくてもインスタンス化可能
Point p3;
}
}
}
namespace ConsoleApplication1
{
/// <summary>Class1</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
// 一次元配列
int[] a1 = new int[5];
for (int i = 0; i < 5; i++)
{
a1[i] = i + 1;
}
int[] a2 = new int[] {1, 2, 3, 4, 5};
// 多次元配列
int[,] a3 = new int[3, 2];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
a3[i, j] = i + j + 1;
int[,] a4 = new int[,] {{1, 2}, {3, 4}, {5, 6}};
int[,] a5 = {{1,2}, {3,4}, {5,6}, {7,8}};
// 配列の配列も可
int[][][] a6;
}
}
}
namespace ConsoleApplication1
{
/// <summary>Foo</summary>
class Foo
{
const int c1 = 1; // 可
// static const int c2 = 1; // 不可
readonly int r1 = 1; // 可
static readonly int r2 = 1; // 可
public Foo()
{
// c1 = 2; // 不可
r1 = 2; // 可
}
private void foo()
{
// c1 = 2; // 不可
// r1 = 2; // 不可
}
}
/// <summary>Class1</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{}
}
}
namespace ConsoleApplication1
{
/// <summary>Class1</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
int[] a = new int[] {3, 4, 5, 7, 9, 1, 3};
int sum = 0;
foreach (int n in a)
{
sum += n;
}
}
}
}
namespace ConsoleApplication1
{
/// <summary>Foo</summary>
class Foo
{
// プロパティ
public int n
{
get
{ return n_; }
set
{ n_ = value; }
}
private int n_;
}
/// <summary>Class1</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
Foo foo = new Foo();
foo.n = 1;
int n = foo.n;
}
}
}
namespace ConsoleApplication1
{
/// <summary>Class1</summary>
class Class1
{
private static void foo ( int n)
{
int m = n; // 可
n = 1; // Main 側の値は不変
}
private static void fooRef(ref int n)
{
int m = n; // 可
n = 1; // Main 側の値が変わる
}
private static void fooOut(out int n)
{
// int m = n; // 不可
n = 1; // Main 側の値が変わる
}
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
int n = 0;
foo ( n); // 可
// fooRef( n); // 不可
fooRef(ref n); // 可
// fooOut( n); // 不可
fooOut(out n); // 可
int m;
// foo ( m); // 不可
// fooRef(ref m); // 不可
fooOut(out m); // 可
}
}
}
namespace ConsoleApplication1
{
class Test
{
// クラス メソッド
public static void f1(string s)
{
System.Console.WriteLine("Test.f1({0})", s);
}
// インスタンス メソッド
public void f2(string s)
{
System.Console.WriteLine("Test.f2({0})", s);
}
}
class Class1
{
// デリゲート
private delegate void Function(string s);
static void Main(string[] args)
{
// オブジェクトの作成
Test test = new Test();
Function function;
// デリゲートの作成
function = new Function(Test.f1);
// テスト
function("1. ABC");
// デリゲートの作成
function = new Function(test.f2);
// テスト
function("2. あいうえお");
// マルチキャスト デリゲート
function = new Function(Test.f1);
function += new Function(test.f2);
function += new Function(Test.f1);
function -= new Function(test.f2);
function -= new Function(test.f2);
function += new Function(test.f2);
// テスト
function("3. 安以宇");
}
}
}
namespace ConsoleApplication1
{
class Observer
{
// イベント ハンドラ
public void handler(object sender, System.EventArgs arg)
{
System.Console.WriteLine("Observer.handler({0}, {1})", sender.ToString(), arg.ToString());
}
}
class Window
{
// デリゲート
public delegate void OnClick(object sender, System.EventArgs arg);
// イベント
public event OnClick click;
// テスト用
public void test()
{
if (click != null) // null チェックしないとハンドラが登録されていない時に例外が発生する
click(this, System.EventArgs.Empty);
}
}
class Class1
{
static void Main(string[] args)
{
// オブジェクトの作成
Window window = new Window ();
Observer observer1 = new Observer();
Observer observer2 = new Observer();
// イベント ハンドラの追加
window.click += new Window.OnClick(observer1.handler);
window.click += new Window.OnClick(observer2.handler);
// テスト
window.test();
}
}
}
namespace ConsoleApplication1
{
/// <summary>Foo クラス</summary>
class Foo
{
public Foo()
{}
public void function()
{}
public static int add(int n1, int n2)
{
return n1 + n2;
}
public int proper
{
get
{
return n;
}
set
{
n = value;
}
}
private int n;
}
/// <summary>Class1 クラス</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
getTypeInfomation ();
getMemberInfomation();
callMember ();
getClassInfomation ();
getAllInfomation ();
}
/// <summary>型情報の取得</summary>
private static void getTypeInfomation()
{
System.Console.WriteLine("型情報の取得");
System.Type fooType = typeof(Foo);
System.Console.WriteLine(fooType);
Foo c = new Foo();
fooType = c.GetType();
System.Console.WriteLine(fooType);
fooType = System.Type.GetType("ConsoleApplication3.Foo");
System.Console.WriteLine(fooType);
System.Console.WriteLine();
}
/// <summary>メンバーの取得</summary>
private static void getMemberInfomation()
{
System.Console.WriteLine("メンバーの取得");
System.Type fooType = typeof(Foo);
System.Reflection.FieldInfo [] fi = fooType.GetFields ();
System.Reflection.MethodInfo [] mi = fooType.GetMethods ();
System.Reflection.PropertyInfo[] pi = fooType.GetProperties();
System.Reflection.MemberInfo [] ai = fooType.GetMembers ();
printMembers(fi);
printMembers(mi);
printMembers(pi);
printMembers(ai);
System.Console.WriteLine();
}
/// <summary>メンバーの呼び出し</summary>
private static void callMember()
{
System.Console.WriteLine("メンバーの呼び出し");
System.Type fooType = typeof(Foo);
object[] arg = new object[] {1, 2};
try
{
object result = fooType.InvokeMember("add",
System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod,
null, null, arg);
System.Console.WriteLine ("{0} + {1} = {2}", arg[0], arg[1], result);
result = fooType.GetMethods()[4].Invoke(new Foo(), arg);
System.Console.WriteLine("{0} + {1} = {2}", arg[0], arg[1], result);
}
catch (System.Reflection.TargetParameterCountException)
{
System.Console.WriteLine("例外: 引数の数が違っています.");
}
catch (System.ArgumentException)
{
System.Console.WriteLine("例外: 引数が不適当です.");
}
catch (System.MemberAccessException)
{
System.Console.WriteLine("例外: メンバーへのアクセスに失敗しました.");
}
System.Console.WriteLine();
}
/// <summary>クラスの取得</summary>
private static void getClassInfomation()
{
System.Console.WriteLine("クラスの取得");
System.Type fooType = typeof(Foo);
System.Reflection.Assembly a1 = fooType.Module.Assembly;
System.Reflection.Assembly a2 = System.Reflection.Assembly.LoadFrom("ConsoleApplication3.exe");
System.Type[] types1 = a1.GetTypes();
System.Type[] types2 = a2.GetTypes();
int numInterfaces = 0;
foreach (System.Type t in types1)
{
System.Console.WriteLine("Type: {0}", t);
if (t.IsInterface)
{
numInterfaces++;
}
}
System.Console.WriteLine("{0} types in the {1}.", types1.Length, fooType.Module.ToString());
System.Console.WriteLine("{0} interfaces in the {1}.", numInterfaces, fooType.Module.ToString());
System.Console.WriteLine();
}
/// <summary>全クラス・全メンバーの一覧</summary>
private static void getAllInfomation()
{
System.Console.WriteLine("全クラス・全メンバーの一覧");
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom("ConsoleApplication3.exe");
foreach (System.Type t in a.GetTypes())
{
System.Console.WriteLine("Type: {0}", t);
printMembers(t.GetMembers());
}
System.Console.WriteLine();
}
/// <summary>メンバー表示サブルーチン</summary>
private static void printMembers(System.Reflection.MemberInfo[] ms)
{
System.Console.WriteLine("Length : {0}", ms.Length);
foreach (System.Reflection.MemberInfo m in ms)
{
System.Console.WriteLine(m);
}
System.Console.WriteLine();
}
}
}
/*
* 1. dll の作成
* ・[ファイル] - [新規作成] - [プロジェクト] - [Visual C# プロジェクト] - [クラス ライブラリ]
*/
// dll 側のソース
namespace ClassLibrary1
{
public class Foo
{
public int foo()
{
return 0;
}
}
}
/*
* 2. dll の使用
* ・使う側のプロジェクトを右クリック - [参照の追加] - [参照] - dll ファイルを指定
* ・実際に使ってみる
*/
// exe 側のソース
namespace ConsoleApplication1
{
/// <summary>Class1</summary>
class Class1
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
ClassLibrary1.Foo o = new ClassLibrary1.Foo();
int n = o.foo();
}
}
}
// (コンパイルには /unsafe オプションが必要:
// プロジェクトを右クリック - [プロパティ] - [構成プロパティ] - [ビルド] - [コード生成] - [セーフモード以外のコードブロックの許可] を True に変更)
namespace ConsoleApplication5
{
/// <summary>
/// unsafe なクラス
/// </summary>
unsafe class UnsafeClass
{
public static void unsafeTest()
{
int n = 1 ;
int* pn = &n ;
int m = *pn;
System.Console.WriteLine("n({0}), *pn({1}), m({2})", n, *pn, m);
}
}
/// <summary>
/// Class1
/// </summary>
class Class1
{
/// <summary>
/// unsafe なメソッド
/// </summary>
unsafe private static void unsafeTest()
{
int n = 1 ;
int* pn = &n ;
int m = *pn;
System.Console.WriteLine("n({0}), *pn({1}), m({2})", n, *pn, m);
}
/// <summary>
/// アプリケーションのメイン エントリ ポイント
/// </summary>
[System.STAThread]
static void Main(string[] args)
{
unsafeTest();
UnsafeClass.unsafeTest();
}
}
}
// (コンパイルには /unsafe オプションが必要)
namespace ConsoleApplication6
{
/// <summary>
/// Windows API を直接呼ぶ
/// </summary>
class WindowsAPI
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int MessageBeep(uint type);
[System.Runtime.InteropServices.DllImport(
"user32.dll" ,
CallingConvention=System.Runtime.InteropServices.CallingConvention.Winapi,
CharSet=System.Runtime.InteropServices.CharSet.Ansi ,
EntryPoint="MessageBoxA" ,
ExactSpelling=false ,
PreserveSig=true ,
SetLastError=false
)]
public static extern int MessageBoxA(
uint hWindow,
[System.Runtime.InteropServices.MarshalAs(
System.Runtime.InteropServices.UnmanagedType.LPStr
)] string text ,
[System.Runtime.InteropServices.MarshalAs(
System.Runtime.InteropServices.UnmanagedType.LPStr
)] string caption,
uint type
);
[System.Runtime.InteropServices.DllImport(
"user32.dll" ,
CallingConvention=System.Runtime.InteropServices.CallingConvention.Winapi,
CharSet=System.Runtime.InteropServices.CharSet.Unicode ,
EntryPoint="MessageBoxW" ,
ExactSpelling=false ,
PreserveSig=true ,
SetLastError=false
)]
public static extern int MessageBoxW(
uint hWindow,
[System.Runtime.InteropServices.MarshalAs(
System.Runtime.InteropServices.UnmanagedType.LPWStr
)] string text ,
[System.Runtime.InteropServices.MarshalAs(
System.Runtime.InteropServices.UnmanagedType.LPWStr
)] string caption,
uint type
);
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
unsafe public static extern void FillMemory(
System.IntPtr ptr ,
uint size,
byte fill
);
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
unsafe public static extern void ZeroMemory(
System.IntPtr ptr ,
uint size
);
}
/// <summary>
/// Class1
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイント
/// </summary>
[System.STAThread]
static void Main(string[] args)
{
messageBoxDemo ();
fillMemoryDemo1();
fillMemoryDemo2();
}
private static void messageBoxDemo()
{
int m = WindowsAPI.MessageBeep(0);
int n = WindowsAPI.MessageBoxA(
0, "こんにちは.", "ANSI メッセージ ボックス" , 0
);
int l = WindowsAPI.MessageBoxW(
0, "こんにちは.", "Unicode メッセージ ボックス", 0
);
}
unsafe private static void fillMemoryDemo1()
{
const uint size = 10; // 配列のサイズ
byte[] buffer = new byte[size];
// buffer の 0 番目の要素への unsafe なポインタを取得
System.IntPtr ptr = System.Runtime.InteropServices.Marshal.
UnsafeAddrOfPinnedArrayElement(buffer, 0);
// API の FillMemory を呼ぶ
WindowsAPI.FillMemory(ptr, sizeof(byte) * size, 5);
foreach (byte i in buffer)
{
System.Console.WriteLine(i);
}
}
unsafe private static void fillMemoryDemo2()
{
const int size = 10; // 配列のサイズ
// プロセスのアンマネージ ネイティブ ヒープからメモリを割り当て
System.IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(
sizeof(byte) * size
);
// API の FillMemory を呼ぶ
WindowsAPI.FillMemory(ptr, sizeof(byte) * size, 8);
byte[] buffer = new byte[size];
// アンマネージ メモリ ポインタからマネージ byte 配列にデータをコピー
System.Runtime.InteropServices.Marshal.Copy(ptr, buffer, 0, size);
// プロセスのアンマネージ ネイティブ ヒープから割り当てられたメモリを解放
System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr);
foreach (byte i in buffer)
{
System.Console.WriteLine(i);
}
}
}
}
namespace ConsoleApplication7
{
/// <summary>
/// フィールドの初期化の順番の例
/// </summary>
class Foo
{
/*
* フィールドの初期化の順番は以下の通り
* 1. クラス フィールド (static なフィールド) がデフォルト値で初期化
* 2. クラス フィールドの初期化子が書かれた順番に (上から順に) 実行
* 3. (インスタンスの生成時に) インスタンス フィールドがデフォルト値で初期化
* 4. インスタンス フィールドの初期化子が書かれた順番に (上から順に) 実行
* 5. コンストラクタ内での値の代入
*/
public static int c1 = 1;
public static int c2;
public int i1 = 1;
public int i2;
public Foo()
{
i2 = 1;
}
/*
* 例.この場合,
* 1. c1 と c2 が 0 で初期化される
* 2. c1 が 1 で初期化される
* 3. (new Foo() が呼ばれた時に) i1 と i2 が 0 で初期化される
* 4. i1 が 1 で初期化される
* 5. (コンストラクタ内で) i2 に 1 が代入される
*/
}
/// <summary>
/// Class1
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイント
/// </summary>
[System.STAThread]
static void Main(string[] args)
{
System.Console.WriteLine("Foo.c1({0}), Foo.c2({1})", Foo.c1, Foo.c2);
Foo foo = new Foo();
System.Console.WriteLine("foo.i1({0}), foo.i2({1})", foo.i1, foo.i2);
}
}
}
Debug ビルド時と Release ビルド時の dll の管理
・開発時のフォルダ構成の例.
class Employee
{
private int id_ = 1;
private string name_;
public int id
{
get { return id_; }
}
public string name
{
get { return name_; }
set { name_ = value; }
}
}
namespace MyApplication
{
/// <summary>MyDocument</summary>
class MyDocument
{
/// <summary>Registry</summary>
class Registry
{
private const string softwareKeyName = "Software";
private const string companyName = "My Company";
private const string applicationName = "MyApplication";
private const string myTextKeyName = "MyText";
private const string footerTextKeyName = "FooterText";
private static Microsoft.Win32.RegistryKey getApplicationKey()
{
Microsoft.Win32.RegistryKey rootKey = Microsoft.Win32.Registry.CurrentUser;
Microsoft.Win32.RegistryKey softwareKey = rootKey.CreateSubKey(softwareKeyName);
Microsoft.Win32.RegistryKey companyKey = softwareKey.CreateSubKey(companyName);
Microsoft.Win32.RegistryKey applicationKey = companyKey.CreateSubKey(applicationName);
return applicationKey;
}
public static void initialize()
{
string[] text = (string[])getApplicationKey().GetValue(myTextKeyName);
if (text != null)
myText_ = text;
}
public static void end()
{
try
{
getApplicationKey().SetValue(myTextKeyName, myText_);
}
catch
{
// ...省略...
}
}
}
static MyDocument()
{
Registry.initialize();
}
public static void end()
{
Registry.end();
}
private static string[] myText_ = new string[] {"Hello", "World"};
}
/// <summary>
/// MainClass
/// </summary>
class MainClass
{
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main(string[] args)
{
// ...省略...
MyDocument.end();
}
}
}
namespace MyWindowsApplication
{
/// <summary>MainForm</summary>
class MyWindowsApplication
{
#region メイン
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main()
{
System.Windows.Forms.Application.Run(new MainForm());
}
#endregion // メイン
}
/// <summary>MainForm</summary>
class MainForm : System.Windows.Forms.Form
{
#region デザイナ変数
private System.Windows.Forms.MainMenu mainMenu;
private System.Windows.Forms.MenuItem menuItemFile;
private System.Windows.Forms.MenuItem menuItemOpen;
private System.Windows.Forms.MenuItem menuItemOption;
private System.Windows.Forms.MenuItem menuItemExit;
private System.Windows.Forms.MenuItem menuItemHelp;
private System.Windows.Forms.MenuItem menuItemFont;
private System.Windows.Forms.MenuItem menuItemAbout;
private System.Windows.Forms.TextBox textBox;
/// <summary>デザイナ変数</summary>
private System.ComponentModel.Container components = null;
#endregion // デザイナ変数
#region コンストラクタ
public MainForm()
{
// Windows フォーム デザイナ サポートに必要
InitializeComponent();
}
#endregion // コンストラクタ
#region オーバーライド
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
components.Dispose();
}
base.Dispose(disposing);
}
#endregion // オーバーライド
#region Windows Form Designer generated code
/// <summary>デザイナ サポートに必要なメソッド</summary>
private void InitializeComponent()
{
this.mainMenu = new System.Windows.Forms.MainMenu();
this.menuItemFile = new System.Windows.Forms.MenuItem();
this.menuItemOpen = new System.Windows.Forms.MenuItem();
this.menuItemExit = new System.Windows.Forms.MenuItem();
this.menuItemOption = new System.Windows.Forms.MenuItem();
this.menuItemFont = new System.Windows.Forms.MenuItem();
this.menuItemHelp = new System.Windows.Forms.MenuItem();
this.menuItemAbout = new System.Windows.Forms.MenuItem();
this.textBox = new System.Windows.Forms.TextBox ();
this.SuspendLayout();
// mainMenu
this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItemFile ,
this.menuItemOption,
this.menuItemHelp });
// menuItemFile
this.menuItemFile.Index = 0;
this.menuItemFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItemOpen,
this.menuItemExit});
this.menuItemFile.Text = "ファイル(&F)";
// menuItemOpen
this.menuItemOpen.Index = 0;
this.menuItemOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
this.menuItemOpen.Text = "開く(&O)";
this.menuItemOpen.Click += new System.EventHandler(this.menuItemOpen_Click);
// menuItemExit
this.menuItemExit.Index = 1;
this.menuItemExit.Text = "終了(&X)";
this.menuItemExit.Click += new System.EventHandler(this.menuItemExit_Click);
// menuItemOption
this.menuItemOption.Index = 1;
this.menuItemOption.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItemFont});
this.menuItemOption.Text = "設定(&S)";
// menuItemFont
this.menuItemFont.Index = 0;
this.menuItemFont.Text = "フォント(&F)";
this.menuItemFont.Click += new System.EventHandler(this.menuItemFont_Click);
// menuItemHelp
this.menuItemHelp.Index = 2;
this.menuItemHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItemAbout});
this.menuItemHelp.Text = "ヘルプ(&H)";
// menuItemAbout
this.menuItemAbout.Index = 0;
this.menuItemAbout.Text = "バージョン情報(&A)";
this.menuItemAbout.Click += new System.EventHandler(this.menuItemAbout_Click);
// textBox
this.textBox.Anchor = (System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right);
this.textBox.Font = new System.Drawing.Font("MS ゴシック", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (System.Byte)128);
this.textBox.Multiline = true;
this.textBox.Name = "textBox";
this.textBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.textBox.Size = new System.Drawing.Size(616, 568);
this.textBox.TabIndex = 0;
this.textBox.Text = "";
// MainForm
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(616, 573);
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.textBox});
this.Menu = this.mainMenu;
this.Name = "MainForm";
this.Text = "MyWindowApplication";
this.ResumeLayout(false);
}
#endregion // Windows Form Designer generated code
#region ハンドラ
private void menuItemOpen_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog.FilterIndex = 0;
openFileDialog.RestoreDirectory = true ;
if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
System.IO.Stream stream = openFileDialog.OpenFile();
if (stream != null)
{
System.IO.TextReader reader = new System.IO.StreamReader(stream, System.Text.Encoding.GetEncoding("shift-jis"));
textBox.Text = reader.ReadToEnd();
reader.Close();
stream.Close();
}
}
}
private void menuItemExit_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.Application.Exit();
}
private void menuItemFont_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.FontDialog fontDialog = new System.Windows.Forms.FontDialog();
fontDialog.AllowVerticalFonts = false;
fontDialog.Font = textBox.Font;
if (fontDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
textBox.Font = fontDialog.Font;
}
private void menuItemAbout_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.Form aboutDialog = new AboutDialogBox();
aboutDialog.ShowDialog();
}
#endregion // ハンドラ
}
/// <summary>AboutDialogBox</summary>
class AboutDialogBox : System.Windows.Forms.Form
{
#region デザイナ変数
private System.Windows.Forms.PictureBox pictureBox;
private System.Windows.Forms.Label applicationNameLabel;
private System.Windows.Forms.Label versionLabel;
private System.Windows.Forms.Button okButton;
/// <summary>必要なデザイナ変数</summary>
private System.ComponentModel.Container components = null;
#endregion // デザイナ変数
#region コンストラクタ
public AboutDialogBox()
{
// Windows フォーム デザイナ サポートに必要です。
InitializeComponent();
}
#endregion // コンストラクタ
#region オーバーライド
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
components.Dispose();
}
base.Dispose(disposing);
}
#endregion // オーバーライド
#region Windows Form Designer generated code
/// <summary>デザイナ サポートに必要なメソッド</summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(AboutDialogBox));
this.pictureBox = new System.Windows.Forms.PictureBox();
this.applicationNameLabel = new System.Windows.Forms.Label ();
this.versionLabel = new System.Windows.Forms.Label ();
this.okButton = new System.Windows.Forms.Button ();
this.SuspendLayout();
// pictureBox
this.pictureBox.Image = ((System.Drawing.Bitmap)(resources.GetObject("pictureBox.Image")));
this.pictureBox.Location = new System.Drawing.Point(8, 8);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(40, 40);
this.pictureBox.TabIndex = 0;
this.pictureBox.TabStop = false;
// applicationNameLabel
this.applicationNameLabel.Location = new System.Drawing.Point(72, 8);
this.applicationNameLabel.Name = "applicationNameLabel";
this.applicationNameLabel.Size = new System.Drawing.Size(136, 23);
this.applicationNameLabel.TabIndex = 1;
this.applicationNameLabel.Text = "MyWindowApplication";
// versionLabel
this.versionLabel.Location = new System.Drawing.Point(216, 8);
this.versionLabel.Name = "versionLabel";
this.versionLabel.TabIndex = 2;
this.versionLabel.Text = "Version 1.0";
// okButton
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.Location = new System.Drawing.Point(336, 32);
this.okButton.Name = "okButton";
this.okButton.TabIndex = 3;
this.okButton.Text = "閉じる";
// AboutDialogBox
this.AcceptButton = this.okButton;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(418, 63);
this.ControlBox = false;
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.versionLabel ,
this.applicationNameLabel,
this.okButton ,
this.pictureBox });
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "AboutDialogBox";
this.Text = "バージョン情報";
this.ResumeLayout(false);
}
#endregion // Windows Form Designer generated code
}
}
/*
* PropertyGridTestMainForm.cs
* メイン フレーム
*/
namespace PropertyGridTest
{
/// <summary>メイン フレーム</summary>
public class PropertyGridTestMainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu mainMenu;
private System.Windows.Forms.MenuItem fileMenuItem;
private System.Windows.Forms.MenuItem testMmenuItem;
private System.Windows.Forms.MenuItem testDialogBox1MenuItem;
private System.Windows.Forms.MenuItem testDialogBox2MenuItem;
private System.Windows.Forms.MenuItem exitMenuItem;
private System.Windows.Forms.Button test1Button;
private System.Windows.Forms.Button test2Button;
/// <summary>必要なデザイナ変数</summary>
private System.ComponentModel.Container components = null;
public PropertyGridTestMainForm()
{
// Windows フォーム デザイナ サポートに必要
InitializeComponent();
}
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>デザイナ サポートに必要なメソッド</summary>
private void InitializeComponent()
{
this.mainMenu = new System.Windows.Forms.MainMenu();
this.fileMenuItem = new System.Windows.Forms.MenuItem();
this.exitMenuItem = new System.Windows.Forms.MenuItem();
this.testMmenuItem = new System.Windows.Forms.MenuItem();
this.testDialogBox1MenuItem = new System.Windows.Forms.MenuItem();
this.testDialogBox2MenuItem = new System.Windows.Forms.MenuItem();
this.test1Button = new System.Windows.Forms.Button();
this.test2Button = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// mainMenu
//
this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.fileMenuItem,
this.testMmenuItem});
//
// fileMenuItem
//
this.fileMenuItem.Index = 0;
this.fileMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.exitMenuItem});
this.fileMenuItem.Shortcut = System.Windows.Forms.Shortcut.AltF11;
this.fileMenuItem.Text = "ファイル(&F)";
//
// exitMenuItem
//
this.exitMenuItem.Index = 0;
this.exitMenuItem.Text = "終了(&X)";
this.exitMenuItem.Click += new System.EventHandler(this.exitMenuItem_Click);
//
// testMmenuItem
//
this.testMmenuItem.Index = 1;
this.testMmenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.testDialogBox1MenuItem,
this.testDialogBox2MenuItem});
this.testMmenuItem.Text = "テスト(&T)";
//
// testDialogBox1MenuItem
//
this.testDialogBox1MenuItem.Index = 0;
this.testDialogBox1MenuItem.Text = "テスト ダイアログ1(&1)";
this.testDialogBox1MenuItem.Click += new System.EventHandler(this.testDialogBox1MenuItem_Click);
//
// testDialogBox2MenuItem
//
this.testDialogBox2MenuItem.Index = 1;
this.testDialogBox2MenuItem.Text = "テスト ダイアログ2(&2)";
this.testDialogBox2MenuItem.Click += new System.EventHandler(this.testDialogBox2MenuItem_Click);
//
// test1Button
//
this.test1Button.Location = new System.Drawing.Point(8, 8);
this.test1Button.Name = "test1Button";
this.test1Button.TabIndex = 0;
this.test1Button.Text = "テスト1";
this.test1Button.Click += new System.EventHandler(this.test1Button_Click);
//
// test2Button
//
this.test2Button.Location = new System.Drawing.Point(96, 8);
this.test2Button.Name = "test2Button";
this.test2Button.TabIndex = 1;
this.test2Button.Text = "テスト2";
this.test2Button.Click += new System.EventHandler(this.test2Button_Click);
//
// PropertyGridTestMainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(184, 45);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.test2Button,
this.test1Button});
this.Menu = this.mainMenu;
this.Name = "PropertyGridTestMainForm";
this.Text = "PropertyGridTest";
this.ResumeLayout(false);
}
#endregion
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main()
{
System.Windows.Forms.Application.Run(new PropertyGridTestMainForm());
}
private void exitMenuItem_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.Application.Exit();
}
private void testDialogBox1MenuItem_Click(object sender, System.EventArgs e)
{
TestPropertyDialogBox testDialogBox = new TestPropertyDialogBox();
testDialogBox.ShowDialog();
}
private void testDialogBox2MenuItem_Click(object sender, System.EventArgs e)
{
CADDialogBox cadDialogBox = new CADDialogBox();
cadDialogBox.ShowDialog();
}
private void test1Button_Click(object sender, System.EventArgs e)
{
testDialogBox1MenuItem_Click(sender, e);
}
private void test2Button_Click(object sender, System.EventArgs e)
{
testDialogBox2MenuItem_Click(sender, e);
}
}
}
/*
* TestPropertyDialogBox.cs
* プロパティ グリッド テスト用ダイアログ ボックス1
*/
namespace PropertyGridTest
{
/// <summary>プロパティ グリッド テスト用ダイアログ ボックス1</summary>
public class TestPropertyDialogBox : System.Windows.Forms.Form
{
/*
* デザイナでの手順
*
* 1. 「ツールボックスのカスタマイズ」で「PropertyGrid」を追加し
* ツールボックスから PropertyGrid を追加
* 2. ツールボックスから TextBox を追加
* 3. 追加した PropertyGrid のプロパティの SelectedObject を追加した TextBox にする
*/
private System.Windows.Forms.PropertyGrid propertyGrid;
private System.Windows.Forms.TextBox propertyTestTextBox;
/// <summary>必要なデザイナ変数</summary>
private System.ComponentModel.Container components = null;
public TestPropertyDialogBox()
{
// Windows フォーム デザイナ サポートに必要
InitializeComponent();
}
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>デザイナ サポートに必要なメソッド</summary>
private void InitializeComponent()
{
this.propertyGrid = new System.Windows.Forms.PropertyGrid();
this.propertyTestTextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// propertyGrid
//
this.propertyGrid.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right);
this.propertyGrid.CommandsVisibleIfAvailable = true;
this.propertyGrid.LargeButtons = false;
this.propertyGrid.LineColor = System.Drawing.SystemColors.ScrollBar;
this.propertyGrid.Location = new System.Drawing.Point(176, 0);
this.propertyGrid.Name = "propertyGrid";
this.propertyGrid.SelectedObject = this.propertyTestTextBox;
this.propertyGrid.Size = new System.Drawing.Size(248, 360);
this.propertyGrid.TabIndex = 0;
this.propertyGrid.Text = "PropertyGrid";
this.propertyGrid.ViewBackColor = System.Drawing.SystemColors.Window;
this.propertyGrid.ViewForeColor = System.Drawing.SystemColors.WindowText;
//
// propertyTestTextBox
//
this.propertyTestTextBox.Location = new System.Drawing.Point(8, 8);
this.propertyTestTextBox.Name = "propertyTestTextBox";
this.propertyTestTextBox.Size = new System.Drawing.Size(160, 19);
this.propertyTestTextBox.TabIndex = 1;
this.propertyTestTextBox.Text = "propertyTestTextBox";
//
// TestPropertyDialogBox
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(424, 354);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.propertyTestTextBox,
this.propertyGrid});
this.Name = "TestPropertyDialogBox";
this.Text = "TestPropertyDialogBox";
this.ResumeLayout(false);
}
#endregion
}
}
/*
* Figure.cs
* 図形クラス群
*/
namespace PropertyGridTest
{
/// <summary>図形</summary>
public abstract class Figure
{
private System.Drawing.Drawing2D.DashStyle style;
private float width;
private System.Drawing.Color color;
protected System.Drawing.Pen CreatePen()
{
System.Drawing.Pen pen = new System.Drawing.Pen(色, 線の太さ);
pen.DashStyle = style;
return pen;
}
protected void DeletePen(System.Drawing.Pen pen)
{
pen.Dispose();
}
public Figure()
{
style = System.Drawing.Drawing2D.DashStyle.Solid;
width = 1.0f;
color = System.Drawing.Color.Black;
}
public Figure(Figure figure)
{
style = figure.style;
width = figure.width;
color = figure.color;
}
public System.Drawing.Drawing2D.DashStyle 線種
{
get { return style; }
set { style = value; }
}
public float 線の太さ
{
get { return width; }
set { width = value; }
}
public System.Drawing.Color 色
{
get { return color; }
set { color = value; }
}
public abstract Figure Clone();
public abstract void Draw(System.Drawing.Graphics graphics);
}
/// <summary>線分</summary>
public class Line : Figure
{
System.Drawing.PointF point1;
System.Drawing.PointF point2;
public Line()
{}
public Line(Line line) : base(line)
{
point1 = line.point1;
point2 = line.point2;
}
public Line(System.Drawing.PointF point1, System.Drawing.PointF point2)
{
this.point1 = point1;
this.point2 = point2;
}
public override Figure Clone()
{
return new Line(this);
}
public override void Draw(System.Drawing.Graphics graphics)
{
System.Drawing.Pen pen = CreatePen();
graphics.DrawLine(pen, point1, point2);
DeletePen(pen);
}
}
}
/*
* CADDialogBox.cs
* プロパティ グリッド テスト用ダイアログ ボックス 2
* (CAD ダイアログ ボックス)
*/
namespace PropertyGridTest
{
/// <summary>プロパティ グリッド テスト用ダイアログ ボックス 2 (CAD ダイアログ ボックス)</summary>
public class CADDialogBox : System.Windows.Forms.Form
{
Line line = new Line(new System.Drawing.PointF( 10.0f, 10.0f),
new System.Drawing.PointF(100.0f, 100.0f));
private System.Windows.Forms.MainMenu cadDialogBoxMenu;
private System.Windows.Forms.MenuItem optionMenuItem;
private System.Windows.Forms.MenuItem figurePropertyMenuItem;
/// <summary>必要なデザイナ変数</summary>
private System.ComponentModel.Container components = null;
public CADDialogBox()
{
// Windows フォーム デザイナ サポートに必要
InitializeComponent();
}
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>デザイナ サポートに必要なメソッド</summary>
private void InitializeComponent()
{
this.cadDialogBoxMenu = new System.Windows.Forms.MainMenu();
this.optionMenuItem = new System.Windows.Forms.MenuItem();
this.figurePropertyMenuItem = new System.Windows.Forms.MenuItem();
//
// cadDialogBoxMenu
//
this.cadDialogBoxMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.optionMenuItem});
//
// optionMenuItem
//
this.optionMenuItem.Index = 0;
this.optionMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.figurePropertyMenuItem});
this.optionMenuItem.Text = "設定(&O)";
//
// figurePropertyMenuItem
//
this.figurePropertyMenuItem.Index = 0;
this.figurePropertyMenuItem.Text = "図形のプロパティ(&P)";
this.figurePropertyMenuItem.Click += new System.EventHandler(this.figurePropertyMenuItem_Click);
//
// CADDialogBox
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(292, 262);
this.Menu = this.cadDialogBoxMenu;
this.Name = "CADDialogBox";
this.Text = "CADDialogBox";
this.Paint += new System.Windows.Forms.PaintEventHandler(this.CADDialogBox_Paint);
}
#endregion
private void OnFigureChange()
{
Refresh();
}
private void figurePropertyMenuItem_Click(object sender, System.EventArgs e)
{
FigurePropertyDialogBox dialogBox = new FigurePropertyDialogBox(line);
dialogBox.Change += new FigurePropertyDialogBox.OnChange(OnFigureChange);
dialogBox.Show();
}
private void CADDialogBox_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
System.Drawing.Graphics graphics = e.Graphics;
line.Draw(graphics);
}
}
}
/*
* Figure.cs
* 図形プロパティ ダイアログ ボックス
*/
namespace PropertyGridTest
{
/// <summary>図形プロパティ ダイアログ ボックス</summary>
public class FigurePropertyDialogBox : System.Windows.Forms.Form
{
private System.Windows.Forms.PropertyGrid figurePropertyGrid;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.Button applyButton;
/// <summary>必要なデザイナ変数</summary>
private System.ComponentModel.Container components = null;
public delegate void OnChange();
public event OnChange Change;
public FigurePropertyDialogBox(Figure figure)
{
// Windows フォーム デザイナ サポートに必要
InitializeComponent();
figurePropertyGrid.SelectedObject = figure;
}
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>デザイナ サポートに必要なメソッド</summary>
private void InitializeComponent()
{
this.figurePropertyGrid = new System.Windows.Forms.PropertyGrid();
this.okButton = new System.Windows.Forms.Button();
this.applyButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// figurePropertyGrid
//
this.figurePropertyGrid.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.figurePropertyGrid.CommandsVisibleIfAvailable = true;
this.figurePropertyGrid.LargeButtons = false;
this.figurePropertyGrid.LineColor = System.Drawing.SystemColors.ScrollBar;
this.figurePropertyGrid.Name = "figurePropertyGrid";
this.figurePropertyGrid.Size = new System.Drawing.Size(292, 280);
this.figurePropertyGrid.TabIndex = 0;
this.figurePropertyGrid.Text = "PropertyGrid";
this.figurePropertyGrid.ViewBackColor = System.Drawing.SystemColors.Window;
this.figurePropertyGrid.ViewForeColor = System.Drawing.SystemColors.WindowText;
//
// okButton
//
this.okButton.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.Location = new System.Drawing.Point(208, 288);
this.okButton.Name = "okButton";
this.okButton.TabIndex = 1;
this.okButton.Text = "確定";
this.okButton.Click += new System.EventHandler(this.okButton_Click);
//
// applyButton
//
this.applyButton.Location = new System.Drawing.Point(128, 288);
this.applyButton.Name = "applyButton";
this.applyButton.TabIndex = 2;
this.applyButton.Text = "適用";
this.applyButton.Click += new System.EventHandler(this.applyButton_Click);
//
// FigurePropertyDialogBox
//
this.AcceptButton = this.okButton;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(292, 322);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.applyButton,
this.okButton,
this.figurePropertyGrid});
this.Name = "FigurePropertyDialogBox";
this.Text = "図形のプロパティ";
this.Closing += new System.ComponentModel.CancelEventHandler(this.FigurePropertyDialogBox_Closing);
this.ResumeLayout(false);
}
#endregion
private void applyButton_Click(object sender, System.EventArgs e)
{
if (Change != null)
Change();
}
private void okButton_Click(object sender, System.EventArgs e)
{
Close();
}
private void FigurePropertyDialogBox_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (Change != null)
Change();
}
}
}
/*
* Win フォーム カスタム コントロール サンプル
*
* 1. メニュー「ファイル」-「新規作成」-「プロジェクト」-「Visual C# プロジェクト」-「クラス ライブラリ」で新規にプロジェクトを作成
* 2. プロジェクト-「参照の追加」-「.NET」タブで System.Windows.Forms を追加
* 3. 下記クラスを追加
*/
namespace CustumControl001
{
/// <summary>数値用テキスト ボックス</summary>
public class NumberTextBox : System.Windows.Forms.TextBox
{
private bool sign_ = true;
private bool float_ = true;
public NumberTextBox()
{
KeyPress += new System.Windows.Forms.KeyPressEventHandler(OnKeyPress);
}
/// <summary>符号を許すか</summary>
public bool Sign
{
get { return sign_; }
set { sign_ = value; }
}
/// <summary>小数点を許すか</summary>
public bool Float
{
get { return float_; }
set { float_ = value; }
}
/// <summary>数値</summary>
public double Number
{
get { return System.Convert.ToDouble(Text); }
set { System.Convert.ToString(value); }
}
private void OnKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
bool handled;
Text = keyCheck(e.KeyChar, Sign, Float, Text, out handled);
if (handled)
e.Handled = true;
}
private static string keyCheck(char c, bool isSign, bool isFloat, string text, out bool handled)
{
if (c == '-')
{
if (isSign)
{
char[] array = new char[1] {'-'};
int index = text.IndexOfAny(array);
if (index != -1)
text = text.Remove(index, 1);
text = text.Insert(0, "-");
}
handled = true;
}
else if (c == '+')
{
if (isSign)
{
char[] array = new char[1] {'-'};
int index = text.IndexOfAny(array);
if (index != -1)
text = text.Remove(index, 1);
}
handled = true;
}
else if (c == '.')
{
if (isFloat)
{
char[] array = new char[1] {'.'};
handled = (text.IndexOfAny(array) != -1);
}
else
{
handled = true;
}
}
else
{
handled = (!System.Char.IsDigit(c) && !System.Char.IsControl(c));
}
return text;
}
}
}
/*
* Win フォーム カスタム コントロールを使ってみるサンプル
*
* 1. メニュー「ファイル」-「新規作成」-「プロジェクト」-「Visual C# プロジェクト」-「Windows アプリケーション」で新規にプロジェクトを作成
* 2. プロジェクト-「参照の追加」-「.NET」タブ -「参照」で自作カスタム コントロールのクラス ライブラリ の dll を追加
* 3. デザイナ - ツールボックス -「Windows フォーム」-「ツールボックスのカスタマイズ」-「.NET Framework」タブ -「参照」で自作カスタム コントロールのクラス ライブラリ の dll を追加
* 4. デザイナで自作カスタム コントロールをドラッグ&ドロップし,適宜「プロパティ」を設定
*/
namespace KeyPressTest
{
/// <summary>文字列用リング バッファ</summary>
class StringRingBuffer
{
public StringRingBuffer() : this(defaultSize_)
{}
public StringRingBuffer(uint size)
{
System.Diagnostics.Debug.Assert(size > 0);
if (size < 1)
size = 1;
size_ = size + 1;
buffer_ = new char[size_];
buffer_[0] = '\0';
}
public void Set(char c)
{
buffer_[bottom_] = c;
pointerToNext();
}
public void Clear()
{
top_ =
bottom_ = 0;
buffer_[0] = '\0';
}
public override string ToString()
{
string s = string.Empty;
for (uint i = top_; i != bottom_; toNext(ref i))
{
System.Diagnostics.Debug.Assert(buffer_[i] != '\0');
if (buffer_[i] == '\0')
break;
s += buffer_[i];
}
return s;
}
private const uint defaultSize_ = 32;
private readonly uint size_;
private char[] buffer_;
private uint top_ = 0;
private uint bottom_ = 0;
private void toNext(ref uint n)
{
n = (n + 1) % size_;
}
private void pointerToNext()
{
toNext(ref bottom_);
if (bottom_ == top_)
toNext(ref top_);
}
}
/// <summary>メイン フォーム</summary>
public class MainForm : System.Windows.Forms.Form
{
/// <summary>必要なデザイナ変数</summary>
private System.ComponentModel.Container components = null;
private System.Windows.Forms.Label textLabel;
private System.Windows.Forms.Button textClearButton;
private CustumControl001.NumberTextBox keyPressTestTextBox;
private System.Windows.Forms.Button getNumberButton;
private System.Windows.Forms.CheckBox signCheckBox;
private System.Windows.Forms.CheckBox floatCheckBox;
private StringRingBuffer stringRingBuffer = new StringRingBuffer();
public MainForm()
{
// Windows フォーム デザイナ サポートに必要
InitializeComponent();
initializeOther();
}
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>デザイナ サポートに必要なメソッド</summary>
private void InitializeComponent()
{
this.textLabel = new System.Windows.Forms.Label();
this.textClearButton = new System.Windows.Forms.Button();
this.keyPressTestTextBox = new CustumControl001.NumberTextBox();
this.getNumberButton = new System.Windows.Forms.Button();
this.signCheckBox = new System.Windows.Forms.CheckBox();
this.floatCheckBox = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// textLabel
//
this.textLabel.Location = new System.Drawing.Point(8, 32);
this.textLabel.Name = "textLabel";
this.textLabel.Size = new System.Drawing.Size(240, 23);
this.textLabel.TabIndex = 2;
//
// textClearButton
//
this.textClearButton.Location = new System.Drawing.Point(256, 32);
this.textClearButton.Name = "textClearButton";
this.textClearButton.Size = new System.Drawing.Size(48, 23);
this.textClearButton.TabIndex = 3;
this.textClearButton.Text = "クリア";
this.textClearButton.Click += new System.EventHandler(this.textClearButton_Click);
//
// keyPressTestTextBox
//
this.keyPressTestTextBox.Float = true;
this.keyPressTestTextBox.Location = new System.Drawing.Point(8, 8);
this.keyPressTestTextBox.Name = "keyPressTestTextBox";
this.keyPressTestTextBox.Sign = true;
this.keyPressTestTextBox.Size = new System.Drawing.Size(240, 19);
this.keyPressTestTextBox.TabIndex = 0;
this.keyPressTestTextBox.Text = "";
this.keyPressTestTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.keyPressTestTextBox_KeyPress);
//
// getNumberButton
//
this.getNumberButton.Location = new System.Drawing.Point(256, 8);
this.getNumberButton.Name = "getNumberButton";
this.getNumberButton.Size = new System.Drawing.Size(48, 23);
this.getNumberButton.TabIndex = 1;
this.getNumberButton.Text = "取得";
this.getNumberButton.Click += new System.EventHandler(this.getNumberButton_Click);
//
// signCheckBox
//
this.signCheckBox.Location = new System.Drawing.Point(8, 56);
this.signCheckBox.Name = "signCheckBox";
this.signCheckBox.Size = new System.Drawing.Size(64, 24);
this.signCheckBox.TabIndex = 4;
this.signCheckBox.Text = "符号";
this.signCheckBox.CheckedChanged += new System.EventHandler(this.signCheckBox_CheckedChanged);
//
// floatCheckBox
//
this.floatCheckBox.Location = new System.Drawing.Point(96, 56);
this.floatCheckBox.Name = "floatCheckBox";
this.floatCheckBox.Size = new System.Drawing.Size(64, 24);
this.floatCheckBox.TabIndex = 5;
this.floatCheckBox.Text = "小数点";
this.floatCheckBox.CheckedChanged += new System.EventHandler(this.floatCheckBox_CheckedChanged);
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(312, 85);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.floatCheckBox,
this.signCheckBox,
this.getNumberButton,
this.keyPressTestTextBox,
this.textClearButton,
this.textLabel});
this.Name = "MainForm";
this.Text = "KeyPressTest";
this.ResumeLayout(false);
}
#endregion
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main()
{
System.Windows.Forms.Application.Run(new MainForm());
}
private void initializeOther()
{
signCheckBox .Checked = keyPressTestTextBox.Sign ;
floatCheckBox.Checked = keyPressTestTextBox.Float;
}
private void keyPressTestTextBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
stringRingBuffer.Set(e.KeyChar);
textLabel.Text = stringRingBuffer.ToString();
}
private void getNumberButton_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.MessageBox.Show(keyPressTestTextBox.Number.ToString(), "数字の取得");
}
private void textClearButton_Click(object sender, System.EventArgs e)
{
stringRingBuffer.Clear();
textLabel.Text = stringRingBuffer.ToString();
}
private void signCheckBox_CheckedChanged(object sender, System.EventArgs e)
{
keyPressTestTextBox.Sign = signCheckBox.Checked;
}
private void floatCheckBox_CheckedChanged(object sender, System.EventArgs e)
{
keyPressTestTextBox.Float = floatCheckBox.Checked;
}
}
}
/*
* Google の Web サービスを使ってみるサンプル
*
* 1. Google Web APIs (beta) <http://www.google.co.jp/apis/> へ行き,
* (1) 開発キットをダウンロード
* (2) アカウントを作成
* (3) 送られて来るメールに応答してライセンス キーを取得
* 2. C# のプロジェクトに対し,プロジェクト - 「追加」 - 「既存項目の追加」で開発キット内の GoogleSearchService.cs を追加
* 3. プロジェクト - 「参照の追加」で System.Web.dll と System.Wel.Service.dll も追加
*/
namespace GoogleTest
{
/// <summary>MainForm</summary>
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox searchTextBox;
private System.Windows.Forms.Button searchButton;
private System.Windows.Forms.ListView searchResultListView;
private System.Windows.Forms.Label serachMaxLabel;
private System.Windows.Forms.TextBox searchMaxTextBox;
/// <summary>必要なデザイナ変数</summary>
private System.ComponentModel.Container components = null;
private const int maxResults_ = 10;
public MainForm()
{
// Windows フォーム デザイナ サポートに必要
InitializeComponent();
initializeOther();
}
/// <summary>使用されているリソースに後処理を実行</summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.searchTextBox = new System.Windows.Forms.TextBox();
this.searchButton = new System.Windows.Forms.Button();
this.searchResultListView = new System.Windows.Forms.ListView();
this.serachMaxLabel = new System.Windows.Forms.Label();
this.searchMaxTextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// searchTextBox
//
this.searchTextBox.Location = new System.Drawing.Point(8, 8);
this.searchTextBox.Name = "searchTextBox";
this.searchTextBox.Size = new System.Drawing.Size(312, 19);
this.searchTextBox.TabIndex = 0;
this.searchTextBox.Text = "";
//
// searchButton
//
this.searchButton.Location = new System.Drawing.Point(328, 8);
this.searchButton.Name = "searchButton";
this.searchButton.TabIndex = 1;
this.searchButton.Text = "検索";
this.searchButton.Click += new System.EventHandler(this.searchButton_Click);
//
// searchResultListView
//
this.searchResultListView.AutoArrange = false;
this.searchResultListView.FullRowSelect = true;
this.searchResultListView.HideSelection = false;
this.searchResultListView.Location = new System.Drawing.Point(8, 72);
this.searchResultListView.Name = "searchResultListView";
this.searchResultListView.Size = new System.Drawing.Size(392, 344);
this.searchResultListView.TabIndex = 4;
this.searchResultListView.View = System.Windows.Forms.View.Details;
this.searchResultListView.DoubleClick += new System.EventHandler(this.searchResultListView_DoubleClick);
//
// serachMaxLabel
//
this.serachMaxLabel.Location = new System.Drawing.Point(16, 40);
this.serachMaxLabel.Name = "serachMaxLabel";
this.serachMaxLabel.TabIndex = 2;
this.serachMaxLabel.Text = "最大検索数";
//
// searchMaxTextBox
//
this.searchMaxTextBox.Location = new System.Drawing.Point(112, 40);
this.searchMaxTextBox.Name = "searchMaxTextBox";
this.searchMaxTextBox.TabIndex = 3;
this.searchMaxTextBox.Text = "";
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(408, 426);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.searchMaxTextBox,
this.serachMaxLabel,
this.searchResultListView,
this.searchButton,
this.searchTextBox});
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MainForm";
this.Text = "GoogleTest";
this.ResumeLayout(false);
}
#endregion
// リストビューの初期化
private void initializeSearchResultListView()
{
searchResultListView.Columns.Add("タイトル", -2, System.Windows.Forms.HorizontalAlignment.Left);
searchResultListView.Columns.Add("URL" , -2, System.Windows.Forms.HorizontalAlignment.Left);
}
private void initializeOther()
{
searchMaxTextBox.Text = maxResults_.ToString();
initializeSearchResultListView();
}
// リストビューへ一行分のデータを追加
private void appendToSearchResultListView(string titleText, string urlText)
{
System.Windows.Forms.ListViewItem item = new System.Windows.Forms.ListViewItem(titleText, 0);
item.SubItems.Add(urlText);
searchResultListView.Items.Add(item);
}
/// <summary>アプリケーションのメイン エントリ ポイント</summary>
[System.STAThread]
static void Main()
{
System.Windows.Forms.Application.Run(new MainForm());
}
private void searchButton_Click(object sender, System.EventArgs e)
{
// 検索文字列
string searchText = searchTextBox.Text;
if (searchText.Length > 0)
{
// Google から送られて来たライセンス キー
const string key = "123456789abcdefghijklmnopqrstuvwxyz";
// 最大検索数
int maxResults = System.Convert.ToInt32(searchMaxTextBox.Text);
if (maxResults > 10) maxResults = 10;
else if (maxResults < 1) maxResults = 1;
searchMaxTextBox.Text = maxResults.ToString();
// GoogleSearchService.cs 内のクラスを使って検索
GoogleSearchService google = new GoogleSearchService();
GoogleSearchResult result = google.doGoogleSearch(key, searchText, 0, maxResults, true, "", false, "", "UTF-8", "UTF-8");
foreach (ResultElement element in result.resultElements)
{
// 検索結果からタイトルと URL をリストビューに追加
appendToSearchResultListView(element.title, element.URL);
}
}
}
private void searchResultListView_DoubleClick(object sender, System.EventArgs e)
{
if (searchResultListView.SelectedItems != null)
{
// 選択された行の URL を開く
System.Windows.Forms.ListViewItem item = searchResultListView.SelectedItems[0];
string urlText = item.SubItems[1].Text;
System.Diagnostics.Process.Start(urlText);
}
}
}
}
C++ の switch - case 文とほぼ同様ですが,C# の場合は以下の違いが有ります.
// 文字列 s があったとして
switch (s)
{
case "文字列1":
case "文字列2":
処理1();
goto case "文字列3";
case "文字列3":
処理2();
処理3();
処理4();
break;
default:
break;
}
C#/.NET | C++ (std) | MFC |
---|---|---|
ArrayList | vector | CArray |
Hashtable | map | CMap |
BitArray | bitset | |
Queue | queue | |
Stack | stack | |
SortedList | ||
list | CList |
Copyright © 1997-2008 Sho's Software