【Dev】.NET VB覚書@ことはじめ

ビール~1

HDDを掃除していたら出てきやがったメモです。以前に学習用にメモったやつです。ちょい古いけど。

VB .NET初歩覚え書き

.NET Framework上の言語は、(基本的に)全機能が利用できる。
VB.NETも例外無く、C#などと同等の機能を保有している。
CLI(.NET中核)へ渡すMSIL(中間コード)を作っているにすぎない。
VisualStudio Express VB/C#/WebDevが無償公開されている。
実コーディングについては、ここが詳しい。
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/index/index.html

VB6/VBAとの相違点
l    戻り値を利用するかしないかにかかわらず、引数を囲む“ (”と“) ”が必要
l    .NET Framework クラスライブラリを利用することもできます
l    オブジェクト指向のサポート、コードの継承、オーバーロード、オーバーライド、コンストラクタ/デストラクタ
l    VB6コードを変換するアップグレードウィザードがある
l    従来よりも厳密なタイプチェック
l    例外処理が利用できる
l    マルチスレッドのアプリケーションや Windows サービスソフトの開発
l    オブジェクトが破棄されるタイミング、共通言語ランタイムでは、メモリが必要だと判断したとき
l    同じ DLL の異なるバージョンを管理することができる。レジストリ非依存
l    Option Explicit (変数宣言の強制)
l    変数のスコープ範囲は、ブロック内だけとなる
l    全ての変数がオブジェクト扱い、型無指定は、Object型へ
l    Currencyは廃止、Decimal型へ
l    数値型の表現範囲が、大きくなった。Short(16it)→Short(32bit)
l    デフォルトプロパティが無くなった。必ずプロパティを指定する必要がある。ただし、エディタが補完する
l    配列の始まりは、必ず0となる
l    固定長文字列型は無くなった
l    vb*のVB定数は廃止、.NETのものに変更
l    On?GoTo/GoSub、GoSub/Return、VarPtr、ObjPtr、StrPtr、LSet によるユーザー定義型変数の代入、DefBool、DefByte、DefInt、DefStr などは廃止される
l    VariantがObjectに、NullがNothingに
|    関数引数は、無指定時、値渡しbyValとなる。VB6は、byRef

●VB.NETでのGC/メモリ開放のタイミングは知りようがない
VB6とは違いnothingを入れても処理されない。
手動で開放する場合は、system.gc.collect()で処理可能

●オブジェクトの参照型と値型
ObjectとString型は常に参照型として扱われる
Structureは値型となる

●条件付ビルド
#If Debug Then
    Trace.WriteLine("Debug Build")
#Else
    Trace.WriteLine("Release Build")
#End If
#Constディレクティブ
定数には、#constか、プロパティのカスタム定数で定義できる

●強制的にGCしてみる
System.GC.Collect()

●参照カウント
型を明示化した場合、参照カウントは 1 になる。
型を明示化しない場合、参照カウントは 2 になる。←注意

●参照カウントを調べる方法
Dim iRemainCount As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(sourceSheet)
MessageBox.Show("参照カウントの残り == " & iRemainCount.ToString())

●文字列比較の速さ
1.s1.Equals(s2)
2.String.Equals(s1, s2)
3.s1 == s2
内部的には、3は2、2は1を呼び出している。そのため、1が最も速い

●正規表現
VB netでも、Perlと同じような正規表現機能が利用できるようである。
*(?:)や(?<=)など、文内コメント、後方参照なども
Dim m As Match = Regex.Match("A.BC DEF", "(?<moji>[^ ]+)(?<space>[ ]*)")
(?<moji> ) というのがグループ化構成体で、括弧の中身をグループとして扱えるようになる

●正規表現 置換replace
Dim myString As String = RegEx.Replace( "a true taste of the temperature", "t.*?e", "a" )

using System.Text.RegularExpressions;
namespace RegularExpressions
{
    class RegularExpressions
    {
        [STAThread]
        static void Main(string[] args)
        {
            // 正規表現パターン
            string pattern = @"b(dim)s+(?<identifier>w+)s+(as)s+(?<type>[w.]+)b";
            // 検索された文字列に対して置き換えるパターン
            string replacement = "${type} ${identifier};";
            // Regexクラスのインスタンスを作成 (検索の際、大文字小文字を無視)
            Regex r = new Regex( pattern, RegexOptions.IgnoreCase );
            // 置き換えて結果を表示
            Console.WriteLine( r.Replace( "Dim i As Integer", replacement ) );
            Console.WriteLine( r.Replace( "Dim s As String", replacement ) );
            Console.WriteLine( r.Replace( "Dim ui As System.UInt32", replacement ) );
        }
    }
}

●デリゲートによる文字列置換
Sub Page_Load(sender as Object, e as EventArgs)
    Dim myDelegate As New MatchEvaluator( AddressOf MatchHandler )
    Dim sb As New System.Text.Stringbuilder()
    Dim bodyOfText As String = _
        "~~~ This %%% is ### a chunk of text."
    Dim pattern As String = "(w)(w+)?"
    Dim re As New Regex( _
        pattern, RegexOptions.Multiline Or _
        RegexOptions.IgnoreCase _
    )
    Dim newString As String = re.Replace(bodyOfText, myDelegate)
    Response.Write( bodyOfText & "<hr>" & newString )
End Sub

Private Function MatchHandler( ByVal m As Match ) As String
    Return m.Groups(1).Value.ToUpper() & m.Groups(2).Value
End Function

●Nullable型 nothingを扱う事をできるようにする
Dim i As Nullable(Of Integer) = Nothing
●ジェネリック
コンパイル中の型チェックを行う
例)
ArrayList list = new ArrayList();
List<string> list = new List<string>();
●分離クラス
Form1.Designer.vb/Form1.vbなど
クラス定義が分離されている。2005移行
●REGION "?"
畳みこむエディタにて利用
●コンストラクタはsub new()
●自分は、me
●NULL&空文字チェック
String.IsNullOrEmptyメソッド(String)
●Nothingチェック
checkString IsNot Nothing

●VB6のDebug.Printと同じ事を行うには?
System.Diagnostics.DebugクラスのWriteメソッド
System.Diagnostics.Debug.Indent()
System.Diagnostics.Debug.Unindent()
Trace.Write

●良くも悪くも例外が出まくる。→ちゃんと書く

●Excelオブジェクトを利用するには、
[プロジェクト][参照の追加][COM]にて、Microsoft Excel *.* Object Libraryを選択する。
完全名はこちら
Dim xlapp As Microsoft.Office.Interop.Excel.Application
面倒なら、Imports Microsoft.Office.Interopと先頭に書く

●excel::rangeオブジェクト メモ
.Value/.Address/.Row/.Column/ セル幅の指定 .RowHeight/.ColumnWidth
Resize()/Offset()
Width/height 半角一文字分サイズ取得
aa.Count         ‘選択範囲の個数
aa.Row           ‘先頭行の番号
aa.Rows.Count    ‘行数
aa.Column        ‘先頭列の番号
aa.Columns.Count ‘列数

●Excelの画面制御方法
再描画が抑えられるため高速に処理できます。
Application.ScreenUpdating = False
ActiveSheet.DisplayPageBreaks = False

●CSVの読込み
Using parser As New TextFieldParser(stCurrentDir & sCsvFile, System.Text.Encoding.GetEncoding("SHIFT_JIS"))
    parser.TextFieldType = FieldType.Delimited
    parser.HasFieldsEnclosedInQuotes = True
    parser.SetDelimiters(",")
    While Not parser.EndOfData
        ‘Trace.Write(parser.LineNumber & ">>>")
        Dim fields As String() = parser.ReadFields()
        ‘For Each field As String In fields
        ‘Trace.Write(field & "|")
        ‘Next
        ‘Trace.WriteLine("")
        _hData(fields(0)) = fields(1)
    End While
End Using

●ハッシュテーブルの列挙
For Each de As DictionaryEntry In ht
      Console.WriteLine("{0} : {1}", de.Key, de.Value)
    Next

●フォルダ (ディレクトリ) が存在しているかどうか確認
If System.IO.Directory.Exists("C:Hoge") = True Then
●ファイル が存在しているかどうか確認
If System.IO.File.Exists("C:Hoge") = True Then

●絶対パスか相対パスかを判断
If System.IO.Path.IsPathRooted("….Hoge.txt") = True Then

●親ディレクトリ名 (フォルダ名) を取得
Dim stParentName As String = System.IO.Path.GetDirectoryName("C:HogeFoo.txt")

●ファイルパスからファイル名を取得
Dim stFileName As String = System.IO.Path.GetFileName("C:Hoge.txt")

●連結したファイルパスを取得
Dim stFilePath As String = System.IO.Path.Combine("C:HogeFoo", "Bar.txt")

●フォルダの属性を取得
Dim uAttribute As System.IO.FileAttributes = System.IO.File.GetAttributes("C:Hoge")

●コメント・名前の削除(Excel)
Me.rangeTarget.ClearComments()
Dim objName As Name

For Each objName In ActiveWorkbook.Names
    objName.Delete()
Next objName

●インラインマシン語
Dynamically Writing and Executing Native Assembly in C#
.NET ver 2.0 ではインラインマシン語が使える

●デリゲート
デリゲートとは、他のオブジェクトのメソッドを間接的に呼び出すためのオブジェクト
Delegate Sub MyDelegate(ByVal x As String)

Dim MyDelegate As MyDelegate
MyDelegate.Invoke(Me.Name)

●名前でメソッドの呼び出し
dim objCls as new myClass
sRet = CallByName( objCls, "testFunc", CallType.Method, "3", "5")

●EVAL
Dim exp As String = "(1+6)*5/(7-4)"

Dim ve As Microsoft.JScript.Vsa.VsaEngine = _
    Microsoft.JScript.Vsa.VsaEngine.CreateEngine()
Dim result As Double = _
    CDbl(Microsoft.JScript.Eval.JScriptEvaluate(exp, ve))

‘結果を表示
Console.WriteLine(result)

ごり初心者書式メモ
CaseSelect文
                Select Case st.Name
                    Case "項目1"
                        rangeName.Value = "123456789"
                    Case "項目2"
                        rangeName.Value = "987654321"
                 End Select
構造体
    Structure Datas
        Dim name As String
        Dim value As Decimal
    End Structure

ハッシュテーブル作成
    Dim _hData As Hashtable
        _hData = New Hashtable

¥パス指定(1個だけでいいらしい)
        sCsvFile = "c:test.csv"

ForEach文
        For Each st In xlApp.Names
        Next

●リソースの取得
‘文字列リソースを取り出す
Dim str As String = My.Resources.Message
‘画像リソースを取り出す
Dim bmp As Bitmap = My.Resources.Banner
‘アイコンリソースを取り出す
Dim ico As
Icon = My.Resources.Icon1
‘オーディオリソースを取り出す
Dim strm As System.IO.Stream = My.Resources.Voice1
‘テキストファイルリソースを取り出す
Dim txt As String = My.Resources.TextFile1
‘バイナリファイルリソースを取り出す
Dim bs As Byte() = My.Resources.BinaryFile

●DataSet
Dim OleConn As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim OleDA As OleDb.OleDbDataAdapter
Dim dtSet As DataSet = New DataSet("アドレステーブル")
OleConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:WorkTest.mdb;Persist Security Info=False"
OleDA = New OleDb.OleDbDataAdapter("SELECT * FROM ADDRESS_TBL", OleConn)
OleDA.Fill(dtSet, "アドレステーブル")
DataGrid1.DataSource = dtSet.Tables(0)

●Datasetへのインデックス
DataView、UniqueKey、ForeignKey を追加することで DataTable のインデックス数が増えると、パフォーマンスの差ははるかに大きい
ds.Tables(0).Columns("ID").Unique = True

●インストールされているプリンタ
System.Drawing.Printing.PrinterSettings.InstalledPrinters.Count

●.NET で現在実行中のメソッド名を取得
System.Reflection.MethodBase.GetCurrentMethod().Name

●ミリ秒の取得
System.Environment.TickCount
※コールバック
System.Threading.Timer
System.Timers.Timer
System.Windows.Forms.Timer … 55ミリ秒の精度
※現在時間の場合は、DateTimeで。

●エラー時デバッグ情報
System.Diagnostics.Debug.Assert()
System.Diagnostics.Debug.Fail()
System.Diagnostics.Trace.Assert()

●Caseの部分は結構色々書ける
複数項目の場合(1 or 2 or 4)は
Case 1,2,4
範囲指定の場合(10以上15以下)は
Case 10 To 15
またそのあわせ技
Case 1,2,4, 10 To 15
比較演算子も使えたり(100以上)は
Case Is >= 100

●Office 2003から名前空間が変更になっているらしい
BuiltinDocumentPropertiesなど

●ZIPファイルを扱う
SharpZipLibというオープンソースがある。GPLで、クロースソースでも可となっている。
その他は、J#ライブラリを使う手もあるらしい。

●メソッド又はプロパティが存在するか?
IsNothing(sender.GetType.GetMethod("Focus"))
IsNothing(sender.GetType.GetProperty("BackColor"))
IsNothing(sender.GetType.GetMember("Enabled"))

●タスクコメントの書き方
TODO 標準 未実装のため、新たにコードを追加する必要がある個所。
HACK 標準 実装済みだが、コードをさらに改善する必要がある個所。
UNDONE 標準 未完成のため、さらにコードを編集する必要がある個所。

●ファイルを開くダイアログの表示
Dim ofd As New OpenFileDialog()
ofd.FileName = "default.html"
ofd.InitialDirectory = "C:"
ofd.Filter = _
    "HTMLファイル(*.html;*.htm)|*.html;*.htm|すべてのファイル(*.*)|*.*"
ofd.FilterIndex = 2
ofd.Title = "開くファイルを選択してください"
ofd.RestoreDirectory = True
ofd.CheckFileExists = True
ofd.CheckPathExists = True
ofd.ShowDialog() = DialogResult.OK

●例外が発生するとめっさ重い
ので、無理でも発生しないようにする

●死ぬほど速く大量のセルに値を書き込む
dim array(,)
range.value = array
※2次元配列である必要がある

●ContextSwitchDeadlock が検出されました。
COMをしばらく放置していると(60秒)、例外が発生する。
これはVBから発生しているものだが、オプションにて回避できる。
ソリューションプロパティからアンマネージコードデバッグをONにする。

●VB Report Excelプレビューのみ
        Me.vbRepoCtrl.FileName = "c:test.xls"
        Me.vbRepoCtrl.Start.File()
        ‘Me.vbRepoCtrl.Start.Create(VBReport.XlsReportCtrl.xlVersion.ver2002)
        Me.vbRepoCtrl.Page.Begin("Sheet1", "1")
        Me.vbRepoCtrl.Page.End()
        Me.vbRepoCtrl.Option.ViewZoom = VBReport.XlsReportCtrl.xlViewZoom.xzWidthFit
        Me.vbRepoCtrl.Out.PreView(0, 0, 1024, 768)

●遅延バインディング
VB.NETで遅延バインディング(実行時にオブジェクトのクラスを決めること)
を使うと、極端に遅くなる。VB.NETでは、遅延バインディングを禁止するために
「Option Strict」という設定があるので、これをOnにするのが好ましい。
デフォルトはOffであり、Offの状態だと相当遅くなる。

【Dev】PHPの開発中覚書

bookPHP05_12big

HDDを掃除していたら出てきたメモです。使えないが公開。

PHPに関する覚え書き

●画面が白くなって終わる
内部エラーにて強制終了されている
DB周りで(SQL文ミス等)確認。

●include_pathが反映されない
requireでエラーになる等。
PHPINFOで確認できる以下の項目は、このようになっている。
Master Value  =>  php.ini で設定された値
Local Value   =>  .htaccessやhttpd.conf等で設定を定義した場合
php_value
php_flag
php_admin_value
php_admin_flag
php.iniなのか、.htaccessなのか確認する。
include_pathが更新されている可能性がある。

●xdebug追加をphp.iniに記述するとき、zend_extension=か zend_extension_ts=なのかを見極めるには。
Filed under: Xdebug ? ne-zu @ 20:00:42
表題の、Xdebug追加時のモジュール指定、LinuxだったりWindowsだったりでも違ったりするので入れる度に迷ってしまっていた昨日にFarewell!(さらば!)です。
Eclipse用xdebug pluginについてくるマニュアルPDFに詳しく書かれていました。
If you don’t get this and you are sure the path is correct then you need to make
sure you have the correct entry for zend_extension in your PHP.INI file. When
you do PHP ?i or run a script with phpinfo() in it you need to look for 2 entries
Debug Build => no
Thread Safety => enabled
phpinfo()などで、以下の2行を確認すべし。
Debug Build => no
Thread Safety => enabled
The above output shows a non debug build that has thread safety so you should
use “zend_extension_ts”.
Debug Build がnoで、Thread Safetyが有効の場合は、

zend_extension_ts

If thread safety was “disabled” then you should have the php.ini entry of
zend_extension=
thread safetyが無効の場合は、

zend_extension

if it was a debug build you need to have the entry
zend_extension_debug=
Debug buildが有効なら、

zend_extension_debug

If you are running a thread safe debug version of PHP, then your ini entry must
be of the form
zend_extension_debug_ts=
thread sageもdebugも有効なら

zend_extension_debug_ts

を使いなさい。
In summary the rule is (in the stated order)
1. start with “zend_extension”
2. if you have a debug build: Debug Build => yes , add “_debug”
3. if you have thread safety: Thread Safety => enabled , add “_ts”
まとめると、
1.zend_extensionに
2.もしデバッグビルドが有効なら、_debugを付けて、
3.もし、スレッドセーフが有効なら、_tsを付ける。

●デバッグ環境xdebugの利用
マニュアル
http://www.eclipse.org/pdt/documents/XDebugGuide.pdf
Apache conf/httpd.conf内のrewriteモジュールのコメントも外しておく

●PHPウェブアプリにてXdebugのブレーク利用法

(未確認)対象コードを、ウェブルートに置く必要があるらしい。
iniの場所を間違えないようにする事。PHPルートではない。
コンソールからなら、PHP -iにて確認できる。

●PHPコンソールアプリにてXdebugのブレーク利用法

なんとか成功。以下のiniを参考の事。
コンソール時は、余計なremote記述をコメントアウトにする必要があるらしい。

[XDebug]
;; Only Zend OR (!) XDebug
;Zend_extension_ts="C:xamppphpextphp_xdebug-2.0.2-5.2.5.dll"
extension_ts="C:/xampp/php/ext/php_xdebug52.dll"
zend_extension_ts="C:xamppphpextphp_xdebug.dll"
;xdebug.remote_enable=1
;xdebug.remote_host=192.168.111.1
;xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.profiler_enable=On
xdebug.profiler_output_dir="C:xampptmp"
xdebug.remote_mode=req
xdebug.manual_url=http://jp2.php.net
xdebug.collect_params=On
xdebug.dump.GET=*
xdebug.dump.POST=*

●xdebugが落ちる(大量ネスト対策)
xdebug.max_nesting_level = 20

●Unable to detect character encoding・・・
というWarningが表示される。
漢字関係

PHP.iniに、適切に設定する。
mbstring.language "neutral" PHP_INI_PERDIR PHP 4.3.0 から利用可能です。
mbstring.detect_order NULL PHP_INI_ALL PHP 4.0.6 から利用可能です。
mbstring.http_input "pass" PHP_INI_ALL PHP 4.0.6 から利用可能です。
mbstring.http_output "pass" PHP_INI_ALL PHP 4.0.6 から利用可能です。
mbstring.internal_encoding NULL PHP_INI_ALL PHP 4.0.6 から利用可能です。
mbstring.script_encoding NULL PHP_INI_ALL PHP 4.3.0 から利用可能です。
mbstring.substitute_character NULL PHP_INI_ALL PHP 4.0.6 から利用可能です。
mbstring.func_overload "0" PHP_INI_PERDIR PHP 4.2.0 から利用可能で、PHP <= 4.2.3 は PHP_INI_SYSTEM です。
mbstring.encoding_translation "0" PHP_INI_PERDIR PHP 4.3.0 から利用可能です。
変換にて表示される際は、(例以下)mbstring.detect_order=allなどで対処可能
mb_convert_encoding(‘ディレクトリー:’.$dt_dirreal,’SJIS’,’auto’);
これでも表示されるようなので、これでどうだろ。
mb_convert_encoding(‘ディレクトリー:’.$dt_dirreal,’SJIS’,"ASCII,JIS,UTF-8,EUC-JP,SJIS")
公式マニュアルでは、"auto"="ASCII,JIS,UTF-8,EUC-JP,SJIS"のはずなのだが、どうも違うらしい。

●正規表現
Perl系の正規表現preg_matchの方が高速。

#Perlの方が書きやすいし使いやすい。
if (preg_match("/^#/",$rec[3],$match)) {
$match配列にヒットパターンが入る仕組み。0はヒット全体。1?$1/$2に該当。
(?:)の書式は使えないようだ。

(|)が使えない!!これはヤバい
いや、使えるようだ。

●グローバル空間アクセス
function内より、グローバル定義変数へのアクセスにはGlobalにて変数を定義する必要がある。

●リファレンス参照引数
function側にて"のみ"定義する・・という風変わりな仕様。
呼び出し元は対策のしようがない。
&を付けて定義する。
Perlは全参照扱い。

●PHPによる数値or文字の判断
極まれに、これによる誤動作を見つける。他スクリプト系言語と同様に、$a=""+123;明示的にしなければいけない。

●Warning表示の場所
warningの場所は、ロジック的な問題が多く、その指し示す行番号は発生箇所でしかない<当り前
深くなると探し難いため、(テストコードであろうと)エラーチェッ

【Dev】JavaScript使えない覚書の書

ninja2_sm

HDDを掃除していたら出てきやがったメモです。使えないと思うけど公開。

Javascript覚え書き
*firefox主に利用しているためIEでは怪しい

オブジェクト毎に書いてあるので便利
http://www.htmq.com/js/index.shtml#js_window
http://flv86.net/js/js/index.htm

●substr関数の恐怖
firefox/IEでは動作が違う。
substr(-1,1) 最後から1文字取得。IEは、負数が利用できない。
sliceなどを利用すればいい。

●AJAX主なフレームワーク
・prototype.js →良く利用されている
・Yahoo UI library →Yahoo開発、UI等が充実
・Google Web Toolkit →Google開発、Java絡みらしい
・Dojo →でかい、IBM利用
・Spry framework for Ajax →Adobe開発、簡単
・Microsoft AJAX Library →Microsoft開発
※AJAX="Asynchronous JavaScript + XML" 非同期通信の略
※部分的なSSL通信の適用はできない
※「戻る」などでユーザーの期待に外れた遷移となる

●Javascriptライブラリー
・JQuery →UI拡張、ドラック&ドロップ

●ユニットテスト
JsTrester、JsUnit

●PHPのprint_rのようなもの(デバッグ向け)
<script type="text/javascript"><!–
function print_r(obj) {
var count_obj = 0;
    function _output(str) {
      document.writeln(str + "<br/>");
    }
    function _print_r(obj, name, level) {
     var s = "";
        if (obj == undefined || level > 4) return;
        for (var i = 0; i < level; i++) { s += " | "; }
        s += " – " + name + ":" + typeof(obj) + "=" + obj;
        _output(s);
        if (name == "document" || typeof(obj) != "object") return;
        for ( key in obj ) {
        if (count_obj++ > 150) return;
         _print_r(obj[key], key, level + 1);
        }
    }
   _print_r(obj, "*", 0);
}
//–>
</script>

●動的なコード解釈
(未解決)コードが動的に解釈実行されているようなので注意

●thisは使える
●配列は、PHPと同じくarrayだが、newが必要←オブジェクト扱い
●ブロックの終わり行内では";"は案の定、要らない。PHPだけが必要←気に入らない
●連想配列はオブジェクト
var keyar = {};
keyar.prop = 123;

●form/inputオブジェクトの位置
省略も可能だが、出来るだけ指定する事。
window.document.[form名].(value等)
FORMタグには、NAME設定しておく事。

●メッセージウィンドウ
MsgBoxと書いてしまいそう??になるが、以下。
[window.]alert("message");

●スクリプトコードをHTMLから分離
イベントを見えないようにHTMLから分離
↓onloadを定義
window.onload = function() {
  var box = document.getElementById(‘item1’);
  box.onchange = function() {←onchangeを定義
    chgfrm();
  }
};

●外部Javascriptの文字コードの指定
<script language="JavaScript" charset="utf-8" src="http://…" > </script>

●VBScriptもある(IE)
<SCRIPT language="JavaScript">
<SCRIPT language="VBScript">

●Javascript呼び出し方法(参考)
<SCRIPT for=window event=onload language="JavaScript"></SCRIPT>
onClick="Javascript:func()"
=function(){} ←無名関数

●文字挿入
document.all.item("Main").innerText = "Hello World!!";
document.all.item("Main").innerHTML = HtmlString;
*all.itemはW3C非標準(IEのみ)

●onChangeイベント
オートコンプリート入力ではイベントが発生しない。
onpropertychangeが別途用意されているが、IE用っぽい。

●HTMLフォームオブジェクトの指定方法
idから取る getElementById() ←便利
JavaScriptのBasicなオブジェクト構造・配列から取る
id、name から取るMicrosoftが先行したドキュメントオブジェクト
nameから取る getElementsByName()
tag名から取る getElementsByTagName()
class名から取る getElementsByClassName()
IEの場合getElementsByName(name)を使ったにも関わらず、idで検索してしまう。
IDとNameは同じ値で登録しておいた方がいいらしい。
直接見に行きたい場合は、FORMが必要。
document.(form_name).elements["test"+i].value="fjkdl"+i;

●変数の型をなんとかする
typeof() 型を調べる。文字でもNumberと認識されるので、
isNaN() 数字だけで構成されているか?
parseInt()等parse系 完全に内部数値型とする

●非同期通信サンプル(IEでは動かない)
※Ajax基本、同一ドメイン内のdata.txtを見に行って、非同期で取得する
※セキュリティ上、同一ドメイン内に限られる
http://allabout.co.jp/internet/javascript/closeup/CU20050515A/
<html><head>
<script type="text/javascript">
function loadTextFile(){
httpObj = new XMLHttpRequest();
httpObj.onload = displayData;
httpObj.open("GET","data.txt",true);
httpObj.send(null);
}
function displayData(){document.ajaxForm.result.value = httpObj.responseText;}
</script>
</head><body>
<form name="ajaxForm">
<input type="button" value="読み込み" onClick="loadTextFile()"><br>
<textarea name="result" cols="40" rows="5"></textarea>
</form>
</body></html>

●非同期通信オブジェクトの取得(IE/FireFox両対応)
//XMLHttpRequestオブジェクト生成
function createHttpRequest(){
    //ie
    if(window.ActiveXObject){
        try {
            return new ActiveXObject("Msxml2.XMLHTTP")
     &#
160;  } catch (e) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP")
            } catch (e2) {return null}
         }
    } else if(window.XMLHttpRequest){
        return new XMLHttpRequest()
    } else {return null}
}

●イベントが発生したエレメントを取得する
ブラウザによって相違
if (evt.target) {  /* Firefox */
elem = evt.target;
}else if (window.event.srcElement) { /* IE */
elem = window.event.srcElement;
}

nabekのなぬげなblog(゚∀゚)!