2009年4月28日火曜日

.NET カスタムコントロールのプロパティウインドウのカスタマイズ

カスタムコントロールのプロパティウインドウをカスタマイズするには属性を設定します。

DefaultProperty属性
クラスの「既定のプロパティ」を指定する。
この属性はクラスに指定する。  
この属性で指定されたプロパティは、PropertyGridコントロールが表示されるときに最初にフォーカスが設定される。

DefaultValue属性
プロパティの「既定の値」を指定する。

ReadOnly属性
この属性をTrueに指定すると、PropertyGridコントロールで編集することができなくなる。
ただし、コードから設定することは可能である

Browsable属性(Boolean値)
この属性をFalseに指定すると、PropertyGridコントロールに表示されなくなる。

Description属性)
プロパティの「概要説明」を指定する。

Category属性
プロパティの「カテゴリ」を指定する。

EditorBrowsable属性
インテリセンス上での表示方法を指定する。


<Browsable(False), EditorBrowsable(EditorBrowsableState.Advanced)> _
Public Shadows Property Image() As System.Drawing.Image
Get
Return MyBase.Image
End Get
Set(ByVal value As System.Drawing.Image)
MyBase.Image = value
End Set
End Property


※既存のプロパティはOverridesかShdowsで再定義し、属性を設定する。
このときPubicをPrivateなどと修飾子を変更すると属性が生きない。

また、DefaultValue属性では既定値にならない場合もある。
この場合はShouldSerializeXxxxメソッド、ResetXxxxメソッドを使用する。(Xxxxはプロパティ名)
  Protected Shared Shadows DefaultText As String = "ABC"

Public Shadows Property Text() As String
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
End Set
End Property

Public Function ShouldSerializeText() As Boolean
Return Not (DefaultText.Equals(MyBase.Text))
End Function

Public Shadows Sub ResetText()
Me.Text = DefaultText
End Sub

.NET アセンブリのリソースファイルより画像を取得するには

'スタートアッププロジェクトのアセンブリを取得します。
Dim asm As System.Reflection.Assembly  
asm = System.Reflection.Assembly.GetEntryAssembly  
'指定したアセンブリより「Resouce1」リソースを取得します。
Dim resource As New System.Resources.ResourceManager(asm.GetName().Name + ".Resource1", asm )
'リソースより画像を取得します。
Dim bmp As Bitmap = CType(resource.GetObject("test_Image"), Bitmap)
me.Button1.Image = bmp


アセンブリを取得する方法はこちらを参照してください。
アセンブリを取得するには

.NET アセンブリを取得するには

現在実行しているアセンブリを取得する
Dim asm As System.Reflection.Assembly
asm = System.Reflection.Assembly.GetExecutingAssembly()


スタートアッププロジェクトのアセンブリを取得する
Dim asm As System.Reflection.Assembly
asm = System.Reflection.Assembly.GetEntryAssembly


dll名よりアセンブリを取得する。
Dim asbl As System.Reflection.Assembly
asbl = System.Reflection.Assembly.LoadFrom(System.Windows.Forms.Application.StartupPath & "¥ClassLibrary1.dll")

2009年4月27日月曜日

.NET Buttonを継承してTextの初期値・規定値を設定するには

System.Windows.Forms.Buttonクラスを継承したCustomButtonクラスを作成しフォームに配置すると、ボタンのTextプロパティはCustomButton1、CustomButton2・・・となります。
このTextプロパティの初期値を変更する方法です。

Windowsフォーム・デザイナ上での表示をカスタマイズするためのクラスを作成します。
参照設定でSystem.Desingn.dllを追加します。
Public Class CustomButtonDesiner
Inherits System.Windows.Forms.Design.ControlDesigner

Public Overrides Sub InitializeNewComponent(ByVal defaultValues As System.Collections.IDictionary)
MyBase.InitializeNewComponent(defaultValues)
Me.Control.Text = "ボタンテキスト"
End Sub

End Class


Designer属性のパラメータで、このCustomButtonコントロールのデザインのカスタマイズ内容が、CustomButtonDesiner」クラスで実装されていることを指定します。
Imports System.ComponentModel

<System.ComponentModel.Designer(GetType(CustomButtonDesiner))> _
Public Class CustomButton
Inherits System.Windows.Forms.Button

End Class

2009年4月17日金曜日

.NET Exeの戻り値を設定するには?

EXE側のプログラムです。
Mainメソッド内では通常のメソッドと同じようにReturn値で返します。
その他のメソッドではSystem.Environment.Exitで戻り値を返します。

Imports System.Threading
Imports System.Windows.Forms

Public Class Main
Public Const c_Error As Integer = 0
Public Const c_Success As Integer = 1


''' 
''' アプリケーション スレッドに関するコンテキスト情報です。
''' 
Private Shared _MainApplicationContext As New ApplicationContext

''' 
''' アプリケーションエントリーポイントです。
''' 
Public Shared Function Main() As Integer

'捕捉できない例外をキャッチします。
AddHandler Application.ThreadException, AddressOf Application_ThreadException

'フォーム1を表示します。
Dim frm As New Form1
_MainApplicationContext.MainForm = frm

'アプリケーションを実行します。
Application.Run(_MainApplicationContext)

   '正常終了を戻します。
Return c_Success
End Function

''' 
''' 捕捉しなかった例外が出力された際のイベントです。
''' 
''' 
''' 
''' 
Public Shared Sub Application_ThreadException(ByVal sender As Object, ByVal e As ThreadExceptionEventArgs)
Dim ex As Exception = e.Exception
MessageBox.Show(ex.Message)

   '異常終了を返します。
System.Environment.Exit(c_Error)

End Sub
End Class


exeを呼び出す側のコードです。
Using process As Process = process.Start("XXX.exe")
process.WaitForExit()
Console.WriteLine(process.ExitCode.ToString)
End Using

2009年4月16日木曜日

.NET System.Net.Mailを使用してメールを送信するには

MailMessageオブジェクトを作成し、System.Net.Mail.SmtpClientを使用してメールを送信する方法です。

PopBefore認証


PopBefore認証が設定されている場合はSystem.Net.Sockets.TcpClientを使用して、メール送信前にPop認証を行います
'PopBefore認証が設定されている場合、Pop認証を行います。
'認証に失敗した場合はSystem.Net.Sockets.SocketExceptionが発生します。
Using tcp As New System.Net.Sockets.TcpClient
Dim sPopServer As String = "POPサーバー"
Dim iPopPortNo As Integer = 110 'POPポート番号
Dim sPopUserName As String = "POPユーザーID"
Dim sPopPassword As String = "POPパスワード"

tcp.Connect(sPopServer, iPopPortNo)
Try
Using sw As New System.IO.StreamWriter(tcp.GetStream)
sw.Write("USER " + sPopUserName + "\nPASS " + sPopPassword + "\nQUIT\n")
End Using
Finally
tcp.Close()
End Try
End Using


メールの文字化け対策


以下のページが丁寧に説明されており、大変参考になりました。
株式会社アジルテック:開発者の談話室:System.Net.MailでTo,Fromフィールドをiso-2022-jp Bエンコード

参考ページによるとメールの文字化けは以下の対策が必要だそうです。
・差出人(To)やタイトル(Subject)のエンコードは自前で行う。
・本文(Body)はAlternateViewを利用し、7bitエンコーディングにする。AlternateViewを利用するためにはNet Framework 2.0 SP1以降であること。


サンプルコード


'エンコード
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-2022-jp")

Using mailMsg As New System.Net.Mail.MailMessage

'あて先
mailMsg.To.Add("あて先アドレス")

'差出人
mailMsg.From = New System.Net.Mail.MailAddress("差出人アドレス")
'※displayNameを指定する場合は、displayNameは自前でエンコードする。
'Dim sDisplayName As String = String.Format("=?{0}?B?{1}?=", enc.HeaderName, Convert.ToBase64String(enc.GetBytes("表示名"), Base64FormattingOptions.None))
'mailMsg.From = New System.Net.Mail.MailAddress("差出人アドレス", sDisplayName)

'CC
mailMsg.CC.Add("CCアドレス")

'タイトル
'※iso-2022-jpに指定しても、Qエンコードされてしまうため未設定にする。
'mailMsg.SubjectEncoding = enc
'mailMsg.Subject = "メールタイトル"
'※タイトルは自前でエンコードする。
mailMsg.Subject = String.Format("=?{0}?B?{1}?=", enc.HeaderName, Convert.ToBase64String(enc.GetBytes("メールタイトル"), Base64FormattingOptions.None))

'本文
'※iso-2022-jpに指定しても、8bitエンコーディングされてしまうため未設定にする。
'mailMsg.BodyEncoding = enc 
'mailMsg.Body = "メール本文"
'※本文を7bitエンコーディングにするには、mailMsg.HeadersにAddしても追加されないため、AlternateViewを利用する。
'※AlternateViewを利用するためにはNet Framework 2.0 SP1以降であること。
'--追加されない
'mailMsg.Headers.Add("Content-Transfer-Encoding", "7bit")
'--AlternateViewを利用する 
Dim altmsg As New System.Net.Mail.AlternateView(New System.IO.MemoryStream(enc.GetBytes("メール本文")), New System.Net.Mime.ContentType("text/plain; charset=" + enc.BodyName))
altmsg.TransferEncoding = Net.Mime.TransferEncoding.SevenBit
mailMsg.AlternateViews.Add(altmsg)
mailMsg.IsBodyHtml = False

'添付ファイル
Dim sbAttachmentBuf As New System.Text.StringBuilder
sbAttachmentBuf.AppendLine("添付ファイル本文")
Dim bytes() As Byte = System.Text.Encoding.GetEncoding("Shift_Jis").GetBytes(sbAttachmentBuf.ToString)
mailMsg.Attachments.Add(New System.Net.Mail.Attachment(New System.IO.MemoryStream(bytes), "添付ファイル.txt"))


'PopBefore認証が設定されている場合、Pop認証を行います。
'認証に失敗した場合はSystem.Net.Sockets.SocketExceptionが発生します。
Using tcp As New System.Net.Sockets.TcpClient
Dim sPopServer As String = "POPサーバー"
Dim iPopPortNo As Integer = 110 'POPポート番号
Dim sPopUserName As String = "POPユーザーID"
Dim sPopPassword As String = "POPパスワード"

tcp.Connect(sPopServer, iPopPortNo)
Try
Using sw As New System.IO.StreamWriter(tcp.GetStream)
sw.Write("USER " + sPopUserName + "\nPASS " + sPopPassword + "\nQUIT\n")
End Using
Finally
tcp.Close()
End Try
End Using

'SMTPクライアントを作成します。
Dim sSmtpServer As String = "SMTPサーバー"
Dim iSmtpPortNo As Integer = 25 'SMTPポート番号
Dim smtp As New System.Net.Mail.SmtpClient(sSmtpServer, iSmtpPortNo)
smtp.DeliveryMethod = Net.Mail.SmtpDeliveryMethod.Network

'SMTP認証が設定されている場合は資格情報を設定します。
Dim sSmtpUserName As String = "SMTPユーザーID"
Dim sSmtpPassword As String = "SMTPパスワード"
smtp.Credentials = New System.Net.NetworkCredential(sSmtpUserName, sSmtpPassword)

'Mailを送信します。
smtp.Send(mailMsg)

End Using

2009年4月13日月曜日

Java Eclipseを使ってみる

Eclipsの起動


C:\Program Files\eclipse3.4\eclipse.exeをダブルクリックします。

初めてEclipseを起動した場合は「ワークスペースの選択」ダイアログが表示されます。
開発で使用する作業ディレクトリを指定します。
作業ディレクトリには空白スペースは全角文字を含まないアドレスを指定してください。


「ワークベンチ」をクリックします。



以下のような画面が表示されます。



プロジェクトを作成する


「ファイル」メニューの「新規」「プロジェクト」メニューをクリックします。
「Javaプロジェクト」を選択します。


プロジェクトを作成するためのウィザードが表示されます。
プロジェクト名を入力します。


プロジェクトのビルド設定画面が表示されます。
とりあえずデフォルトのままにしておきます。


「このパースペクティブを開きますか?」ダイアログが現れる場合があります。
「はい」を選んでください。


クラスを作成する


「ファイル」メニューより「新規」「クラス」を選択します。
パッケージの名前を入力します。
クラスの名前を入力します。
修飾子を選択します。


ソースコードを記述します。
package MyPackage;

public class MyClass {
public static void main(String[] args){
System.out.println("Hello Java From Eclipse");
}

}

「実行」ボタンをクリックすると「コンソールウインドウ」に「Hello Java From Eclipse」と表示されます。

2009年4月9日木曜日

Java Eclips 3.4のダウンロードおよびインストールと日本語化

Eclips 3.4のダウンロードおよびインストール



Eclipse パッケージの種類には以下の3つがあります。

Eclipse IDE for Java Developers
Javaの基本的な開発を行うためのプラグインが同梱されたパッケージです。

Exlipse IDE for Java EE Developers
Javaの基本的な開発を行うためのプラグインに加え、サーバーサイド開発のための各種プラグインが同梱されたパッケージです。

Exlipse Classic
Eclipse本体とJava開発のための必要最小限のプラグインが同梱されたパッケージです。


以下のページより「Eclipse IDE for Java EE Developers」をダウンロードします。
http://www.eclipse.org/downloads/


ダウンロードしたファイル「eclipse-jee-ganymede-SR2-win32.zip」を解凍します。
解凍してできた「eclipse」フォルダを任意の場所に配置します。
私はC:\Program Files\eclipse3.4\ に配置しました。


Eclips 3.4の日本語化


Eclipse 3.4 の表示を日本語化するために、「Pleiades」というサードパーティ製のソフトウェアを使用します。
以下のページよりダウンロードします。
http://mergedoc.sourceforge.jp/


ダウンロードしたファイル「pleiades_1.3.0.zip」を解凍します。
解凍してできた「pleiades_1.3.0」フォルダの中のフォルダ/ファイルをすべて
C:\Program Files\eclipse3.4\eclipseフォルダの中に上書きコピーします。

C:\Program Files\eclipse3.4\eclipse\eclipse.iniをエディタで開き、末尾に下記の1行を追加します。
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-framework
plugins\org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar


C:\Program Files\eclipse3.4\eclipse\eclipse.exe -clean.cmdをダブルクリックして実行します。
eclipse が起動し日本語化されていることを確認します。
これは,日本語化に伴う作業なので、1回だけ実行します。
通常Eclipse を起動するときは、 eclipse.exe をダブルクリックして実行します。

2009年4月8日水曜日

Java JDKのダウンロードとインストール

JDKとは


JDKとはJava言語でプログラミングを行なう際に必要な最低限のソフトウェアのセットです。
Ver5.0以前は「Java 2 Software Development Kit(J2SE)」と呼ばれていました。
Ver5.0からは「JDK(Java SE DevelopmentKit)」と呼ばれています。

JDKのダウンロード


以下のサイトより「JDK 6 Update 13」をダウンロードします。
http://java.sun.com/javase/ja/6/download.html


Windowsユーザは「Windows」を選びます。


JDKのインストール


ダウンロードした「jdk-6u13-windows-i586-p.exe」を実行します。

使用許諾契約画面です。


インストールする内容を設定します。
デフォルトの「開発ツール」を選択します。


Javaをインストールするフォルダを指定します。


インストールの終了です。


環境設定


Vistaの場合、コンピュータのプロパティ画面より「システムの詳細設定」リンクをクリックし「システムプロパティ画面」を開きます。
「詳細設定」タブの「環境変数」ボタンをクリックします。


「システム環境変数」のリストより「Path」を選択し「編集」ボタンをクリックします。


編数値の末尾に「;」をつけ、「%Java_HOME%bin;」を追記します。


システム環境変数の「新規」ボタンをクリックします。


変数名:JAVA_HOME
編数値:JDKのパス
JDKのパスはデフォルトで「C:¥Program Files¥Java¥jdk1.6.0_13」になっています。