[KEN's .NETのTOP][TOP]
.NETに関するメモ書き
[admin]

[BACK][NEXT]

135:[ MVVMの解説記事 ]

http://www.atmarkit.co.jp/fdotnet/chushin/greatblogentry_02/greatblogentry_02_01.html
よねKEN 2011/05/18

134:[ [C#][WinForms]角丸四角形を描画する ]

public static void DrawRoundRect(Graphics g, Pen p, int left, int top, int width, int height, int round)
{
    int right = left + width;
    int bottom = top + height;

    // 左上
    g.DrawArc(p, new Rectangle(left, top, round * 2, round * 2), -90, -90);
    // 上
    g.DrawLine(p, left + round, top, left + width - round, top);
    // 右上
    g.DrawArc(p, new Rectangle(right - round * 2, top, round * 2, round * 2), 0, -90);

    // 左
    g.DrawLine(p, left, top + round, left, bottom - round);

    // 左下
    g.DrawArc(p, new Rectangle(left, bottom - round * 2, round * 2, round * 2), -180, -90);
    // 下
    g.DrawLine(p, left + round, bottom, right - round, bottom);
    // 右下
    g.DrawArc(p, new Rectangle(right - round * 2, bottom - round * 2, round * 2, round * 2), -270, -90);

    // 右
    g.DrawLine(p, right, top + round, right, bottom - round);
}
よねKEN 2011/01/31

133:[ [C#][WinForms]条件に合致するコントロールにまとめて処理をする ]

public static void ActionControls
(Control parent, Predicate<Control> condition, Action<Control> action)
{
    foreach (Control child in parent.Controls)
    {
        if (condition(child)) action(child);
        ActionControls(child, condition, action);
    }
}

抽出条件判定メソッド、アクション実行メソッドを別途用意する必要がある。
よねKEN 2010/08/30

132:[ Visual Studioの単体テスト機能 ]

※VS2008の上位エディションで動作させて確認しています。

ExpectedException属性を使うと例外が発生することを確認するテストが簡単に書ける。

以下は自前のNumberクラスのGetHighOrderメソッドのテストですが、
引数に範囲外の値を指定して、ArgumentOutOfRangeExceptionが発生することを確認するテストです。
テストコードでtry〜catchを書く必要がない、というのがポイントです。

/// <summary>
///GetHighOrder のテスト
///異常系-上限範囲外
///</summary>
[TestMethod()]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public void GetHighOrderTest2()
{
    int number = 12;
    Number target = new Number(number);
    int figure = 3;
    int actual;
    actual = target.GetHighOrder(figure);
    Assert.Fail("ArgumentOutOfRangeException例外が起きませんでした。");
}
よねKEN 2010/06/01

131:[ [WinForms] GroupBoxの枠線をカスタマイズする ]

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing.Drawing2D;

namespace GroupBoxBorderCustomize
{
    // Form1にはgroupBox1の名前でGroupBoxが配置してあるものとする
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        NativeWindow nw;
        private void Form1_Load(object sender, EventArgs e)
        {
            nw = new GroupBoxCustomizer(groupBox1);
        }
    }

    public class GroupBoxCustomizer : NativeWindow
    {
        [DllImport("user32.dll")]
        static extern IntPtr BeginPaint(IntPtr hwnd, out PAINTSTRUCT lpPaint);
        [DllImport("user32.dll")]
        static extern bool EndPaint(IntPtr hWnd, [In] ref PAINTSTRUCT lpPaint);

        [StructLayout(LayoutKind.Sequential)]
        struct PAINTSTRUCT
        {
            public IntPtr hdc;
            public bool fErase;
            public RECT rcPaint;
            public bool fRestore;
            public bool fIncUpdate;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
            public byte[] rgbReserved;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

        const int WM_PAINT = 0x0f;

        private GroupBox groupBox;

        public GroupBoxCustomizer(GroupBox groupBox)
        {
            this.groupBox = groupBox;
            this.AssignHandle(groupBox.Handle);
        }

        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_PAINT:
                    PAINTSTRUCT ps;
                    IntPtr hDC = BeginPaint(this.Handle, out ps);

                    using (Graphics g = Graphics.FromHdc(hDC))
                    {
                        Rectangle rect = this.groupBox.ClientRectangle;
                        rect.Offset(2, 2);
                        rect.Inflate(-5, -5);
                        g.Clear(groupBox.BackColor);

                        GraphicsPath gp = new GraphicsPath();
                        int cornerRadius = 8;
                        int left = rect.Left;
                        int top = rect.Top;
                        int width = rect.Width - cornerRadius;
                        int height = rect.Height - cornerRadius;
                        gp.AddArc(left, top, cornerRadius, cornerRadius, 180, 90);
                        gp.AddArc(width, top, cornerRadius, cornerRadius, 270, 90);
                        gp.AddArc(width, height, cornerRadius, cornerRadius, 0, 90);
                        gp.AddArc(left, height, cornerRadius, cornerRadius, 90, 90); 
                        gp.CloseFigure(); 
                        g.DrawPath(Pens.Black, gp);

                        using (SolidBrush foreBrush = new SolidBrush(groupBox.ForeColor))
                        {
                            SizeF sz = g.MeasureString(groupBox.Text, groupBox.Font);
                            g.Clip = new Region(new RectangleF(12, 0, sz.Width + 2, sz.Height));
                            g.Clear(groupBox.BackColor);
                            g.ResetClip();
                            g.DrawString(groupBox.Text, groupBox.Font, foreBrush, 14, 0);
                        }
                    }
                    EndPaint(this.Handle, ref ps);

                    m.Result = IntPtr.Zero;
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }
    }
}

よねKEN 2010/05/21

130:[ [WinForm]数学のグラフ的なもののサンプル ]

Public Class Form1
    Private g As Graphics
    Private img As Image
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        img = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)
        g = Graphics.FromImage(img)
        ' 原点をフォームの左端から以下の位置に設定する
        g.TranslateTransform(100, 100)
        ' 数学の座標系のようにY軸を上向きを負にする
        g.ScaleTransform(1, -1)
       
        ' サンプル
        g.DrawLine(Pens.Black, -100, 0, 100, 0) ' X軸
        g.DrawLine(Pens.Black, 0, -100, 0, 100) ' Y軸
       
        ' 最初の点を計算
        Dim oldX As Single = -100
        Dim oldY As Single = F(100)
       
        For X As Single = -100 To 100
        ' グラフの描画
        Dim Y As Single = F(X)
        g.DrawLine(Pens.Blue, oldX, oldY, X, Y)
        oldX = X
        oldY = Y
        Next
    End Sub
   
    '' グラフ化する数式
    Private Function F(ByVal X As Single) As Single
        Return 1.0 / 200.0 * X ^ 2
    End Function
   
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        e.Graphics.DrawImage(img, 0, 0)
    End Sub
End Class

よねKEN 2010/05/19

129:[ [Winアプリ]筆のようなもの2 ]

前回の投稿にさらに改良を加えて、滑らかな筆運びになるようにしてみました。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace PaintApp
{
    public partial class Form1 : Form
    {
        private Image image;
        private Color color;
        Point oldPoint, newPoint;
        int oldPenWidth, newPenWidth;
        Graphics g;
        Queue<Point> oldPoints;

        public Form1()
        {
            InitializeComponent();
        }

        private int GetPenWidth(Point point1, Point point2)
        {
            // 筆ペン - ペンのサイズ
            int penWidth = Math.Abs(point2.X - point1.X) + Math.Abs(point2.Y - point1.Y);
            return penWidth > 0 ? penWidth : 1;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            if (image != null)
            {
                e.Graphics.DrawImage(image, 0, 0);
            }
        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                oldPoint = newPoint;
                newPoint = e.Location;
                oldPoints.Enqueue(newPoint);
                if (oldPoints.Count > 10)
                {
                    oldPoints.Dequeue();
                }

                oldPenWidth = newPenWidth;
                int delta = GetPenWidth(oldPoint, newPoint) - oldPenWidth;
                int sign = Math.Sign(delta);
                newPenWidth = oldPenWidth + sign * Math.Min(5, Math.Abs(delta));

                using (Pen pen = new Pen(color, newPenWidth))
                {
                    pen.StartCap = LineCap.Round;
                    pen.EndCap = LineCap.Round;
                    pen.LineJoin = LineJoin.Round;

                    g.DrawLines(pen, oldPoints.ToArray());
                }
                this.Invalidate();
            }
        }

        protected override void OnLoad(EventArgs e)
        {
            this.DoubleBuffered = true;
            color = Color.Black;
            image = new Bitmap(800, 600);

            g = Graphics.FromImage(image);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            g.FillRectangle(Brushes.White, 0, 0, image.Width, image.Height);
            oldPoints = new Queue<Point>();
        }

        protected override void OnMouseDown(MouseEventArgs e)
        {
            oldPoint = newPoint = e.Location;
            oldPenWidth = newPenWidth = 1;

            oldPoints.Enqueue(newPoint);
        }

        protected override void OnMouseUp(MouseEventArgs e)
        {
            oldPoints.Clear();
        }
    }
}

よねKEN 2010/05/07

128:[ [Winアプリ]筆のようなもの ]

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace PaintApp
{
    public partial class Form1 : Form
    {
        private Image image;
        private Color color;
        Point oldPoint, newPoint;
        Graphics g;
        Queue<Point> oldPoints;

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            if (image != null)
            {
                e.Graphics.DrawImage(image, 0, 0);
            }
        }

        private int GetPenWidth(Point point1, Point point2)
        {
            // 筆ペン - ペンのサイズ
            int penWidth = Math.Abs(point2.X - point1.X) + Math.Abs(point2.Y - point1.Y);
            return penWidth > 0 ? penWidth : 1;
        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                oldPoint = newPoint;
                newPoint = e.Location;
                oldPoints.Enqueue(newPoint);
                if (oldPoints.Count > 10)
                {
                    oldPoints.Dequeue();
                }

                using (Pen pen = new Pen(color, GetPenWidth(oldPoint, newPoint)))
                {
                    pen.StartCap = LineCap.Round;
                    pen.EndCap = LineCap.Round;
                    pen.LineJoin = LineJoin.Round;

                    g.SmoothingMode = SmoothingMode.AntiAlias;
                    g.DrawLines(pen, oldPoints.ToArray());
                }
                this.Invalidate();
            }
        }

        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {
            this.DoubleBuffered = true;
            color = Color.Black;
            image = new Bitmap(700, 300);
            g = Graphics.FromImage(image);

            g.FillRectangle(Brushes.White, 0, 0, image.Width, image.Height);
            oldPoints = new Queue<Point>();
        }

        protected override void OnMouseDown(MouseEventArgs e)
        {
            oldPoint.X = newPoint.X = e.X;
            oldPoint.Y = newPoint.Y = e.Y;

            oldPoints.Enqueue(newPoint);
        }

        protected override void OnMouseUp(MouseEventArgs e)
        {
            oldPoint.X = newPoint.X = e.X;
            oldPoint.Y = newPoint.Y = e.Y;

            oldPoints.Clear();
        }
    }
}
よねKEN 2010/05/06

127:[ HorizontalContentAlignment="Stretch"は必ずしも期待通りには行かない。 ]

○TreeViewItem、ExpanderなどのHeaderedContentControl系の
  ヘッダー部(というか見た目は単なるツリーの項目だったり、Expanderのタイトルだったり)の水平伸ばし
  ※Expanderに関してはExpanderDirectionが水平方向の場合

  ツリーの項目やエクスパンダーそのもののサイズを水平方向に伸ばしたいと思って、
  HorizontalContentAlignment="Stretch"を指定してもヘッダー部は水平に伸ばせない。

  例) TreeViewItemの場合。TreeViewの右端を「|」で表すと以下のようなことがしたい場合
    + [あいう]             |→ + [あいう                    ]|

  3列のGridで構成されており、
    0列→アイコン用の固定サイズ(Width=数値指定)
    1列→表示内容に合わせて(Width=Auto指定)
    2列→残りのすべて(Width=*指定)
 となっており、1列目がヘッダー部となっている。幅がAuto指定のため、Stretchに反応してくれない。

  水平方向に伸ばすためには、それぞれのControlTemplateを置き換えてやるしかないorz

  
よねKEN 2010/02/24

126:[ [WPF]使用不可のコントロール上でもツールチップを表示する方法 ]

ToolTipService.ShowOnDisabled="True" (XAML)
のように各コントロールに対するToolTipServiceのプロパティ設定で実現可能。

よねKEN 2010/02/24

125:[ [WPF]ウィンドウのクライアント領域のサイズを求める ]

海外サイトで有用な情報を発見。
http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/09/20/wpf-quick-tip-how-to-get-wpf-window-client-area-size.aspx

System.Windows.Forms名前空間のSystemInformationクラスを使うしかないのか?と
探し回っていたら、上記のサイトにいくつかやり方があった。

で、WPFにもSystemInformationクラスにあたるものがあった。
System.Windows.SystemParametersクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.systemparameters_members.aspx

参考URL通りでうまく行った。
よねKEN 2010/01/28

124:[ コントロールのデフォルトスタイルを調べる方法 ]

以下のようなコードで、既存のコントロールが
どんなデフォルトスタイル持っているかが調べられる。

StringWriter sw = new StringWriter();
XmlTextWriter xtw = new XmlTextWriter(sw);
xtw.Formatting = Formatting.Indented;
FrameworkElement fe = new ComboBox();   // ここのComboBoxを変更すればいい

object dp = fe.GetValue(FrameworkElement.DefaultStyleKeyProperty);
object o = Application.Current.TryFindResource(dp);

System.Windows.Markup.XamlWriter.Save(o, xtw);
Debug.WriteLine(sw.ToString());

でも、・・・そもそもUniformGridについて調べたかったのですが、
UniformGridに対してはうまく行きませんorz
よねKEN 2010/01/28

123:[ [WPF]CanvasのGetLeft/GetTopはデフォルトでNaNを返す ]

Canvasクラスのcanvas1上にPathクラスのPieceオブジェクトをコードから配置している。
Pieceをマウスでドラッグするコードだが、最初、
Pieceの座標を明示的に(0,0)に設定していなかった。
実行した際の画面の表示上はcanvas1の原点位置にPieceが表示されていたからだ。
しかし、MouseMoveイベントで現在のPieceの位置を取得するために、
Canvas.GetLeft/GetTopメソッドを使用したところ、
Double.NaNが返ってきていたため、思ったようにマウスでドラッグ操作ができなかった。
Canvas.SetLeft/SetTopで値を設定していない場合、
Canvas.GetLeft/GetTopが返す値は0ではなくNaNであるので注意が必要だ。

//--- コードの断片 このコードだけでは実行できません --
private Path Piece;

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    Piece = new Path();
    // Pathの形状等を設定するコードは省略

    canvas1.Children.Add(Piece);	// canvas1にPieceを配置
    Canvas.SetLeft(Piece, 0);		// Pieceの座標xを設定
    Canvas.SetTop(Piece, 0);		// Pieceの座標xを設定
}

private bool isInDrag;
private Point prevPosition;
private void canvas1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (e.Source == Piece)
    {
        prevPosition = e.GetPosition((IInputElement)sender);
        isInDrag = true;
    }
}

private void canvas1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed && isInDrag)
    {
        Point newPosition = e.GetPosition((IInputElement)sender);
        Canvas.SetLeft(Piece, Canvas.GetLeft(Piece) + newPosition.X - prevPosition.X);
        Canvas.SetTop(Piece, Canvas.GetTop(Piece) + newPosition.Y - prevPosition.Y);
        prevPosition = newPosition;
    }
}

private void canvas1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    isInDrag = false;
}

よねKEN 2010/01/18

122:[ DriveInfoクラスが.NET2.0で追加されていることに今頃気づいた ]

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        IOutil.GetAllFiles();
        Console.Read();
    }
}

static class IOutil
{
    public static void GetAllFiles()
    {
        foreach (DriveInfo drive in DriveInfo.GetDrives())
        {
            Console.Write("{0} ", drive.Name);
            if (drive.IsReady)
            {
                Console.WriteLine("{0} {1}", drive.TotalSize, drive.TotalFreeSpace);
                GetAllFiles(drive.RootDirectory, 0);
            }
            else
            {
                Console.WriteLine("準備ができていません。");
            }
        }
    }

    private static void GetAllFiles(DirectoryInfo parent, int depth)
    {
        Console.WriteLine("{0}{1} {2}", new String(' ', depth) , parent.Name + "/", parent.FullName);
        try
        {
            foreach (DirectoryInfo child in parent.GetDirectories())
            {
                GetAllFiles(child, depth + 1);
            }
        }
        catch (UnauthorizedAccessException uae)
        {
            Console.WriteLine(parent.Name + ":GetDirectories:" + uae.Message);
        }

        try
        {

            foreach (FileInfo file in parent.GetFiles())
            {
                Console.WriteLine("{0}{1} {2}", new String(' ', depth + 1), file.Name, file.FullName);
            }
        }
        catch (UnauthorizedAccessException uae)
        {
            Console.WriteLine(parent.Name + ":GetFiles:" + uae.Message);
        }
    }
   
}


よねKEN 2009/02/17

121:[ C#におけるVBのStopステートメントの代わりになるもの ]

あまり使う人はいないと思うけど、以下のメソッドで同じことが可能。

System.Diagnostics.Debugger.Break();

よねKEN 2009/02/15

120:[ 指定サイズに指定テキストが収まるフォントを作成する ]

言語はC#です。

        public Font CreatePrefferedFont(Graphics g, string fontName, String text, Size layoutSize)
        {

            Font f = new Font(fontName, layoutSize.Height, GraphicsUnit.Pixel);
            SizeF textSize = g.MeasureString(text, f);
            if (textSize.Width < layoutSize.Width)
            {
                return f;
            }
            else
            {
                f.Dispose();
                return new Font(fontName, (int)(layoutSize.Height * layoutSize.Width / textSize.Width), GraphicsUnit.Pixel);
            }
        }

よねKEN 2009/02/12

119:[ Array.ConvertAllがなかなか便利 ]

以下のコード(C#)は自分で使う用のやっつけプログラムから編集したものです。
とあるオブジェクトのNameプロパティには
『固定値"cell" + 1桁の整数 + "," + 1桁の整数』
という値をセットしてありました。
この文字列から整数値だけを取り出したいわけですが、
.NET Framework2.0で追加されたArrayクラスのConvertAllメソッドを使うと
簡単に実現できます。このメソッドは、あるオブジェクトTInputの配列全体を
別のオブジェクトTOutputの配列に変換してくれます。(元の配列は変更しません)
その際、TInputからTOutputへどのように変換するかは、
変換用のデリゲートconveterをパラメータとして渡します。


<Array.ConvertAllのシグネチャ>
TOutput[] Array.ConvertAll(
    TInput[] array, Converter converter
)

http://msdn.microsoft.com/ja-jp/library/exc45z53(VS.80).aspx

<コード例>
string name = "cell3,4";
int[] point = Array.ConvertAll(name.Substring("cell".Length).Split(','), int.Parse);
for (int i = 0; i < point.Length; i++)
{
    Console.WriteLine("{0}番目:{1}",i, point[i]);
}

<解説>
このコードでは文字列処理により"3"と"4"の配列を準備し、
それに対して、int.Parseを用いてstring配列→int配列の変換を行っています。

よねKEN 02/02 09:49

118:[ UserControlにデザイナ上で子コントロールを配置する機能を付加する ]

System.Windows.Forms.Design.ParentControlDesignerクラス、
または、このクラスを拡張したものを使う。
このクラスはSystem.Design.dllに含まれる。


■使用方法 (コード例はC#)

[Designer(typeof(ParentControlDesigner), typeof(IDesigner))]
public partial class UserControlA : UserControl
{
  :略

※IDesignerは System.ComponentModel.Design.IDesignerクラス


よねKEN 11/27 13:24

117:[ NaNの比較、等号とEqualsは同じ結果ではない ]

浮動小数点のNaN同士を比較する場合に等号による比較と
Equalsメソッドによる比較では結果が異なります。

'------ 確認サンプル
Module DoubleTest
    Sub Main()
        Dim a As Double = Double.NaN
        Dim b As Double = Double.NaN
        
        Console.WriteLine("NaN = NaN は成立する?->{0}", a = b)                ' False 
        Console.WriteLine("NaN.Equals(NaN) は成立する?->{0}", a.Equals(b))    ' True 
    End Sub
End Module

'------- 確認サンプル実行結果
NaN = NaN は成立する?->False
NaN.Equals(NaN) は成立する?->True

'------- なぜこのような結果になるかの理由

二つの浮動小数点数NaNは、IEC60559:1989によって、
常に等価ではないとして比較されると定義されています。
これにより等号演算子の比較では、Falseを返すのが期待される動作になります。

それに対して、Equalsメソッドはオブジェクトが同値であるかどうかを
判断するため、オブジェクトとしてのNaN同士は同値であり、
Trueが返されることが期待される動作になります。

よねKEN 11/25 13:11

116:[ WPF関連情報 ]

WPF アプリケーションを作る クッキングガイド
http://www.microsoft.com/japan/msdn/windowsvista/wpf/cookingguide/default.aspx
よねKEN 06/20 17:04

115:[ \演算子の優先順位は*、/よりも低い ]

(1) 10 \ 3 * 4
(2) (10 \ 3) * 4

(1)の答えは0、(2)の答えは12になります。
これは*、/演算子よりも\演算子の優先順位が低いため。

#\演算子を使うときは式を連続的に書かないか、見易さのため()を
#使うようにしていたので、VBを10年以上やってきて初めて知ったよorz

よねKEN 03/11 11:48

114:[ [.NET2.0]ILプログラムで.typedefが使える ]

// .NET Framework 2.0で使えるようになった.typedefの使用例

.typedef [mscorlib]System.Console as Console
.typedef method void Console::WriteLine(string) as WriteLine
.typedef field string A::B as AB

.method public static void main() cil managed
{
	.entrypoint
	.maxstack 8
	.locals init (class A X)

	ldstr "TypeDef method Test!"
	call WriteLine
	newobj instance void A::.ctor()
	stloc X
	ldloc X
	ldstr "TypeDef field Test!"
	stfld AB
	ldloc X
	ldfld AB
	call WriteLine
	ret
}

.class public auto ansi A extends [mscorlib]System.Object
{
	.field public string B

	.method public void .ctor()
	{
		ldarg.0 //this
		call    instance void [mscorlib]System.Object::.ctor()
		ret
	}
	
}
よねKEN 03/17 23:17

113:[ ECMA-335を読むための英語(その2) ]

whereas
	 〜であるのに対して、〜である一方で
respectively 
	それぞれに
clause
	箇条、節
circumvent
	迂回する、避ける、出し抜く
conformance
	一致、適合
normative
	基準の、標準の、規範的な
informative
	情報を提供する、参考になる
compliance
	規則に従うこと、規則などの順守
	→[形] compliant
built-in
	内蔵(式)、組み込み
assignment
	割り当て、配置、代入
assignment compatibility 
	代入互換性
coercion
	強制
volatile
	揮発性
imprecise 
	不明確な
semantics
	意味論、[プログラムの]動作
hypothetical
	仮説、仮想
claim
	要求、主張
	要求する、主張する
mandatory
	義務的な、強制的な
requirement
	要件
profile
	[物の]輪郭
minimal
	最低限の
conform
	[規則などに]従う、一致する、適合する
solely
	単に
rely
	頼る、信頼する(rely onの形で使う)
standardize
	規格化する、標準化する
cite
	〜を引用する
as such
	そのようなものとして、それ自体は
	→ それ自体は、xxxだ。(肯定的な内容) しかし、yyyだ。(否定的な内容)
explanatory
	説明のための
annex
	付録、別館
as follows 
	次のとおりで
erroneous
	間違った、誤りのある
impose
	課す
invocation 
	呼び出し、軌道
subsequent
	後続の

よねKEN 03/17 21:53

112:[ ECMA-335を読むための英語 ]

code point
	(Unicodeの)文字コード番号
modifier
	修飾子
	例) class modifier → public、privateなど
corresponding
	(形) 対応する、相当する
slightly
	わずかに
dereference
	逆参照する
i.e.
	すなわち、言い換えれば(=that is,)
	【語源】〈ラテン語〉id est の略
hence
	だから、それ故に
syntactically
	構文的には

よねKEN 03/16 14:40

111:[ [,NET2.0]ILプログラムで#defineが使える ]

.NET Framework2.0のilasmでは#defineディレクティブが使えます。
使い方は以下の通り。

#define WRITELINE "[mscorlib]System.Console::WriteLine"

.assembly Define {}
.method public static void main()
{
    .entrypoint
    .maxstack 2

    ldstr "Hello World!"
    call void WRITELINE(string)
    ret
}

よねKEN 03/11 19:39

110:[ Console.WriteLineの可変引数版を呼び出すILプログラム ]

Console.WriteLineメソッドには
「Console.WriteLine(string, object, object, object,object, ...)」
というobjectを可変個取れるオーバーロードがある。
しかし同時にConsole.WriteLine(string, params object[])という
VB/C#上での可変引数(VBのParamArray)に対応するパターンのオーバーロードがあるので、
最初に示したオーバーロードが使われることがない。たぶん。
ちなみにParamArrayは可変引数の分のパラメータは
コンパイル時にそれらを詰め込んだobject型の配列へと変換されているだけである。

--------------------------------------------------
// ilasm Arglist.il
.assembly extern mscorlib {}
.assembly ArglistTest {}
.method public static void Main() cil managed
{
    .entrypoint
    .maxstack 16

    ldstr "ArglistTest {0} {1} {2} {3} {4} {5} {6}"
    ldstr "strA"
    ldstr "strB"
    ldstr "strC"
    ldstr "strD"
    //---------- 可変引数部分
    ldstr "strE"
    ldstr "strF"
    ldstr "strG"
    call vararg void [mscorlib]System.Console::WriteLine(
        string, object, object, object, object, ..., object, object, object)
    ret
}
-----------------------------------------------------
正直な話、あまり利便性はないような気がする(^^;

よねKEN 03/09 01:30

109:[ Formを表示するILプログラム ]

Formを表示するだけのWindowsアプリ。
#ILプログラムとして必要な要素だけで、
#ilasmでアセンブル際には適当に補完してくれる省略可能なものは
#いろいろ省略してます。

/* ilasm /subsystem=2 WinForm.il */
.assembly extern System.Windows.Forms {
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
}
.assembly WinForm {}
.method public static void main()
{ 
    .entrypoint
    .maxstack 1
    newobj instance void [System.Windows.Forms]System.Windows.Forms.Form::.ctor()
    call void [System.Windows.Forms]System.Windows.Forms.
        Application::Run(class [System.Windows.Forms]System.Windows.Forms.Form)
    ret
}
よねKEN 03/08 23:07

108:[ .NET 2.0:EventHandler ジェネリック デリゲート ]

http://msdn2.microsoft.com/ja-jp/library/db0etb8x(VS.80).aspx
独自イベントを作るときに毎度毎度、専用のEventHandlerを作らなければならなかったが、
このデリゲートのおかげで自前の定義が不要になったっぽい。
独自のEventArgsを作るだけでOK!

よねKEN 03/04 18:23

107:[ .NET 2.0:System.Windows.Forms.VisualStyles以下の新クラス ]

VisualStyleElement
VisualStyleElement.Button
VisualStyleElement.Button.CheckBox
VisualStyleElement.Button.PushButton
VisualStyleElement.Button.RadioButton
VisualStyleElement.Button.UserButton
VisualStyleElement.ComboBox
VisualStyleElement.ComboBox.DropDownButton
VisualStyleElement.ExplorerBar
VisualStyleElement.ExplorerBar.HeaderBackground
VisualStyleElement.ExplorerBar.HeaderClose
VisualStyleElement.ExplorerBar.HeaderPin
VisualStyleElement.ExplorerBar.IEBarMenu
VisualStyleElement.ExplorerBar.NormalGroupBackground
VisualStyleElement.ExplorerBar.NormalGroupCollapse
VisualStyleElement.ExplorerBar.NormalGroupExpand
VisualStyleElement.ExplorerBar.NormalGroupHead
VisualStyleElement.ExplorerBar.SpecialGroupBackground
VisualStyleElement.ExplorerBar.SpecialGroupCollapse
VisualStyleElement.ExplorerBar.SpecialGroupHead
VisualStyleElement.Header
VisualStyleElement.Header.Item
VisualStyleElement.Header.ItemLeft
VisualStyleElement.Header.ItemRight
VisualStyleElement.Header.SortArrow
VisualStyleElement.ListView
VisualStyleElement.ListView.EmptyText
VisualStyleElement.ListView.Group
VisualStyleElement.ListView.Item
VisualStyleElement.ListView.SortedDetail
VisualStyleElement.Menu
VisualStyleElement.Menu.BarDropDown
VisualStyleElement.Menu.BarItem
VisualStyleElement.Menu.Chevron
VisualStyleElement.Menu.DropDown
VisualStyleElement.Menu.Item
VisualStyleElement.Menu.Separator
VisualStyleElement.MenuBand
VisualStyleElement.MenuBand.NewApplicationButton
VisualStyleElement.Page
VisualStyleElement.Page.Down
VisualStyleElement.Page.DownHorizontal
VisualStyleElement.Page.Up
VisualStyleElement.ProgressBar
VisualStyleElement.ProgressBar.Bar
VisualStyleElement.ProgressBar.BarVertical
VisualStyleElement.ProgressBar.Chunk
VisualStyleElement.ProgressBar.ChunkVertical
VisualStyleElement.Rebar
VisualStyleElement.Rebar.Band
VisualStyleElement.Rebar.Chevron
VisualStyleElement.Rebar.ChevronVertical
VisualStyleElement.Rebar.Gripper
VisualStyleElement.ScrollBar
VisualStyleElement.ScrollBar.ArrowButton
VisualStyleElement.ScrollBar.GripperHorizontal
VisualStyleElement.ScrollBar.GripperVertical
VisualStyleElement.ScrollBar.LeftTrackHorizontal
VisualStyleElement.ScrollBar.RightTrackHorizontal
VisualStyleElement.ScrollBar.SizeBox
VisualStyleElement.ScrollBar.ThumbButtonHorizontal
VisualStyleElement.ScrollBar.ThumbButtonVertical
VisualStyleElement.ScrollBar.UpperTrackVertical
VisualStyleElement.Spin
VisualStyleElement.Spin.DownHorizontal
VisualStyleElement.Spin.Up
VisualStyleElement.StartPanel
VisualStyleElement.StartPanel.LogOff
VisualStyleElement.StartPanel.LogOffButtons
VisualStyleElement.StartPanel.MorePrograms
VisualStyleElement.StartPanel.MoreProgramsArrow
VisualStyleElement.StartPanel.PlaceListSeparator
VisualStyleElement.StartPanel.ProgListSeparator
VisualStyleElement.StartPanel.UserPane
VisualStyleElement.StartPanel.UserPicture
VisualStyleElement.Status
VisualStyleElement.Status.Bar
VisualStyleElement.Status.Gripper
VisualStyleElement.Status.Pane
VisualStyleElement.Tab.Body
VisualStyleElement.Tab.Pane
VisualStyleElement.Tab.TabItem
VisualStyleElement.Tab.TabItemBothEdges
VisualStyleElement.Tab.TabItemLeftEdge
VisualStyleElement.Tab.TabItemRightEdge
VisualStyleElement.Tab.TopTabItem
VisualStyleElement.Tab.TopTabItemBothEdges
VisualStyleElement.Tab.TopTabItemRightEdge
VisualStyleElement.TaskBand
VisualStyleElement.TaskBand.FlashButton
VisualStyleElement.TaskBand.FlashButtonGroupMenu
VisualStyleElement.TaskBand.GroupCount
VisualStyleElement.Taskbar
VisualStyleElement.Taskbar.BackgroundBottom
VisualStyleElement.Taskbar.BackgroundTop
VisualStyleElement.Taskbar.SizingBarBottom
VisualStyleElement.Taskbar.SizingBarRight
VisualStyleElement.Taskbar.SizingBarTop
VisualStyleElement.TaskbarClock
VisualStyleElement.TextBox
VisualStyleElement.TextBox.Caret
VisualStyleElement.TextBox.TextEdit
VisualStyleElement.ToolBar
VisualStyleElement.ToolBar.Button
VisualStyleElement.ToolBar.DropDownButton
VisualStyleElement.ToolBar.SeparatorHorizontal
VisualStyleElement.ToolBar.SeparatorVertical
VisualStyleElement.ToolBar.SplitButton
VisualStyleElement.ToolBar.SplitButtonDropDown
VisualStyleElement.ToolTip
VisualStyleElement.ToolTip.Balloon
VisualStyleElement.ToolTip.BalloonTitle
VisualStyleElement.ToolTip.Close
VisualStyleElement.TrackBar
VisualStyleElement.TrackBar.Thumb
VisualStyleElement.TrackBar.ThumbBottom
VisualStyleElement.TrackBar.ThumbLeft
VisualStyleElement.TrackBar.ThumbRight
VisualStyleElement.TrackBar.ThumbTop
VisualStyleElement.TrackBar.ThumbVertical
VisualStyleElement.TrackBar.Ticks
VisualStyleElement.TrackBar.TicksVertical
VisualStyleElement.TrackBar.Track
VisualStyleElement.TrackBar.TrackVertical
VisualStyleElement.TrayNotify
VisualStyleElement.TrayNotify.AnimateBackground
VisualStyleElement.TreeView
VisualStyleElement.TreeView.Branch
VisualStyleElement.TreeView.Glyph
VisualStyleElement.TreeView.Item
VisualStyleElement.Window
VisualStyleElement.Window.Caption
VisualStyleElement.Window.CaptionSizingTemplate
VisualStyleElement.Window.CloseButton
VisualStyleElement.Window.Dialog
VisualStyleElement.Window.FrameBottom
VisualStyleElement.Window.FrameBottomSizingTemplate
VisualStyleElement.Window.FrameLeft
VisualStyleElement.Window.FrameRightSizingTemplate
VisualStyleElement.Window.HelpButton
VisualStyleElement.Window.HorizontalScroll
VisualStyleElement.Window.HorizontalThumb
VisualStyleElement.Window.MaxButton
VisualStyleElement.Window.MaxCaption
VisualStyleElement.Window.MdiCloseButton
VisualStyleElement.Window.MdiHelpButton
VisualStyleElement.Window.MdiSysButton
VisualStyleElement.Window.MinButton
VisualStyleElement.Window.MinCaption
VisualStyleElement.Window.RestoreButton
VisualStyleElement.Window.SmallCaption
VisualStyleElement.Window.SmallCaptionSizingTemplate
VisualStyleElement.Window.SmallCloseButton
VisualStyleElement.Window.SmallFrameBottom
VisualStyleElement.Window.SmallFrameBottomSizingTemplate
VisualStyleElement.Window.SmallFrameLeftSizingTemplate
VisualStyleElement.Window.SmallFrameRight
VisualStyleElement.Window.SmallFrameRightSizingTemplate
VisualStyleElement.Window.SmallMaxCaption
VisualStyleElement.Window.SmallMinCaption
VisualStyleElement.Window.VerticalScroll
VisualStyleElement.Window.VerticalThumb
VisualStyleInformation
VisualStyleRenderer

よねKEN 03/04 18:08

106:[ .NET 2.0:System.Windows.Forms.Layout以下の新クラス ]

ArrangedElementCollection
LayoutEngine
TableLayoutSettingsTypeConverter

よねKEN 03/04 18:08

105:[ .NET 2.0:System.Windows.Forms.Design.Behavior以下の新クラス ]

Adorner
Behavior
BehaviorDragDropEventArgs
BehaviorService
BehaviorServiceAdornerCollection
BehaviorServiceAdornerCollectionEnumerator
ComponentGlyph
ControlBodyGlyph
Glyph
GlyphCollection
SnapLine

よねKEN 03/04 18:07

104:[ .NET 2.0:System.Windows.Forms.Design以下の新クラス ]

BorderSidesEditor
ImageListCodeDomSerializer
ImageListImageEditor
MaskDescriptor
ShortcutKeysEditor
WindowsFormsDesignerOptionService

よねKEN 03/04 18:06

103:[ .NET 2.0:System.Windows.Forms以下の新クラス ]

AutoCompleteStringCollection
BindingCompleteEventArgs
BindingManagerDataErrorEventArgs
BindingNavigator
BindingSource
ButtonRenderer
CacheVirtualItemsEventArgs
CheckBoxRenderer
ColumnHeaderConverter
ColumnReorderedEventArgs
ColumnStyle
ColumnWidthChangedEventArgs
ColumnWidthChangingEventArgs
ComboBoxRenderer
ContextMenuStrip
DataGridView.DataGridViewAccessibleObject
DataGridView.DataGridViewControlCollection
DataGridView.DataGridViewTopRowAccessibleObject
DataGridView.HitTestInfo
DataGridViewAdvancedBorderStyle
DataGridViewAutoSizeColumnModeEventArgs
DataGridViewAutoSizeColumnsModeEventArgs
DataGridViewAutoSizeModeEventArgs
DataGridViewBand
DataGridViewBindingCompleteEventArgs
DataGridViewButtonCell
DataGridViewButtonCell.DataGridViewButtonCellAccessibleObject
DataGridViewButtonColumn
DataGridViewCell
DataGridViewCellCancelEventArgs
DataGridViewCellCollection
DataGridViewCellContextMenuStripNeededEventArgs
DataGridViewCellErrorTextNeededEventArgs
DataGridViewCellEventArgs
DataGridViewCellFormattingEventArgs
DataGridViewCellMouseEventArgs
DataGridViewCellPaintingEventArgs
DataGridViewCellParsingEventArgs
DataGridViewCellStateChangedEventArgs
DataGridViewCellStyle
DataGridViewCellStyleContentChangedEventArgs
DataGridViewCellStyleConverter
DataGridViewCellToolTipTextNeededEventArgs
DataGridViewCellValidatingEventArgs
DataGridViewCellValueEventArgs
DataGridViewCheckBoxCell
DataGridViewCheckBoxColumn
DataGridViewColumn
DataGridViewColumnCollection
DataGridViewColumnDesignTimeVisibleAttribute
DataGridViewColumnDividerDoubleClickEventArgs
DataGridViewColumnEventArgs
DataGridViewColumnHeaderCell
DataGridViewColumnHeaderCell
DataGridViewColumnStateChangedEventArgs
DataGridViewComboBoxCell
DataGridViewComboBoxCell.ObjectCollection
DataGridViewComboBoxColumn
DataGridViewComboBoxEditingControl
DataGridViewDataErrorEventArgs
DataGridViewEditingControlShowingEventArgs
DataGridViewElement
DataGridViewHeaderCell
DataGridViewImageCell
DataGridViewImageCell.DataGridViewImageCellAccessibleObject
DataGridViewImageColumn
DataGridViewLinkCell
DataGridViewLinkCell.DataGridViewLinkCellAccessibleObject
DataGridViewLinkColumn
DataGridViewRow
DataGridViewRow.DataGridViewRowAccessibleObject
DataGridViewRowCancelEventArgs
DataGridViewRowCollection
DataGridViewRowDividerDoubleClickEventArgs
DataGridViewRowErrorTextNeededEventArgs
DataGridViewRowEventArgs
DataGridViewRowHeaderCell
DataGridViewRowHeightInfoNeededEventArgs
DataGridViewRowHeightInfoPushedEventArgs
DataGridViewRowPrePaintEventArgs
DataGridViewRowsAddedEventArgs
DataGridViewRowsRemovedEventArgs
DataGridViewRowStateChangedEventArgs
DataGridViewSelectedCellCollection
DataGridViewSelectedColumnCollection
DataGridViewSelectedRowCollection
DataGridViewSortCompareEventArgs
DataGridViewTextBoxCell
DataGridViewTextBoxColumn
DataGridViewTextBoxEditingControl
DataGridViewTopLeftHeaderCell
DataGridViewTopLeftHeaderCell
DockingAttribute
DrawListViewSubItemEventArgs
DrawToolTipEventArgs
DrawTreeNodeEventArgs
FlatButtonAppearance
FlowLayoutPanel
FlowLayoutSettings
FormClosedEventArgs
FormClosingEventArgs
FormCollection
GroupBoxRenderer
HandledMouseEventArgs
HScrollProperties
HtmlDocument
HtmlElement
HtmlElementCollection
HtmlElementErrorEventArgs
HtmlElementEventArgs
HtmlHistory
HtmlWindow
HtmlWindowCollection
ImageKeyConverter
ItemCheckedEventArgs
LinkConverter
ListBindingHelper
ListBox.IntegerCollection
ListControlConvertEventArgs
ListViewGroup
ListViewGroupCollection
ListViewHitTestInfo
ListViewInsertionMark
ListViewItemMouseHoverEventArgs
ListViewItemSelectionChangedEventArgs
ListViewVirtualItemsSelectionRangeChangedEventArgs
MaskedTextBox
MaskInputRejectedEventArgs
MenuStrip
NumericUpDownAcceleration
NumericUpDownAccelerationCollection
PaddingConverter
PopupEventArgs
PowerStatus
PreviewKeyDownEventArgs
ProfessionalColors
ProfessionalColorTable
ProgressBarRenderer
QuestionEventArgs
RadioButtonRenderer
RelatedImageListAttribute
RetrieveVirtualItemEventArgs
RowStyle
ScrollBarRenderer
ScrollProperties
SearchForVirtualItemEventArgs
SplitContainer
SplitterCancelEventArgs
SplitterPanel
StatusStrip
TableLayoutCellPaintEventArgs
TableLayoutColumnStyleCollection
TableLayoutControlCollection
TableLayoutPanel
TableLayoutRowStyleCollection
TableLayoutSettings
TableLayoutStyle
TabRenderer
TextBoxRenderer
TextRenderer
ToolStrip
ToolStrip.ToolStripAccessibleObject
ToolStripArrowRenderEventArgs
ToolStripButton
ToolStripComboBox
ToolStripContainer
ToolStripContentPanel
ToolStripContentPanelRenderEventArgs
ToolStripControlHost
ToolStripDropDown
ToolStripDropDown.ToolStripDropDownAccessibleObject
ToolStripDropDownButton
ToolStripDropDownClosedEventArgs
ToolStripDropDownClosingEventArgs
ToolStripDropDownItem
ToolStripDropDownItemAccessibleObject
ToolStripDropDownMenu
ToolStripGripRenderEventArgs
ToolStripItem
ToolStripItemClickedEventArgs
ToolStripItemCollection
ToolStripItemDesignerAvailabilityAttribute
ToolStripItemEventArgs
ToolStripItemImageRenderEventArgs
ToolStripItemRenderEventArgs
ToolStripItemTextRenderEventArgs
ToolStripLabel
ToolStripManager
ToolStripMenuItem
ToolStripOverflow
ToolStripOverflowButton
ToolStripPanel
ToolStripPanel.ToolStripPanelRowCollection
ToolStripPanelRenderEventArgs
ToolStripPanelRow
ToolStripProfessionalRenderer
ToolStripProgressBar
ToolStripRenderer
ToolStripRenderEventArgs
ToolStripSeparator
ToolStripSeparatorRenderEventArgs
ToolStripSplitButton
ToolStripSplitButton.ToolStripSplitButtonAccessibleObject
ToolStripStatusLabel
ToolStripSystemRenderer
ToolStripTextBox
TrackBarRenderer
TreeNodeMouseClickEventArgs
TreeNodeMouseHoverEventArgs
TreeViewHitTestInfo
TreeViewImageKeyConverter
TypeValidationEventArgs
VScrollProperties
WebBrowser
WebBrowser.WebBrowserSite
WebBrowserBase
WebBrowserDocumentCompletedEventArgs
WebBrowserNavigatedEventArgs
WebBrowserNavigatingEventArgs
WebBrowserProgressChangedEventArgs
WebBrowserSiteBase
WindowsFormsSection
WindowsFormsSynchronizationContext

よねKEN 03/04 18:05

102:[ DateTimePickerの不具合 ]

1.FormにDateTimePickerを配置する。
2.DateTimePickerのFormatプロパティをCustomに、
  CustomFormatプロパティを"yyyy/MM"に設定する。
3.DateTimePickerのShowUpDownプロパティをFalseにし、
  カレンダーが表示できるようにする。
4.このアプリを実行し、
  例えば、カレンダーで2004/3/31をクリックして選ぶ。
5.次に、2004/03と表示されているところの03を02に変更しようとする。
6.DateTimePickerから例外が発生する。

これはCustomFormatをyyyy/MM/ddのように日付も表示される形式では起きない。

表示がyyyy/MMのように年月のときでも内部ではDate型で扱っているにも関わらず、
表示に引きずられてカレンダーで選ばれる日付について考慮していないための
ケアレスミスだと思います。

よねKEN 04/02 17:47

101:[ ちらつかない描画と画像の保存 ]

#昔に某所に投稿した内容を元に抜粋&修正

PictureBoxがあり、そこに描画する場合

1.PictureBoxと同サイズの空のBitmapオブジェクトを用意。
2.GraphicsクラスのFromImageメソッドでこのBitmapからGraphicsオブジェクトを取得。
3.PictureBoxのPaintイベントで行う予定の描画は2.で取得したGraphicsオブジェクトに対して行う。
4.この段階で、1.で用意したBitmapオブジェクトに描きたい内容が描画されているので、
  このBitmapをPictureBoxのPaintイベントでe.Graphics.DrawImageを使って描画。
      →PictureBoxに表示される。
5.画像の保存はこのBitmapオブジェクトのSaveメソッドで。

という流れになります。
(PictureBoxに関してだけ言えば、Imageプロパティに空Bitmapを追加し、
 このImageからGraphics.FromImageでGraphicsを取得し、これに描画するだけ
 の方が簡単でしょう。上の例はPictureBox以外に描画する場合にもそのまま使えます。)




よねKEN 03/20 13:52

100:[ 矩形選択(ブロック選択) ]

VS.NETの開発環境上で、
 - Alt+Shift+矢印キー
 - Alt+マウス操作
のいずれかで矩形選択(ブロック選択)ができます。
エディタなんかで割りとよくある「四角く選択状態にする機能」です。

AILightさんのBlogの「VS.NETのエディターでソースを選択するときに」
http://www.ailight.jp/WeblogX/PermaLink.aspx/0a35e049-7f32-4183-9f54-2b0b8765f780

にあった情報なんですが、Alt+マウスだけでないという点が追加情報です。

よねKEN 03/18 02:32

99:[ サポートされているエンコーディング一覧 ]

■サポートされているエンコーディング一覧(Win2000(SP4)でチェック)
    0:Web=shift_jis,Name=日本語 (シフト JIS),WinCP=932
   37:Web=IBM037,Name=IBM EBCDIC (米国 - カナダ),WinCP=1252
  437:Web=IBM437,Name=OEM 米国,WinCP=1252
  500:Web=IBM500,Name=IBM EBCDIC (インターナショナル),WinCP=1252
  850:Web=ibm850,Name=西ヨーロッパ語 (DOS),WinCP=1252
  860:Web=IBM860,Name=ポルトガル語 (DOS),WinCP=1252
  861:Web=ibm861,Name=アイスランド語 (DOS),WinCP=1252
  863:Web=IBM863,Name=フランス語 (カナダ)(DOS),WinCP=1252
  865:Web=IBM865,Name=ノルウェー語 (DOS),WinCP=1252
  874:Web=windows-874,Name=タイ語 (Windows),WinCP=874
  932:Web=shift_jis,Name=日本語 (シフト JIS),WinCP=932
  936:Web=gb2312,Name=簡体字中国語 (GB2312),WinCP=936
  949:Web=ks_c_5601-1987,Name=韓国語,WinCP=949
  950:Web=big5,Name=繁体字中国語 (Big5),WinCP=950
 1200:Web=utf-16,Name=Unicode,WinCP=1200
 1201:Web=unicodeFFFE,Name=Unicode (Big-Endian),WinCP=1200
 1250:Web=windows-1250,Name=中央ヨーロッパ言語 (Windows),WinCP=1250
 1251:Web=windows-1251,Name=キリル語 (Windows),WinCP=1251
 1252:Web=Windows-1252,Name=西ヨーロッパ言語 (Windows),WinCP=1252
 1253:Web=windows-1253,Name=ギリシャ語 (Windows),WinCP=1253
 1254:Web=windows-1254,Name=トルコ語 (Windows),WinCP=1254
 1255:Web=windows-1255,Name=ヘブライ語 (Windows),WinCP=1255
 1256:Web=windows-1256,Name=アラビア語 (Windows),WinCP=1256
 1257:Web=windows-1257,Name=バルト語 (Windows),WinCP=1257
 1258:Web=windows-1258,Name=ベトナム語 (Windows),WinCP=1258
10000:Web=macintosh,Name=西ヨーロッパ言語 (Mac),WinCP=1252
10001:Web=x-mac-japanese,Name=日本語 (Mac),WinCP=932
10079:Web=x-mac-icelandic,Name=アイスランド語 (Mac),WinCP=1252
20000:Web=x-Chinese-CNS,Name=繁体字中国語 (CNS),WinCP=950
20127:Web=us-ascii,Name=US-ASCII,WinCP=1252
20261:Web=x-cp20261,Name=T.61,WinCP=1252
20290:Web=IBM290,Name=IBM EBCDIC (日本語カタカナ),WinCP=932
20866:Web=koi8-r,Name=キリル語 (KOI8-R),WinCP=1251
20932:Web=EUC-JP,Name=日本語 (JIS 0208-1990 and 0212-1990),WinCP=932
20936:Web=x-cp20936,Name=簡体字中国語 (GB2312-80),WinCP=936
20949:Web=x-cp20949,Name=韓国語 Wansung,WinCP=949
21027:Web=x-cp21027,Name=Ext Alpha Lowercase,WinCP=1252
28591:Web=iso-8859-1,Name=西ヨーロッパ言語 (ISO),WinCP=1252
28592:Web=iso-8859-2,Name=中央ヨーロッパ言語 (ISO),WinCP=1250
28605:Web=iso-8859-15,Name=ラテン語 9 (ISO),WinCP=1252
50220:Web=iso-2022-jp,Name=日本語 (JIS),WinCP=932
50221:Web=csISO2022JP,Name=日本語 (JIS-Allow 1 byte Kana),WinCP=932
50222:Web=iso-2022-jp,Name=日本語 (JIS-Allow 1 byte Kana - SO/SI),WinCP=932
50225:Web=iso-2022-kr,Name=韓国語 (ISO),WinCP=949
50227:Web=x-cp50227,Name=簡体字中国語 (ISO-2022),WinCP=936
50229:サポートされていません。
51932:Web=euc-jp,Name=日本語 (EUC),WinCP=932
51936:Web=EUC-CN,Name=簡体字中国語 (EUC),WinCP=936
52936:Web=hz-gb-2312,Name=簡体字中国語 (HZ),WinCP=936
54936:Web=GB18030,Name=簡体字中国語 (GB18030),WinCP=936
65000:Web=utf-7,Name=Unicode (UTF-7),WinCP=1200
65001:Web=utf-8,Name=Unicode (UTF-8),WinCP=1200

■一覧を出力したソースコード
Dim fs As New FileStream(出力先ファイルのパス, FileMode.OpenOrCreate)
        Dim sw As New StreamWriter(fs, Encoding.GetEncoding("Shift_JIS"))
        Try
            For i As Integer = 0 To 65535
                Try
                    Dim enc As Encoding = Encoding.GetEncoding(i)
                    sw.WriteLine("{0,5}:Web={1},Name={2},WinCP={3}", i, _
                                enc.WebName, enc.EncodingName, enc.WindowsCodePage)
                Catch nse As NotSupportedException
                    sw.WriteLine("{0,5}:{1}", i, "サポートされていません。")
                Catch ex As Exception
                    'sw.WriteLine("{0,5}:{1}", i, "例外が発生しました。")
                End Try
            Next
        Catch ioe As IOException

        Finally
            If Not sw Is Nothing Then
                sw.Close()
            End If
        End Try

■さらに知りたいこと

> 50221:Web=csISO2022JP,Name=日本語 (JIS-Allow 1 byte Kana),WinCP=932
> 50222:Web=iso-2022-jp,Name=日本語 (JIS-Allow 1 byte Kana - SO/SI),WinCP=932

これは半角カナをサポートしたJISのJIS7とJIS8なんだろうか?

>   37:Web=IBM037,Name=IBM EBCDIC (米国 - カナダ),WinCP=1252
と
>  500:Web=IBM500,Name=IBM EBCDIC (インターナショナル),WinCP=1252

はどういうEBCDICコードをサポートしているのだろうか?

よねKEN 01/15 20:21

98:[ VB.NETでのドキュメント作成(オープンソースの利用) ]

C#でサポートされているXMLドキュメントコメントはVB.NETでは利用できません。
そこでこのコメントと同様の記述を利用し、さらに、それを元にドキュメント(ヘルプ)を
作るにはアドインや外部ツールを使うことになります。

■VBCommenter(ver1.1 VS.NET2003対応版) ★★★★☆
- VB.NETでXMLドキュメントコメントの入力のサポートをしてくれる。
- ビルドするタイミングでコメントからXMLドキュメントを出力してくれる。 
  (NDocというツールを使って、このXMLドキュメントとそのプロジェクトのアセンブリ
  (EXEやDLL)を指定してやることでMSDNのようなドキュメントなどを作成できる)
   * しかし、VBCommenterの吐くこのXMLドキュメントは日本語が化けます。
     VBCommenterのソースを得て、計3個所修正してリコンパイルすることで、
     日本語も通せるようにできます。

     ・XMLWriter.vbファイル
       -- ParseProjectFilesメソッド(2個所)・・・StreamReader使用個所で
            第二引数にSystem.Text.Encoding.GetEncoding("Shift_JIS")を指定。
       -- InitializeAssemblyInfoAndXmlWriterメソッド(1個所)・・・
            System.Text.Encoding.ASCIIの個所をSystem.Text.Encoding.UTF8に変更。

■NDoc(Ver1.2 VS.NET2003対応版) ★★★★☆
- XMLドキュメントとEXE/DLLを指定して、様々な形式のドキュメントを出力できます。
- 自分で入力したコメント以外の部分が英語で出力されてしまいます。
  * 完全日本語化する方法は知りません。あるのでしょうか? 

■VBDoc(Ver0.36) ★☆☆☆☆
- XMLドキュメントコメント付きのソースコードとそれをビルドしたアセンブリ(EXEやDLL)
 を元にXMLドキュメントを作成します(日本語も化けない)。
 NDocでこのXMLドキュメントとアセンブリから、ドキュメントを作成可能。
- まだ完成度が低いためか、ファイル数が増えると劇的に重くなり、メモリもシャレにならない
  ほど消費され、VS.NETごと落ちたりする。
- アドイン形式のものをインストールしていたが、VBCommenterの改造により
  不要になったのでアンインストールしたら、VS.NETを起動すると変なエラーがでて、
  VB.NETが使用できなくなった。VB.NETの修復で復活。
   
よねKEN 01/09 16:23

97:[ Enterキーによるフォーカス移動 ]

下記のコードでは、ProcessDialogキーをオーバーライドすることで、
Tab/Enterで順方向の、Shift+Tab/Enterで逆方向のフォーカス移動を
実現している。Tab/Enterによるフォーカス移動に関しての
細かな制御をしたい場合は、FormDialogKeyメソッドに各コントロールごとの
制御処理を入れることで対応できます。(cancel=Trueに設定してやれば、
フォーカス移動を取りやめられる)
--------------------------------------------------------------

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
    ' 省略
#End Region

'継承用(Enter、Tabによるフォーカス移動時の入力チェックはこの関数をオーバーライドしてそこに記述して下さい。)
    ' cancel = Trueに設定してやるとフォーカスの移動をキャンセルします。
    Protected Friend Overridable Sub FormDialogKey( _
        ByVal sender As Object, ByVal key As Keys, ByRef cancel As Boolean)
        'Nop
    End Sub

    Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
        ' keyData参照用デバッグコード
        'Debug.WriteLine("keyData=" & keyData)

        ' Enter、Tab、Shift+Enter、Shift+Tabのときのみ処理する
        If keyData = Keys.Enter OrElse keyData = Keys.Tab OrElse _
           keyData = (Keys.Enter Or Keys.Shift) OrElse keyData = (Keys.Tab Or Keys.Shift) Then

            Dim cancel As Boolean = False

            ' カスタマイズ用のメソッド呼び出し
            Me.FormDialogKey(Me.ActiveControl, keyData, cancel)

            ' オーバーライドされたFormDialogKeyメソッドでキャンセルされた場合(cancel=True)、
            ' フォーカスはその場に留める。キャンセルされなかった場合、
            ' 次(前)のコントロールにフォーカスを移す
            If cancel = True Then
                Me.ActiveControl.Focus()
            Else
                ' 順方向にフォーカス移動
                Dim forward As Boolean = True
                If (keyData And Keys.Shift) <> 0 Then
                    ' Shift+Enter/Tabのときは逆方向にフォーカス移動
                    forward = False
                End If
                MyBase.SelectNextControl(Me.ActiveControl, forward, True, True, True)
            End If

            Return True
        End If
        Return MyBase.ProcessDialogKey(keyData)
    End Function
End Class
よねKEN 12/27 03:40

96:[ VB6からVB.NETへの移行でのValueプロパティの省略の弊害 ]

#某所でレスした内容のまとめ

(症状)
strData=rs.Fields("Data") 
のようなVB6での記述部分でアップグレード後

 型ADODB.Fieldの値をXXXXX(型名)に変換できません。

のようなエラーになる。

(対応)
strTyp=rs.fields("Data").Value

(原因)
旧VBでの
 strData=rs.Fields("Data")
はstrData=rs.Fields("Data").Valueの省略表記です。
さらに言えば、rs.Fields.Item("Data").Valueの省略表記です。

VB.NETだとrs.Fields("Data").Valueという省略表記は可能ですが、
この意味合いでのrs.Fields("Data")という表記はできません。

この表記が不可なのは下記の仕様変更によるものです。
[INFO] Visual Basic .NET では既定のプロパティがサポートされない 
http://support.microsoft.com/default.aspx?scid=kb;ja;JP311328

VB.NETでの

strData=rs.fields("Data")

という記述はValueプロパティの値の代入ではなくFieldオブジェクトの代入とみなされるので、
提示のエラーが出ているものと思われます。

よねKEN 09/18 09:50

全ての投稿を HTML 化してダウンロードできます。
ダウンロード後、ファイル名を jawanote.htm に変更して利用下さい。

JawaNote v1.2 [Shigeto Nakazawa]