x_app_vb2010.indd

Size: px
Start display at page:

Download "x_app_vb2010.indd"

Transcription

1 A 練習問題 この章の理解度チェック 解答例

2 第 1 章 練習問題 いいえ 違います Visual Basicには Visual Basic.NETも含まれています 文脈にもよりますが 特に現在では Visual Basicという用語は.NET 対応のVisual Basicを意味する場合が多いと言えます 2. 正解は a b c d( インタープリター ) は誤りです.NET 以降の Visual Basic は 中間言語を出力するコンパイラです また 実行時には.NET Frameworkの実行環境によって機械語に翻訳されてから実行されます 3. a b c d すべて 練習問題 はい 正しいです Visual Studioには Visual Basicのほかに Visual C# Visual C++ およびVisual Web Developerなどが含まれます 2. 正解は b c d a のソリューションは 1 つ以上のプロジェクトをまとめて管理する単位であって プロジェクトをビルドして生成させるものではありません 3. コントロールとは テキストボックスやボタンなどの ユーザーインターフェイスを構成する部品のことです ただし いくつかのコントロールには 表示を伴わない内部的なプログラム部品もあります 練習問題 つのステートメントを次の行に続けるには 行末に半角スペースとアンダーバー (_) を記述します 2. どちらの代入文も2 行にわたっていますが 1つ目の代入文は 演算子の直後で改行しているので 暗黙の行連結によって 次の行に継続するとみなされ 1つの代入文として有効です しかし 2 つ目の代入文は 演算子の直前に改行しているため 暗黙の行連結にならず 1つの代入文としては無効となります 3. いいえ 正しくありません Class から までのブロックは 1つのソースファイルの中に納まる必要があります たしかに 1つのクラスを複数のファイルに分割する場合 それぞれをパーシャルクラスと呼びますが 1 つ 1 つのパーシャルクラスは Class から まで 1 つのブロックとして閉じています 練習問題 Dim num As Integer 2. いいえ このメソッドをクラスブロックの外に記述することはできません このメソッドは クラスの構成要素の 1 つであり クラスブロックの中に記述する必要があります 3. ボタンクリックなどの操作によって駆動するメソッドは イベントハンドラー または イベントプロシージャ と呼ばれています この章の理解度チェック ( 第 1 章 ) 1. 次の 4 つです フォーム上にボタンを貼り付けて画面を構築するなど ビジュアルな環境での開発による開発生産性の向上 習得しやすさ (BASIC 言語や.NET 以前のVisual Basicから受け継ぐ構文 ).NET Framework の恩恵 ( セキュリティや信頼性 豊富なライブラリ群など ) 本格的なオブジェクト指向プログラミングによる開発生産性の向上 2..NET Frameworkに関する知識と オブジェクト指向プログラミングに関する知識です 3. プロジェクト1つがEXEファイル1つ またはDLLファイル 1つに相当するので プロジェクトは3 個必要です ソリューションは 一度に作業を行なう単位なので 最低 1つあればよく 数は限定されません 4. フォームデザイナー上にボタンが1つ貼り付いた状態になればフォームは完成です また コードは第 1 章の図 1.18(31ページ ) のようなイベントハンドラーが生成できれば完成です 具体的な手順は 1.2 節 (11 ページ ) のうち 主に プロジェクトとソリューション 基本的な画面のデザイン 基本的なコードの入力 の説明を参照してください 5. このコードは 1つのステートメントであり Visual Basicでは原則として 1 つのステートメントは 1 行で記述しなければなりません そのため 問題文にあるコードのままだと コンパイルエラーになります 正しくコンパイルする方法としては このステートメントを1 行に納めるように修正する方法や 次のように1 行目の末尾に 半角スペースとアンダーバーを付ける必要があります Label1.Text = TextBox1.Text _ + " さん こんにちは " または Visual Basic 2010からの新しい方法として 1 行目に 2

3 おいて 演算子の直後に改行する方法もあります この場合は 暗黙の行連結 と呼ばれる新機能によって 2 行目に暗黙的に継続するとみなされるので 正常にコンパイルできます 解答プログラム Chap01 WinSol つ目のイベントハンドラーを自動生成した後 そのイベントハンドラーの内部は 次のようになります このメソッドは Form1 クラスのブロック内に記述する必要があります Private Sub Button3_Click(... Dim a As Integer Dim b As Integer a = 10 b = a + 20 MsgBox(b) 解答プログラム Chap01 WinSol1-3 第 2 章 練習問題 正しくありません Visual Basicの予約語で表現されるデータ型は.NET Frameworkの共通型システム (Common Type System:CTS) によってサポートされているデータ型です よって C# のような他の.NET 対応プログラミング言語からも共通に利用できます 2. Dim と記述した場合は 予約語としての Dim として認識されます [Dim] と記述した場合 予約語としての効力がなくなり 変数名などの識別子として認識されます また "Dim" と記述した場合は 単なる Dim という文字列データとして認識されます 3. Dim x As Long, y As Short 4. データ型は値型と参照型に分類できます 値型として変数を宣言した場合は 変数の領域そのものがデータの実体を格納できます 参照型として変数を宣言した場合は 変数の領域に データの実体が格納されるわけではありません データの実体がメモリ上のどこに存在するかという位置情報 ( 参照情報 ) が 参照型の変数の領域に格納されます 練習問題 この配列変数 datの要素の型は Short 型であることがわかります Short 型の要素 5 つを持つ配列を作るには 次のように記述します 要素数は 5 個なので 配列の添え字の最大値は 4 になります dat = New Short(4){} 2. 初期値として 順に を持つ Integer 型の要素を確保するには 次のように記述します (1 行のステートメントとして記述できます ) Dim arr() As Integer = { 100, 200, 300, 400, 500, 600, 700 } 紙面の都合上 で折り返しています なお 暗黙の行連結を使用する場合 カンマの直後や 括弧 { の直後 また 括弧 } の直前に改行することが可能なので たとえば 次のような書き方も可能です Dim arr() As Integer = { 100, 200, 300, 400, 500, 600, 700 } 3. 1 行目の arr1(0,0) = 10 の配列 arr1 は二次元配列です 二次元配列は 表にたとえることができ この例では添え字が一番小さい表の端の要素に 値 10 を代入しています 2 行目の arr2(0)(0) = 10 の配列 arr2 はジャグ配列です この例では arr2(0) arr2(1) arr2(2) という要素で構成される配列があり その各要素もそれぞれが配列を表わし 先頭の arr2(0) で表わされる配列に関して その先頭の要素を arr2(0)(0) と表現しています この要素に値 10 を代入しています 練習問題 商を求める演算子は 割り算の余りを求める演算子は Mod なので 次のステートメントになります r1 = a b r2 = a Mod b 2. 変数 n の値を 20 だけ増加させるには 次のようになります n += Option StrictがOnなので Integer 型からString 型への暗黙的なデータ型変換はできません データ型変換関数を使用して 明示的なデータ型変換を行なう必要があります よって 次のようになります str = CStr(n) この章の理解度チェック ( 第 2 章 ) 1. Button2_Click イベントハンドラーは 次のようになります Private Sub Button2_Click(... Dim mile As Double = R Dim kilo As Double kilo = mile * 1.609R MsgBox( CStr(mile) + " マイルは " + CStr(kilo) + " キロです ") 3

4 プログラムを実行して [Button2] ボタンをクリックした場合 図 A.1 のようにメッセージボックスが表示されます えられます 太郎さんの環境を変更せずに 正常にコンパイルするには 暗黙的なデータ型変換を防ぐ必要があり そのためには初期化リストの各リテラルがChar 型になるよう二重引用符の後に c を付けます Dim youbi() As Char = { " 日 "c, " 月 "c, " 火 "c, " 水 "c, " 木 "c, " 金 "c, " 土 "c } 解答プログラム Chap02 WinSol2.4 図 A マイルをキロメートルに換算して表示する解答プログラム Chap02 WinSol たとえば 誕生日が1980 年 12 月 31 日の場合は 次のようになります この場合 日数の算出結果は11170 日目になります Private Sub Button3_Click(... Dim span As TimeSpan span = #8/1/2011# - #12/31/1980# MsgBox(CStr(span.Days) + " 日目です ") なお Option Strictコンパイルオプションが Offの場合は メッセージボックスを表示する部分は 次のように暗黙的なデータ型変換も可能です MsgBox(span.Days + " 日目です ") 逆にDate 型のデータに 期間である TimeSpanオブジェクトを加算して その期間が経過した日付を求めることができます 次のコードは 2008 年 1 月 1 日に 日を加算した日付を求める例です なお この構文の意味を正確に理解するには 第 7 章まで読み進める必要があります Dim dt As Date dt = #1/1/2008# + New TimeSpan(10000, 0, 0, 0) 解答プログラム Chap02 WinSol この配列は各要素が Char 型として定義されています しかし 実際の初期化リストに記述されたリテラルは 二重引用符 ( ダブルクォーテーション ) を使用しているので String 型であり データ型が異なっています Dim youbi() As Char = { " 日 ", " 月 ", " 火 ", " 水 ", " 木 ", " 金 ", " 土 " } そのため 初期値を設定する際に String 型から Char 型へ暗黙的なデータ型変換が発生します よって 太郎さんがコンパイルエラーになったのは コンパイルオプションにおいて Option Strict が On であることが考えられます また 次郎さんが正常にコンパイルできたのは Option StrictがOffであることが考 4. Button4_Click イベントハンドラーは 次のようになります 配列 youbiでは 添え字が0なら " 日 " 1なら " 月 " 2なら " 火 " という関係があるので 変換処理の元になる数値である変数 num の値を 配列の添え字に使用すれば 対応する曜日を求めることができます なお このコードの状態で実行すると 結果は水です というメッセージが表示されます Private Sub Button4_Click( Dim youbi() As Char = { " 日 "c, " 月 "c, " 火 "c, " 水 "c, " 木 "c, " 金 "c, " 土 "c } Dim num As Integer = 3 Dim ch As Char ch = youbi(num) ' 数字 曜日 MsgBox(" 結果は " + CStr(ch) + " です ") 解答プログラム Chap02 WinSol Button5_Click イベントハンドラーは 次のようになります これを実行すると 残高は と表示されます Private Sub Button5_Click(... Dim total As Integer = 10000, rank = 3 Dim purchase As Integer = 3000 Dim table() As Integer = {0, 50, 100, 300} Dim result As Integer result = purchase + table(rank) total += result MsgBox(" 現在の残高は " + CStr(total) + " です ") 解答プログラム Chap02 WinSol2.4 第 3 章 練習問題 最初の条件である 変数 aの値が10 以上 を満たしたときは 2つ目の条件式を評価しないようにするために ショートサーキットを利用する必要があります つまり 2つの条件式の結 4

5 合にはOrではなく OrElseを使用します よって 次のようになります n += 2 End While a >= 10 OrElse b <> 0 解答プログラム Chap03 WinSol3-3.2 b done 2. 次のようになります 変数 bの値に応じて分岐できるようにif の条件の部分には 変数 bを表記する条件式を記述します If b <= 0 Then c = 0 ElseIf b <= 100 Then c = a * 2 Else c = a * 3 3. 次のようになります 変数 amount の値に応じて分岐するので SelectCaseの直後に amount を記述します Select Case amount Case Is <= 0 rt = 0 Case 1 rt = 10 Case 2 rt = 15 Case 3 To 5 rt = 18 Case Else rt = 20 End Select Case 句の部分は 他のコードも考えられます たとえば Case 3 To 5 の部分は Case Is <= 5 でも正解です 4. 2つの配列変数がNothingではなく かつ等しくない場合なので ❶の条件式は次のようになります ただし 比較対象となる配列変数は参照型なので 等号 (=) の代わりに Is 演算子を使う必要があります ( この場合は否定なのでIsNot 演算子を使用します ) なお AndAlsoは演算子なので その直後で改行を行ない 暗黙の行連結を使用することができます If d1 IsNot Nothing AndAlso d2 IsNot Nothing AndAlso d1 IsNot d2 Then ❷ 練習問題 次のようになります 前問と違い While が Until になっているので 条件式の意味を逆転させれば 同じループになります つまり n < 10 を n >= 10 にします Dim n As Integer = 0 Do Until n >= 10 n += 2 Loop 解答プログラム Chap03 WinSol3-3.2 b done 3. 次のようになります カウンター変数が 8 まではループし 10 では止める必要があるので To 句の後ろは 8 にして Step 句の後ろは 2 にします こうすると 8 までループした後 次の回にカウンター変数は 10 になり その回はループせずに終了します For n As Integer = 0 To 8 Step 2 Next n 解答プログラム Chap03 WinSol3-3.2 b done 4. 次のようになります 配列 table に関して 要素を 1 つずつ確認するので Inの後ろは配列名 tableになります また 要素は Char 型なので 要素 1つを表わす変数 sujiはchar 型として定義する必要があります suji = ch の評価によって 引数が配列内に存在したことがわかった場合 それ以上ループする必要がないので Exit For ステートメントによってループから抜け出します Dim table() As Char = { " 零 "c, " 一 "c, " 二 "c, " 三 "c, " 四 "c, " 五 "c, " 六 "c, " 七 "c, " 八 "c, " 九 "c } Dim ch As Char Dim rt As Boolean = False For Each suji As Char In table If suji = ch Then rt = True Exit For Next 解答プログラム Chap03 WinSol3-3.2 b done 1. 次のようになります 条件式は n <= 8 でもかまいません Dim n As Integer = 0 While n < 10 この章の理解度チェック ( 第 3 章 ) 1. 次のようになります なお 同じアルゴリズムを実装する上で 5

6 さまざまな記述方法が考えられます これが唯一の正解というわけではありません Public Class Form1 Private Sub Button1_Click(... Dim str As String = TextBox1.Text Dim kilo As Double = CDbl(str) Dim mile As Double Dim msg As String For i As Integer = 0 To 4 mile = kilo / 1.609R ms g = String.Format( "{0,6:0.00} キロ = " + "{1,6:0.00} マイル ", kilo, mile) PrintData(msg) kilo += 10 Next 解答プログラム Chap03 WinSol3-3.z.1 マイル 2. 次のようになります ループしながら 配列 table の要素を 1 つずつ参照する必要があるので ループのカウンター変数を使用して 要素の参照には table(i) と記述します この iというカウンター変数の値は 配列の要素の順番 ( ゼロから始まる順番 ) も表わしており 曜日に対応する数値にも相当します そのため 引数 ch と配列要素が一致した場合 このカウンター変数 i の値を変換後の数値として 変数 rt に代入します なお このようなカウンター変数を使用する必要があることから 今回はFor Each...Nextステートメントではなく For...Nextステートメントを使用するほうが適当です ループ内で値が見つかった場合は もうそれ以上ループする必要はないので Exit For ステートメントを実行して ループから抜け出ます また ループ内で該当する値が見つからない場合 変数 rtの値を 1にするためには ループを始める前に初期値として 変数 rt に 1 を設定しておきます Public Class Form1 Private Sub Button1_Click(... Dim str As String = TextBox1.Text Dim ch As Char = CChar(str) Dim table() As Char = { " 日 "c, " 月 "c, " 火 "c, " 水 "c, " 木 "c, " 金 "c, " 土 "c } Dim rt As Integer = -1 For i As Integer = 0 To table.length - 1 If ch = table(i) Then rt = i Exit For Next If rt = -1 Then PrintData(" 数値に変換できません ") Else PrintData(" 数値 " + CStr(rt) + " です ") 解答プログラム Chap03 WinSol3-3.z.2 曜日順 3. 次のようになります 1マイルごとにループして リストボックスに表示する際には 次の点に注意してください 換算結果のキロが km を越えてしまった場合 その換算結果は表示してはならず ループを終了する必要があります つまり ループ継続の評価は キロに換算した直後であり 表示する前です また ループの終了後に km 地点の換算結果を表示しているので ループ内で表示する範囲は km 以下 ではなく km 未満 とするのが正しいです ( ただし ループ継続条件を km 以下としても 結果的に出力は同じになります ) Public Class Form1 Private Sub Button1_Click(... Dim mile As Double Dim kilo As Double Dim str As String mile = 1D kilo = mile * 1.609D Do st r = String.Format( "{0,6:0.00} マイル = " + "{1,6:0.000} キロ ", mile, kilo) PrintData(str) mile += 1D kilo = mile * 1.609D Loop While kilo < D kilo = D mile = kilo / 1.609D str = String.Format( "{0,6:0.00} マイル = " + "{1,6:0.000} キロ ", mile, kilo) 6

7 PrintData(str) ループ部分のアルゴリズムは他にも考えられます ループの条件句を使わず If ステートメントで条件判定し Exit Do などでループを抜け出る方法もあります たとえば Button1_Click イベントハンドラーの前半部分 ( ループ終了まで ) は 次のようにも記述できます Private Sub Button1_Click(... Dim mile As Double Dim kilo As Double Dim str As String mile = 1D Do kilo = mile * 1.609D If kilo >= D Then Exit Do str = String.Format( "{0,6:0.00} マイル = " + "{1,6:0.000} キロ ", mile, kilo) PrintData(str) mile += 1D Loop この例では Do...Loop 自体には 条件式を付けず永久ループにしており ループ内の2 行目にある条件評価によって ループ終了を判断し 必要に応じてExit Doを実行しています 解答プログラム Chap03 WinSol3-3.z.3 マラソン 第 4 章 練習問題 マイルを渡し キロメートルに換算した結果を返すメソッドは次のようになります 戻り値を返すので Functionプロシージャとして定義する必要があります Private Function MileToKilo( ByVal mile As Double) As Double Return mile * 1.609R End Function 2. 引数を渡して 戻り値を受け取るには 次のようになります ただし ここでは仮引数の名前を指定するので 名前 := 値 のように記述します rt = Add(b:=20, a:=10) 3. 値渡しでは 実引数と仮引数は異なるメモリ領域です そのため メソッドを呼び出す際には 実引数から仮引数へ情報がコピーされます ただし 引数自体が値型の場合は 実引数に格納されたデータ自体が仮引数へコピーされるのに対して 引数が参照型の場合では 実引数が持つ参照情報が仮引数へコピーされます 4. パラメータ配列を追加すると 次のようになります なお 文法上の理由で パラメータ配列は値渡し (ByVal) でなければなりません また 仮引数は配列なのでvalという名前の直後には ( ) が付きます Private Function Proc1( ByVal ParamArray val() As Long) As Integer 5. このメソッド Proc2 には オプションの引数が 2 つあります 呼び出しの際 最初の引数 xには 明示的に実引数として 10 を渡していますが 2 つ目の引数は省略しています そのため x には 10 y には既定値の 100 が渡ります 練習問題 つのステートメントは どちらも論理和を表わす論理演算子が使われています しかし 1 つ目の OrElse はショートサーキットとしての機能が作用します そのため Buildupメソッドの戻り値がゼロ以外のとき 条件式 Buildup() <> 0 が Trueとなると 後の条件式 Update() <> 0 を評価するまでもなく 条件式全体が True なので 後の条件式の評価が省略されます つまり Update メソッドを呼び出しません 一方 2 つ目のステートメントでは 論理演算子に Or が使われているので 2 つの条件式 Buildup() <> 0 と Update() <> 0 の両方とも必ず評価されます つまり Buildup メソッドと Update メソッドは必ず呼び出されます 2. Subプロシージャのブロックの中から 強制的に制御を呼び出し元に戻すには ReturnステートメントかExit Subステートメントを使用します 3. 次のようになります Private Function MileToKilo( ByVal mile As Double) As Double Dim kilo As Double kilo = mile * 1.609R MileToKilo = kilo Exit Function End Function このFunctionプロシージャでは Exit Functionステートメントを使用して呼び出し元に制御を戻しているので 明示的に戻 7

8 り値を設定する必要があります その際には プロシージャ名に値を設定するので MileToKilo = kilo のように記述します また この戻り値は Double 型なので プロシージャ宣言の先頭ステートメントに As Double を付ける必要があります 練習問題 ステートメントの例外をキャッチするには そのステートメントを Try ブロックの中に記述し 続けて 該当する例外をキャッチするCatchブロックを記述します 最低限必要なコードは次のとおりです Try c = a / b Catch ex As DivideByZeroException End Try 2. 例外が発生した際に 複数のCatchブロックがある場合 先頭のCatchブロックから順に評価して 該当したCatchブロックへ制御が移動します この例では 1 番目のCatchブロックに制御が移ります また Catchブロックの中には Exit Subステートメントがありますが このような例外構造から抜け出すステートメントを実行すると 実際に抜け出る前に必ず Finally ブロックが実行されます よって メッセージボックスには 1 3 の順番で表示されます 3. 次のようになります 例外を発生するには Throw ステートメントを用います また 例外オブジェクトのMessageプロパティに特定のメッセージを設定する場合には 例外オブジェクトのインスタンスを作成する際に そのメッセージを引数として渡します Sub Update(ByVal products() As String) If products Is Nothing Then Throw New ArgumentException( " 引数に配列が指定されていません ") この章の理解度チェック ( 第 4 章 ) 1. GetKansujiValueメソッドは 次のようになります ループしながら 配列 tableの要素を1つずつ参照する必要があるので ループのカウンター変数を使用して 要素の参照には table(i) と記述します この i というカウンター変数の値は 配列の要素の順番 ( ゼロから始まる順番 ) も表わしており 漢数字に対応する数値にも相当します そのため 引数 ch と配列要素が一致した場合 このカウンター変数 i の値を変換後の数値として返します なお このようなカウンター変数を使用する必要があることから 今回はFor Each...Nextステートメントではなく For...Next ステートメントを使用するのが適当です Private Function GetKansujiValue( ByVal ch As Char) As Integer Dim table() As Char = { " 零 "c, " 一 "c, " 二 "c, " 三 "c, " 四 "c, " 五 "c, " 六 "c, " 七 "c, " 八 "c, " 九 "c } For i As Integer = 0 To table.length - 1 If ch = table(i) Then Return i Next Return -1 End Function 解答プログラム Chap04 WinSol4-4.z Kansuji 2. WinApp4プロジェクトの Button1_Clickイベントハンドラーは次のようになります 特に 条件評価のIf...Then...Elseの部分は 同じアルゴリズムを実装する上で 色々な記述方法が考えられます これが唯一の正解というわけではありません Private Sub Button1_Click(... Dim str As String = GetData() Dim kansuji As Char Dim number As Integer Dim msg As String If str.length <> 1 Then MsgBox( " データが無効です " + "1 文字のみ入力してください ") Exit Sub Else kansuji = CChar(str) number = GetKansujiValue(kansuji) If number < 0 Then MsgBox( " データが無効です " + " 有効な 0 から 9 までの " + " 漢数字を入力してください ") Exit Sub msg = String.Format( "{0} は {1} です ", kansuji, number) PrintData(msg) 解答プログラム Chap04 WinSol4-4.z Kansuji 3. 次のコードが 販売管理プログラム WinAppSale Ver.1.2 の完成版です phrase(1) の数値変換に関する例外処理の部分は ❷ の Try から End Try までのブロックです ここでは 例外の種類に応じたCatchブロックが2つ用意されており 例外発生時には以降の処理は不要なので Exit Sub ステートメントを実行して このプロシージャの処理を終了しています また Query メソッドの例外をスローする部分は❶です この例外に対処し 8

9 ているのは ❸のTryから始まる部分です Public Class Form1 Dim products() As String = { "apple", "apple juice", "apple pie", "banana", "banana parfait", "orange", "orange juice", "peach", "peach juice", "pineapple" } Private Sub ClearData() ListBox1.Items.Clear() Private Function GetData() As String Return TextBox1.Text End Function ' 複数件のリストアップ Pr ivate Function Query( ByVal filter As String, ByRef count As Integer) As String() Dim index As Integer Dim result() As String ' 引数の検証 If count <= 0 OrElse count > 256 Then Throw New ArgumentException() ❶ index = 0 result = New String(count - 1) {} For Each product As String In products If product Like filter Then result(index) = product index += 1 If index >= count Then Exit For Next product count = index Return result End Function Private Sub Button1_Click(... Dim str As String = GetData() Dim phrase() As String Dim number As Integer Dim list() As String ' 入力項目の分解 str = Trim(str) phrase = Split(str, " ") If phrase.length >= 2 Then Try number = CInt(phrase(1)) Catch ex As InvalidCastException MsgBox(" 二つ目の項目を数値に変換 " & " できません ( 有効な数字 " & " は 1 から 256まで )") Exit Sub ❷ Catch ex As OverflowException MsgBox(" 二つ目の項目の数字が " & " オーバーフローしました " & "( 有効な数字は " & "1 から 256まで )") Exit Sub End Try Else number = products.length ' 検索 Try list = Query(phrase(0), number) Catch ex As ArgumentException MsgBox(" 二つ目の項目の数字が有効範囲 " & ❸ " にありません ( 有効な数字 " & " は 1 から 256まで )") Exit Sub End Try ' 結果表示 For i As Integer = 0 To number - 1 PrintData(list(i)) Next Private Sub Button2_Click(... ClearData() Private Sub PrintData(ByVal data As String) ' 受け取った引数をリストボックスに追加する ListBox1.Items.Add(data) ' 可能な限り下にスクロールする Li stbox1.topindex = ListBox1.Items.Count - 1 解答プログラム Chap04 Sample02-Ver リスト A が設問 4 の解答です ( 設問 5 の解答と共通のコード ) Ver.1.3 では Label1.Text = のように ラベルに表示内容 を設定していた箇所は この Ver.1.4ではSetResultメソッド呼び出しに変更します (❶ ❸ および❹) そして SetResult メソッドを別途定義して (❺) そのメソッドの中で ラベルに 9

10 表示内容を設定するようにします なお SetResultメソッドは 戻り値を返さないので Subプロシージャとして定義します 5. ゼロ割り算が発生した場合 Accumulateメソッド内で例外を捕捉する方法もありますが この例では 演算処理での実行時エラーやデータ変換での実行時エラーなどさまざまな例外に対して Button1_Clickイベントハンドラーで一括して捕捉し リストボックスにメッセージを表示しているので 同様にリスト Aの❷において DivideByZeroExceptionを捕捉できるようにします Accumulateメソッドで発生したDivideByZero Exceptionは そのまま呼び出し元に伝わり Button1_Clickイベントハンドラーの中で捕捉できます リスト A 設問 4 と 5 の解答コード Public Class Form1 Dim total As Decimal ' 累計額を格納する変数 Private Sub Form1_Load(... total = 0D SetResult("0") ❶ Private Sub Button1_Click(... Dim num As Decimal Dim phrases() As String Try phrases = Split(TextBox1.Text) If phrases.length = 1 Then num = CDec(phrases(0)) Accumulate("+", num) Else num = CDec(phrases(1)) Accumulate(phrases(0), num) Catch ex As InvalidCastException PrintData( " 正しく数値を入力してください " + ex.message) Return Catch ex As ArgumentException PrintData( " 演算子が正しくありません " + ex.message) Return Catch ex As DivideByZeroException ❷ PrintData( " ゼロでの割り算はできません " + ex.message) Return Catch ex As OverflowException total = Decimal.MaxValue Catch ex As Exception PrintData(" 予期せぬエラーです " + ex.message) Return End Try SetResult(FormatData(total)) ❸ PrintData(TextBox1.Text) TextBox1.Text = "" Private Sub Button2_Click(... ListBox1.Items.Clear() total = 0D SetResult("0") ❹ Private Sub PrintData(ByVal data As String) ListBox1.Items.Add(data) Li stbox1.topindex = ListBox1.Items.Count - 1 Pr ivate Sub Accumulate( ByVal op As String, ByVal num As Decimal) Select Case op Case "*" total *= num Case "/" total /= num Case "-" total -= num Case "+" total += num Case Else Throw New ArgumentException() End Select Private Function FormatData( ByVal data As Decimal) As String Dim result As String If data >= D AndAlso data <= D Then result = CStr(total) Else result = "Error" Return result End Function Pr ivate Sub SetResult( ByVal result As String) ❺ 10

11 Label1.Text = result 解答プログラム Chap04 Sample01-Ver.1.4 第 5 章 練習問題 文字入力するごとに アスタリスク (*) を表示するには テキストボックスの PasswordChar プロパティにアスタリスクを設定します 2. ListBox1 のリストに項目を追加するには 次のように記述します ListBox1.Items.Add(" ファースト ") ListBox1.Items.Add(" ビジネス ") ListBox1.Items.Add(" エコノミー ") 3. CheckBoxコントロールもRadioButtonコントロールも オンとオフの状態を表わすことができます しかし CheckBoxでは フォーム上に複数ある場合 コントロールごとにオンとオフの状態を独立して設定できるのに対して RadioButtonでは 1つのコンテナーの中で1つしかオンにできません つまり RadioButton は多者択一の選択に使用します 4. フォームの下辺を下方向にドラッグしてフォームを広げるとき フォームの広がりとともに フォームの下部のボタンが付いてくるようにするには AnchorプロパティにBottomを設定し Topを解除する必要があります BottomとTopを同時に設定してしまうと フォームが下方に広がり ボタンも縦方向に広がってしまいます 5. 住所: ラベルのTextプロパティを 住所(&A): に変更します さらに タブオーダーでは 住所 : ラベルの次にテキストボックスがくるようにします 練習問題 メニュー項目はToolStripMenuItemオブジェクトであり ショートカットキーはこのオブジェクトのShortcutKeysプロパティに指定します 一方 アクセスキーは Text プロパティの中に アンパサンド (&) を付けて指定します アクセスキーを指定する Text プロパティは フォームデザイナー上で直接入力することもできます 2. Ifステートメントの条件文は 次のようになります モーダルフォームを表示するには ShowDialogメソッドを呼び出す必要があり その引数には所有者となるフォームを指定します また ここではForm2 上に配置された [ 実行 ] ボタンの DialogResultプロパティの値が OK なので このボタンが押されたかどうかは 戻り値がDialogResult.OKであるか否かで判断できます Dim frm As Form2 frm = New Form2() If frm.showdialog(me) = DialogResult.OK Then 3. フォームを開いた状態で [Enter] キーを押したとき フォーム上の [ 実行 ] ボタンをクリックした場合と同じ処理を行なうには フォームの AcceptButtonプロパティに [ 実行 ] ボタンの名前を指定します 4. モーダルフォームもモードレスフォームも 使用するフォームには違いがありません ただし モーダルフォームに貼り付けたボタンでは DialogResult プロパティを指定して 閉じた際の戻り値を返すことができます これはモードレスフォームでは利用できません また 表示方法が異なり モーダルフォームでは ShowDialog メソッドを使用しますが モードレスフォームでは Show メソッドを使用します この章の理解度チェック ( 第 5 章 ) 1. Form1に追加するコードは 次のとおりです ❶のUpdateUI メソッドでは [ 自動インデントを有効にする ] オプション (IndentCheckBox) がオンかオフかの状態に応じて 2つのラジオボタンを有効化または無効化する処理を行ないます フォームがロードされたときと [ 自動インデントを有効にする ] オプションの状態が変更されたときには 2つのラジオボタンの状態を更新する必要があるので ❷のLoadイベントハンドラーや ❸のCheckedChangedイベントハンドラーの内部から UpdateUI メソッドを呼び出しています Private Sub UpdateUI() ❶ If IndentCheckBox.Checked Then RadioButton1.Enabled = True RadioButton2.Enabled = True Else RadioButton1.Enabled = False RadioButton2.Enabled = False Private Sub Form1_Load(... ❷ UpdateUI() Private Sub IndentCheckBox_CheckedChanged(... ❸ UpdateUI() 11

12 解答プログラム Chap05 WinSol5-5.z Indent 2. [ 検索 ] メニューと [ 結果をクリア ] メニューの処理は 同名のボタンの処理と同じなので 最も簡単に実装する方法は イベントハンドラーを同じにすることです プロパティウィンドウのイベント一覧で それぞれのメニュー項目のClickイベントに対して 次の既存のイベントハンドラーを指定します SearchMenuItemのClickイベント (Button1_Click) ClearMenuItem のClickイベント (Button2_Click) ユーザーインターフェイスの有効化や無効化の切り替えは すでにUpdateUIメソッドに集約されています そのため このメソッドの中で [ 結果をクリア ] ボタン (Button2) と同じタイミングで [ 結果をクリア ] メニュー (ClearMenuItem) を変更すればよいので 次の ❶と❷の位置にコードを追加します Private Sub UpdateUI() If IsAlwaysCleared() Then Button2.Enabled = False ClearMenuItem.Enabled = False ❶ Else Button2.Enabled = True ClearMenuItem.Enabled = True ❷ 解答プログラム Chap05 Sample02-Ver 設問 3の図 Cのとおりに タイトルやボタンのテキストを表示するには 次のようにプロパティを設定します フォーム / コントロールプロパティ名設定する値 Form1 Text オリジナル電卓 Button1 Text 計算 (&C) Button2 Text クリア (&L) また 設問 3 の図 D のようにタブオーダーを設定するには フォームデザイナー上でフォーム全体を選択した後 [ 表示 ] メニューの [ タブオーダー ] をクリックして 図 D と同様のタブオーダーの設定画面に切り替えます そして 図 Dの順番で各コントロールをクリックします 設定が済んだら もう一度 [ 表示 ] メニューの [ タブオーダー ] をクリックして タブオーダーが設定可能な状態を解除します 解答プログラム Chap05 Sample01-Ver 実行時にフォームのサイズが変化しても 動的にコントロールのレイアウトを変化させるようにするには Anchor プロパティを設定します 設問 4の図 Eのように変化させるには 次のように設定します コントロールプロパティ名設定する値 TextBox1 Anchor Top, Left, Right ListBox1 Anchor Top, Bottom, Left, Right Label1 Anchor Bottom, Left Button1 Anchor Top, Right Button2 Anchor Top, Right 解答プログラム Chap05 Sample01-Ver [ 計算 ] ボタンや [ クリア ] ボタンをクリックした後 テキストボックスに移動するには リストBに示す解答コードの❶や❷ のように TextBox1.Focus() と記述して Focusメソッドを呼び出します ( 設問 5 の解答は 設問 6 の解答と共通のコードです ) 解答プログラム Chap05 Sample01-Ver テキストボックスで [Enter] キーを押した際に計算するようにするには リストBの❸のようにKeyPressイベントハンドラーを実装します また 計算処理はButton1_Clickイベントハンドラーと共通なので ❹のように実装します Button1_ Click イベントハンドラーも ❹を呼び出すように変更します 解答プログラム Chap05 Sample01-Ver.2.0 リストB 設問 5 と 6 の解答コード Private Sub Button1_Click(... ProcessCalculation() TextBox1.Focus() ❶ Private Sub Button2_Click(... ListBox1.Items.Clear() total = 0D SetResult("0") TextBox1.Focus() ❷ Private Sub TextBox1_KeyPress(... ❸ If e.keychar = vbcr Then ProcessCalculation() Private Sub ProcessCalculation() ❹ Dim num As Decimal Dim phrases() As String Try phrases = Split(TextBox1.Text) If phrases.length = 1 Then num = CDec(phrases(0)) Accumulate("+", num) 12

13 Else num = CDec(phrases(1)) Accumulate(phrases(0), num) Catch ex As InvalidCastException PrintData( " 正しく数値を入力してください " + ex.message) Return Catch ex As ArgumentException PrintData( " 演算子が正しくありません " + ex.message) Return Catch ex As DivideByZeroException PrintData( " ゼロでの割り算はできません " + ex.message) Return Catch ex As OverflowException total = Decimal.MaxValue Catch ex As Exception PrintData( " 予期せぬエラーです " + ex.message) Return End Try SetResult(FormatData(total)) PrintData(TextBox1.Text) TextBox1.Text = "" 2. WPF 対応のウィンドウを実装する2 種類のファイルのうちの 1つは XAML(eXtensible Application Markup Language) と呼ばれる専用のマークアップ言語で記述して 画面レイアウトなどを定義したものです もう1つは Visual Basicなどのソースコードを記述するためのもので 主に制御ロジックなどの記述で使用します 3. Visual Studio 上でWPF 対応のウィンドウを編集する3つの形態には XAMLをビジュアルに編集するデザインビュー XAML のマークアップを直接編集する XAML ビュー そして ソースコードを直接編集するコードエディターがあります このうち デザインビューと XAML ビューは 1 つの XAML ファイルを編集するものであり 1 つの WPF デザイナーを構成しています 練習問題 すべて XAMLで記述することができます 特に XAMLは静的な見栄えだけでなく インタラクティブな動的変化もデザインでき イベント ( トリガー ) による動的変化や 実行時の他のコントロールとの動的な連動も実装できます 2. いいえ 正しくありません スタイルやテンプレートは リソースとして別のファイルに実装でき 適用先のウィンドウ内に直接実装する必要はありません 3. WPF におけるアニメーションは 実質的には 時間の経過とともに 1 つのプロパティの値を変化させる定義のことです この章の理解度チェック ( 第 6 章 ) 第 6 章 練習問題 XAML は開発者もデザイン担当者も ユーザーインターフェイスのデザインを行なう際に共通して利用できます よって 大きく分けて以下の2つのメリットがあります デザイン担当者は 実際の実行環境で利用可能な機能を用いて実装するため 実現不可能なデザインを提案することがなくなる デザイン担当者は デザインを文書としてまとめるのではなく 直接 WPF アプリケーションの成果物として作成することができる その結果 デザイン担当者が作成したデザインの仕様書を元に開発者がプログラムコードを書き起こす必要がなくなり 開発効率が向上する また XAMLを用いれば 開発者とデザイン担当者のどちらからでも作業を開始することができるほか どちらも後から修正することができ 柔軟な作業分担を行なうことができる 1. 設問の図 Aに示された [Reset] ボタンと同様のスタイルにするためには WpfAppCalc プロジェクトから この部分に相当するボタンのスタイルをコピーし そのスタイルを適用する必要があります そのため MainWindow.xamlには 次の❶に示すリソースのブロックの中に ❷のボタンのスタイルのブロックを追加します ❷のブロックは WpfAppCalc プロジェクトのものと同じです また ❸のように [Reset] ボタン (<Button> 要素 ) にスタイルを適用する記述を追加します <Window x:class="mainwindow" <Window.Resources> ❶ <Style x:key="ourbutton" TargetType="{x:Type Button}"> ( 略 :WpfAppCalc と同じスタイル ) </Style> </Window.Resources> ❷ 13

14 <Button Content="Reset" Grid.Column="1" Height="23" HorizontalAlignment="Center" Margin="10,10,10,10" Name="Button1" VerticalAlignment="Top" Width="100" Style="{StaticResource OurButton}" ❸ /> 解答プログラム Chap06 WpfAppMap-2 2. 設問の図 Bに示された矢印を追加するには 地図の <Canvas> 要素の中に 次に示す <Image> 要素を追加します この要素のName 属性は "Arrow4" にします また Tag 属性を "D" とします 挿入箇所としては 地図の <Canvas> ブロックの中であれば任意ですが 既存の <Image> 要素のうちName 属性が "Arrow3" の矢印の直後あたりがよいでしょう <Image Name="Arrow4" Source="/WpfAppMap;component/Images/Arrow1.bmp" Canvas.Top="85" Canvas.Left="240" Tag="D"> <Image.RenderTransform> <RotateTransform Angle="0" CenterX="10" CenterY="26"/> </Image.RenderTransform> </Image> 解答プログラム Chap06 WpfAppMap-2 3. 設問の図 Cのように矢印をクリックした際に選択状態にするためには まずは 次のように選択状態の矢印の <Image> 要素を追加する必要があります 元の地図の2 番目の矢印の選択状態 (Name 属性が "Arrow2Selected") と同様なので これをコピーして 位置だけ調整するとよいでしょう この要素の挿入位置は Name 属性が "Arrow3Selected" の矢印の直下あたりが適当です <Image Name="Arrow4Selected" Source="/WpfAppMap;component/Images/Arrow2.bmp" Canvas.Top="85" Canvas.Left="240" Visibility="Hidden"> <Image.RenderTransform> <RotateTransform Angle="0" CenterX="10" CenterY="26"/> </Image.RenderTransform> </Image> また MainWindow.xaml.vb のソースコードでは 次のように修正します ❶の [Reset] ボタンのイベントハンドラーでは ❷に示すように 4つ目の矢印 (Arrow4Selected) の選択状態を解除するために 非表示 (Hidden) に設定しています さらに 矢印のいずれかをクリックした際に実行される❸のイベントハンドラーにも修正を加えます このイベントハンドラーは 4 つ目の矢印のクリックにも呼応させるため ❹のように Handles 句の最後に Arrow4.MouseLeftButtonDown を加えます この❸のイベントハンドラーの中では すでに回転のアニメーション (❺) とメッセージ表示のアニメーション (❽) が実装されています このとき ❻のように 矢印の Tag プロパティ (arrow.tag) の値に応じて Select...Case 文を使用して 表示メッセージや選択矢印を切り替えています ❼のCaseブロックが今回追加した矢印のための表示の切り替えです (Tag プロパティが "D" の場合 ) それ以外のすべての Case ブロックでは 今回追加した選択矢印 (Arrow4Selected) を非表示にする必要があるので それぞれの Case ブロックの末尾に この矢印を非表示 (Hidden) にする代入文を追記しています Private Sub Button1_Click(... ❶ compassanim1.to = 0.0R mapanim1.to = 0.0R rotatestoryboard1.begin() MessageCanvas1.Visibility = Arrow1Selected.Visibility = Arrow2Selected.Visibility = Arrow3Selected.Visibility = Arrow4Selected.Visibility = Private Sub Arrow1_MouseLeftButtonDown(...) _ ❸ Handles Arrow1.MouseLeftButtonDown, Arrow2.MouseLeftButtonDown, Arrow3.MouseLeftButtonDown, Arrow4.MouseLeftButtonDown ❹ ' 回転 compassanim1.to = requestangle mapanim1.to = requestangle rotatestoryboard1.begin() ' メッセージの決定と表示 ❷ ❺ 14

15 Select Case CStr(arrow.Tag) ❻ Case "A" Arrow4Selected.Visibility = Case "B" Arrow4Selected.Visibility = Case "C" Arrow4Selected.Visibility = Case "D" ❼ MessageCanvas1.Visibility = Windows.Visibility.Visible Message1.Text = " 入口を入ったのち " & " 左手に受け付けのデスク " & " がございます " NaviImage1.Source = navileft Arrow1Selected.Visibility = Arrow2Selected.Visibility = Arrow3Selected.Visibility = Arrow4Selected.Visibility = Windows.Visibility.Visible Case Else Arrow4Selected.Visibility = End Select showmessagestoryboard1.begin() ❽ りがよいでしょう <Button Content="UpsideDown" Grid.Column="1" Height="23" HorizontalAlignment="Center" Margin="10,60,10,10" Name="Button2" VerticalAlignment="Top" Width="100" Style="{StaticResource OurButton}" /> 解答プログラム Chap06 WpfAppMap-3 5. [UpsideDown] ボタンをクリックした際に 地図が上下逆になるようにするには このボタンの Clickイベントハンドラーを生成した後 次のコードを入力します ❶の If ブロックでは 現在の角度から アニメーションの終了後の角度 (requestedangle) を求め その角度を使用して ❷で回転アニメーションを実行します また ❸のように メッセージや4つの選択矢印は非表示にします Private Sub Button2_Click(... Dim requestangle As Double If CompassRotator.Angle = 180 Then ❶ requestangle = 0 Else requestangle = 180 ' compassanim1.to = requestangle mapanim1.to = requestangle rotatestoryboard1.begin() ' MessageCanvas1.Visibility = Arrow1Selected.Visibility = Arrow2Selected.Visibility = Arrow3Selected.Visibility = Arrow4Selected.Visibility = ❷ ❸ e.handled = True 解答プログラム Chap06 WpfAppMap-2 第 7 章 解答プログラム Chap06 WpfAppMap-3 4. 設問の図 Dのように [UpsideDown] ボタンを追加するには 次のように <Button> 要素を追加します 追加箇所は <Grid> 要素ブロック内の任意の位置でかまいませんが 既存の <Button> 要素 (Name 属性が "Button1" の [Reset] ボタン ) の直下あた 練習問題 bの 責任 です オブジェクトは 特定の責任を任されたソフトウェア部品です オブジェクト自身が独自に自動的に何か 15

16 をするわけではないので 自動 という選択肢は不適切です また 領域 という選択肢はデータ領域を暗示しますが 1つのオブジェクトは 状態 ( データ ) と 振る舞い から構成されるので 単に 領域 では不十分です 2. インスタンスメンバー変数は インスタンスごとに個別の情報を確保する必要があり インスタンスが 5 個あれば 同じく 5 個存在します 一方インスタンスメソッドは インスタンスごとに作用するので インスタンスごとに個別にメソッドがあると考えてよいですが 実際のメモリ上の実装ではそうする必要はなく あたかもインスタンスごとにあるかのごとく インスタンス単位で作用するだけです インスタンスが複数あっても 実際のインスタンスメソッドの数は1 個です 3. Visual Basicのモジュールに定義されたメンバーは 共有メンバーとして扱われます つまり メンバー変数は共有変数となり メソッドは共有メソッドになります これらには インスタンスを作成せずに アクセスできます 4. 次のようになります Dim customers() As Customer customers = New Customer(19){} For i As Integer = 0 To customers.length - 1 customers(i) = New Customer() Next 2 行目のように まずCustomer 型の配列要素を20 個確保します この時点では あくまで参照情報を格納する配列要素を確保しただけで インスタンスは作成されません 3 行目から 5 行目のように 個別にインスタンスを作成して 配列要素それぞれに 参照情報を設定する必要があります 練習問題 つ目の原因は Overloads 修飾子の使い方です オーバーロードでは オーバーロードの対象となる同一名のメソッドに対して すべてにOverloads 修飾子を付けるか すべてに付けないかのどちらかでないといけません そのため ここでは3つのメソッドすべてにOverloads 修飾子を付けるか もしくは既存の 2 つの Overloads 修飾子を削除する必要があります 2つ目の原因は オーバーロードでは引数のパターンを必ず変えなければならないという点です この例では 2 つ目と 3 つ目のメソッドの引数は どちらも1つでString 型です 戻り値は異なりますが 戻り値が異なるだけでは オーバーロードは成立しません 2. コンストラクターには Integer 型の引数が 1 つあるので 次のようになります Dim ob1 As New Cube(100) Dim ob1 As Cube = New Cube(100) 3. 1つ目の原因は ReadOnly 修飾子がない点です このDataプロパティには Getプロシージャしかないので読み取り専用です 読み取り専用プロパティには ReadOnly 修飾子が必要です 2 つ目の原因は Shared 修飾子の使い方です この Data プロパティには Shared が付いているので共有プロパティです 共有プロパティなどの共有メンバーは 共有メンバーにしかアクセスできません しかし Get プロシージャ内の Return ステートメントでは インスタンスメンバー変数である dt を参照しています このコンパイルエラーをなくすには Data プロパティの Shared 修飾子を削除してインスタンスプロパティに変更するか もしくは 逆に共有プロパティのままにして 変数 dtに Shared 修飾子を付けて共有変数にする必要があります 4. 次のようになります Default 修飾子を付けて Dataプロパティのインデックスには 引数を 1 つ定義する必要があります Default Public Property Data( ByVal ndx As Integer) As Integer Get ( 略 :Returnステートメントを記述する必要がある) End Get Set(ByVal value As Integer) End Set End Property 練習問題 プロジェクトをビルドすると それぞれ別々のアセンブリになります WinAppから異なるアセンブリであるMyLibsのクラスを参照するには そのクラスが Public でなければなりません そのため CubeクラスにはPublic 修飾子を付ける必要があります 2. 同一のプロジェクトでは Form2クラスのメンバー変数 TextBox1が参照できるにもかかわらず 異なるプロジェクトからは参照できない場合 TextBox1にFriend 修飾子が付いていると考えられます Friend 修飾子を付けると 同一プロジェクト内 ( 同一アセンブリ内 ) でないと参照できません 3. 要件を満たすには 次のようになります クラスの Public 修飾子はなくてもかまいません Namespace Util.Etc Public Class Cube End Cube End Namespace または または 16

17 Namespace Util Namespace Etc Public Class Cube End Cube End Namespace End Namespace 4..NET Framework のクラスライブラリは 共有アセンブリとして グローバルアセンブリキャッシュに配置されています グローバルアセンブリキャッシュの位置は Windows OS のフォルダーが C: Windows ならば C: Windows assembly です 5. DLL ファイルがプライベートアセンブリであれば EXE ファイルと同一フォルダーに配置すれば利用できます この章の理解度チェック ( 第 7 章 ) 2. フライト番号を返す読み取り専用プロパティが必要なので ❷ のように定義します Flight クラスのインスタンス作成時に コンストラクターの引数の渡し方に2つのパターンがあるので ❸と❺のように コンストラクターをオーバーロードして 2 つ用意します ただし 2つのコンストラクターの処理は類似しているので ❹のように Me.New(...) を使用して 一方のコンストラクターの処理を もう一方のコンストラクターで利用しています Flight インスタンスにインデックスを直接指定する方法は 数値と文字列の 2 種類があるので ❻や❼のように既定のインデックス付きプロパティをオーバーロードします また ❼ではインデックスの値が economy business first であるかに応じて 処理を振り分ける必要があり アルゴリズムを簡単にするため また保守性を高めるため ❶のように区分を配列として用意します ただし この配列は複数の Flight インスタンスに渡って同じものでかまわないので 共有変数にします 配列にせずに ❼のプロパティの中で 直接アルゴリズムとして実装しても正解です ( ただし 保守性は低下します ) 1. KansujiConverterクラスは 次のようになります このインスタンスに数値 (Integer 型 ) のインデックスを直接付けることができるようにするため Integer 型のインデックスを指定する 既定のインデックス付きプロパティを定義します ( プロパティ名は任意です ) また 変換を簡単にするため 漢字の配列を用意しましたが この配列の内容は固定で インスタンスごとに個別に持つ必要はないので 共有変数にしたほうが無駄がありません また Getプロシージャでは単に値を返すだけでなく インデックス number が有効な範囲 (0 から 9) にあるかチェックし その範囲にない場合は 例外としてArgument Exception を発生させています Public Class KansujiConverter Public Class Flight Private mynumber As Integer Private prices(2) As Integer Private Shared names() As String = {"economy", "business", "first"} Public ReadOnly Property Number( ) As Integer Get Return mynumber End Get End Property ❶ ❷ Shared table() As Char = { " 零 "c, " 一 "c, " 二 "c, " 三 "c, " 四 "c, " 五 "c, " 六 "c, " 七 "c, " 八 "c, " 九 "c } Default Public ReadOnly Property Kanji( ByVal number As Integer) As Char Get If number < 0 OrElse number >= table.length Then Throw New ArgumentException() Return table(number) End Get End Property 解答プログラム Chap07 TestConverter のソリューションに含まれる KansujiConverter.vb Public Sub New(ByVal num As Integer) ❸ Me.New(num, , , ) ❹ Public Sub New(ByVal num As Integer, ByVal eco As Integer, ByVal bus As Integer, ByVal fir As Integer) mynumber = num prices(0) = eco prices(1) = bus prices(2) = fir Default Public ReadOnly Property Item( ByVal ndx As Integer) As Integer Get If ndx < 0 OrElse ndx >= prices.length Then ❺ ❻ 17

18 Throw New ArgumentException() Return prices(ndx) End Get End Property Default Public ReadOnly Property Item( ByVal name As String) As Integer Get For ndx As Integer = 0 To names.length - 1 If names(ndx) = name Then Return prices(ndx) Next Throw New ArgumentException() End Get End Property 解答プログラム Chap07 TestConverter のソリューションに含まれる Flight.vb 3. Productクラスの3つの読み取り専用プロパティとコンストラクターは次のようになります ただし プロパティの実際の値を保持するためのメンバー変数も 3 つ定義する必要があります Public Class Product Private myid As Integer Private myname As String ' 製品 ID ' 製品名 Private myprice As Decimal ' 価格 ' プロパティ Public ReadOnly Property ID() As Integer Get Return myid End Get End Property Public ReadOnly Property Name() As String Get Return myname End Get End Property ❼ Public ReadOnly Property Price() As Decimal Get Return myprice End Get End Property ' コンストラクター Public Sub New(ByVal i As Integer, ByVal nam As String, ByVal pr As Decimal) myid = i myname = nam myprice = pr 解答プログラム Chap07 Sample02-Ver のソリューションに含まれる Product.vb 4. ProductListクラスは次のようになります InitDataメソッドの内部では 配列 products の各要素のインスタンスを作成する際に たとえば New Product(101, "apple", 200D) のように作成し 設問 3 で定義したコンストラクターに 3 つの引数を渡している点に注意してください また この ProductList オブジェクトを あたかも配列のように使用するには このクラスの最後のメンバーとして記述したItemsプロパティのように 既定のインデックス付きプロパティを定義する必要があります Public Class ProductList Dim products() As Product ' 製品情報用の配列 Public Sub InitData() ' 製品情報の初期化 products = New Product(9) {} products(0) = New Product(101, "apple", 200D) products(1) = New Product(102, "apple juice", 250D) products(2) = New Product(140, "apple pie", 450D) products(3) = New Product(201, "banana", 100D) products(4) = New Product(270, "banana parfait", 550D) products(5) = New Product(301, "orange", 200D) products(6) = New Product(302, "orange juice", 250D) products(7) = New Product(501, "peach", 250D) products(8) = New Product(502, "peach juice", 350D) products(9) = New Product(701, "pineapple", 1100D) ' 製品検索 - Form1 クラスから ProductList に移行 Pu blic Function Query( 18

19 ByVal filter As String, ByRef count As Integer) As Product() Dim index As Integer Dim result() As Product ' 引数の検証 If count <= 0 OrElse count > 256 Then Throw New ArgumentException() index = 0 result = New Product(count - 1) {} Fo r i As Integer = 0 _ To products.length - 1 If products(i).name Like filter Then result(index) = products(i) index += 1 If index >= count Then Exit For Next i count = index Return result End Function ' 商品リスト全体の件数を返す Public ReadOnly Property Count() As Integer Get Return products.length End Get End Property ' 擬似的な配列の表現 Default Public ReadOnly Property Items( ByVal ndx As Integer) As Product Get If ndx < 0 OrElse ndx >= products.length Then Th row New _ IndexOutOfRangeException( " 商品リストのインデックスが " + " 無効です ") Return products(ndx) End Get End Property 解答プログラム Chap07 Sample02-Ver のソリューションに含まれる ProductList.vb 5. フォームクラス (Form1.vb) は ProductListクラスのオブジェクトを用いて 検索処理を実行するようになるので 次のコー ドの太字部分のように書き換えます なお Form1クラスブロックの内部に定義されていたInitDataメソッドとQueryメソッドは削除します これまでフォームクラス内部の InitData メソッドやQueryメソッドを呼び出していた部分は 今後は ProductListオブジェクトの同名メソッドを呼び出すため それぞれ products.initdata() products.query(phrase(0), number) に変更します この修正によって フォームクラス内部には 製品検索を直接行なう実装コードはなくなりました Public Class Form1 Private products As New ProductList() Private Sub Form1_Load(... products.initdata() Fo r i As Integer = 0 _ To products.count - 1 PrintData( String.Format( "{0:000}", products(i).id), products(i).name, St ring.format( "{0:#,##0}", products(i).price) ) Next UpdateUI() Private Sub Button1_Click(...) _ Handles Button1.Click, SearchMenuItem.Click Dim str As String = GetData() Dim phrase() As String Dim number As Integer Dim list() As Product ' 入力項目の分解 str = Trim(str) phrase = Split(str, " ") If phrase.length >= 2 Then Else number = products.count ' 検索 Try list = products.query( phrase(0), number) Catch ex As ArgumentException UpdateUI() 19

20 解答プログラム Chap07 Sample02-Ver のソリューションに含まれる Form1.vb 6. 販売管理プログラムVer.2.5.2では ProductLibsプロジェクトを新たにソリューションに追加し ProductListクラスと Productクラスをそのプロジェクトに移動するので ソリューションの構成は図 A.2 のようになります 図 A.4 ProductLibs プロジェクトへの参照の追加 そして ProductLibsプロジェクトのProductListクラスと Product クラスは 次のように Data 名前空間ブロックで囲みます Namespace Data Public Class ProductList 図 A.2 ソリューションの構成 ProdcutLibsプロジェクトのルート名前空間は OurCorpと指定する必要があるので ProductLibsプロジェクトのプロジェクトデザイナーでは アプリケーション タブの ルート名前空間 欄に OurCorp と指定する必要があります( 図 A.3) End Namespace Namespace Data Public Class Product End Namespace また WinAppSaleプロジェクトのForm1.vbでは Product ListクラスとProductクラスが参照できるように ファイルの先頭に次の 1 文を追加します Imports OurCorp.Data 解答プログラム Chap07 Sample02-Ver 第 8 章 図 A.3 ルート名前空間の指定また WinAppSaleプロジェクトにおいて Productクラス等を使用するので ProductLibsへの参照の追加が必要です 参照の追加の操作手順は 7.3 節の ライブラリの参照追加 (354 ページ ) を参照してください 参照の追加を正しく行なうと WinAppSale プロジェクトデザイナーの 参照 タブには 図 A.4 のように ProductLibsがリストアップされます 練習問題 Shapeクラスから継承して Fメソッドをオーバーライドすると 派生クラスである Circle クラスは次のようになります Public Class Circle Inherits Shape Public Overrides Sub F() 20

21 2. 派生クラスでオーバーライドした場合 基本クラスの同名のメソッドを呼び出すには MyBaseキーワードを使用し 次のように記述します MyBase.Proc1() 3. 派生クラスのコンストラクターから 基本クラスのコンストラクターを呼び出すには MyBaseキーワードを使用して次のように記述します ただし この記述は派生クラスのコンストラクター内部の最初のステートメントでなければなりません この設問では 基本クラスの引数なしのコンストラクターを呼び出すので.New() というように () の中には何も記述しません なお 既定では引数なしのコンストラクターを呼び出すので 結局のところ MyBase.New() の部分は省略してもかまいません Public Sub New(ByVal number As Integer) MyBase.New() 4. Proc2がオーバーライドされたのか 隠ぺいされたのかによって このコードの呼び出し先は変わってきます もし 派生クラスである Cube で Proc2 メソッドをオーバーライドしたのならば ob.proc2() の呼び出しはインスタンスによって決まるので 変数 obが表わすcubeインスタンスのオーバーライドしたメソッド (CubeクラスのProc2メソッド) が呼び出されます もし Proc2メソッドを隠ぺいしたのならば ob.proc2() の呼び出しは変数 obの型で決まるので この変数の型である Root クラスの Proc2 メソッドが呼び出されます Dim ob As Root ob = New Cube() ob.proc2() 5. 派生クラスからはアクセスできるようにしたいので Protected 修飾子を使用して 次のように記述します Protected number As Integer または Protected Dim number As Integer い を実現できます 2. 抽象クラスにするには 次のように記述します クラスの修飾子としてMustInheritを付け 抽象メソッドには修飾子として MustOverrideを付けます また メソッド自体は実装を伴わず 文法上 Sub のブロック構造にはできないので は記述できません Public MustInherit Class MyComponent Public MustOverride Sub Proc1() 3. Writer オブジェクトを引数として受け取り その Output メソッドの実装によって出力先を切り替えるには まず Writer クラスを基本クラスにして Output メソッドはオーバーライド可能なメソッドとして定義する必要があります その上で たとえば Writer クラスから継承した派生クラスを 3 つ用意して 各派生クラスの Output メソッドをオーバーライドし それぞれ ファイルの出力 プリンターの出力 ネットワークの送信などの具体的な実装を記述します なお 基本クラスのインスタンスを直接作成する必要がなく 基本クラスのOutputメソッド自体に特に実装を持つ必要がなければ Writerクラスは抽象クラスにして Outputメソッドは抽象メソッドにします 4. IProcess インターフェイスを Comp クラスに実装すると 次のようになります 先頭のクラス宣言のステートメントの次には Implements ステートメントを記述します また 具体的にオーバーライドされるメソッドには Implements 句を付けます Public Class Comp Implements IProcess Public Sub Run(ByVal num As Integer) _ Implements IProcess.Run 5. 引数の型が IPersistインターフェイスであるならば IPersistインターフェイスを実装した任意のクラスのインスタンスを渡すことができます このインターフェイスさえ実装すればよく そのインスタンスのクラス名や基本クラスが何であるかは無関係です 練習問題 クラス継承を用いて多態性を実現する場合 同一のメッセージを送る ためのメソッドを基本クラスに用意します このメソッドを共通のメソッドにして 複数の派生クラスを作ることができます そして 各派生クラスでは このメソッドをオーバーライドして独自の実装を記述することによって 固有の振る舞 練習問題 いいえ イベントを送信するクラスをコーディングする上で 受信側のクラス名やメソッド名は必要ありません 送信側では イベント名を定義して 必要に応じてイベントを発生させ イベントハンドラーに必要な引数を渡すだけです 21

22 2. イベントハンドラーでは Eventステートメントに定義した引数の形式と 同じ形式の引数を受け取らなければなりません ここでは 順に 1つのInteger 型の引数と 1つのString 型の引数を受け取る必要があります 3. 次のようになります UpdatedイベントはMyHandler 型として定義されています そのため String 型の引数を渡せるようにするには Delegateステートメントを使用して String 型の引数が受け取れるように MyHandler 型を定義する必要があります ( 引数の名前は任意です ) Public Delegate Sub MyHandler( ByVal msg As String) Public Class Sender Public Event Updated As MyHandler 4. イベントハンドラーはHandles 句を使用して 次のように記述します ただし このイベントでは String 型の引数を1つ受け取るので イベントハンドラーも引数の形式を合わせる必要があります Private Sub OnUpdated(ByVal msg As String) _ Handles mysender.updated 5. AddHandlerステートメントを使用した場合は 次のようになります Me. は省略可能です AddHandler mysender.updated, AddressOf Me.OnUpdated この章の理解度チェック ( 第 8 章 ) 1. 派生クラスCubeは 次のようになります このコンストラクターの引数のデータを 基本クラス Root のメンバー変数 text に設定する必要があり 基本クラスのコンストラクターの引数にそのデータを渡せば設定できます Public Class Cube Inherits Root Public Sub New(ByVal str As String) MyBase.New(str) 2. Sender クラスは次のようになります Opened イベントを定義するには Eventステートメントを使用します イベントを送信するには RaiseEventステートメントを使用します Public Class Sender Public Event Opened As OurHandler Public Sub TestFire() RaiseEvent Opened("Opened") 3. sender1オブジェクトのopenedイベントハンドラーは 次のようになります メンバー変数 sender1にはwithevents 修飾子が付いているので イベントハンドラーにはHandles 句を使用することができます なお Opened イベントは Delegate ステートメントの定義にあるOurHandler 型なので String 型の引数が1つ必要です イベントハンドラーの引数もこれに合わせる必要があります ( イベントハンドラーのアクセス修飾子は ここでは問いません ) Public Class Receiver Private WithEvents sender1 As New Sender() Private Sub Sender1_Opened( ByVal msg As String) _ Handles sender1. Opened 4. MyEnumeratorクラスは 次の❶のようになります Product Listクラス内でのみ クラス名を使用してインスタンスを作るので MyEnumeratorクラスはProductListクラス内に入れ子で定義した上で プライベートクラスにします また 修正後のGetEnumeratorメソッド内では MyEnumeratorのコンストラクター引数として Product 配列を受け取るので それに対応できるようコンストラクターを定義します この受け取った配列 ( の参照 ) は Currentプロパティで配列要素を返す際に必要になるので ここではメンバー変数 listとして退避します また 現在の要素の位置を記憶するため メンバー変数 currentindexを用意します 初期状態では 要素の先頭より前に飛び出しているので 初期値は 1 にします Public Class ProductList Implements IEnumerable Public Function GetEnumerator() _ As IEnumerator _ Implements IEnumerable.GetEnumerator Return New MyEnumerator(products) End Function Private Class MyEnumerator ❶ 22

23 Implements IEnumerator Private list() As Product Private currentindex As Integer = -1 Public Class Accumulator Protected mytotal As Decimal Pu blic Sub New( ByVal prods As Product()) list = prods Public ReadOnly Property Current() _ As Object _ Implements IEnumerator.Current Get Return list(currentindex) End Get End Property Public Function MoveNext() As Boolean _ Implements IEnumerator.MoveNext currentindex += 1 If currentindex >= list.length Then Return False Else Return True End Function Public Sub Reset() _ Implements IEnumerator.Reset currentindex = -1 " Public Sub New() Reset() Public Sub Accumulate(ByVal op As String, ByVal num As Decimal) Try Select Case op Case "*" mytotal *= num Case "/" mytotal /= num Case "-" mytotal -= num Case "+" mytotal += num Case Else Th row New _ ArgumentException() End Select Catch ex As OverflowException ❶ mytotal = Decimal.MaxValue Throw End Try Public Sub Reset() mytotal = 0D 解答プログラム Chap08 Sample02-Ver Accumulatorクラスは次のようになります Accumulatorクラスのメンバーのうち コンストラクター Accumulateメソッド FormatDataメソッド およびResetメソッドは 外部からアクセス可能になるよう Public 修飾子を付けます ( ここでは 同じアセンブリ内のForm1クラスからアクセスしているので Friend 修飾子でも可能です ) また Accumulateメソッド内では OverflowExceptionを捕捉して 変数 mytotalに最大値を設定する必要があるので ❶のCatchブロックを用意しています このCatchブロック内部では 最大値に設定するほか あらためて Throw ステートメントを実行し 同じ例外を呼び出し元に伝えています ( スローしています ) ❷のFormatDataメソッドでは オーバーライド可能にするためOverridable 修飾子を付け メンバー変数 mytotal に対して整形するので 引数を受け取る必要はなくなります Pu blic Overridable Function FormatData()_ ❷ As String Dim result As String If mytotal >= D AndAlso mytotal <= D Then result = CStr(myTotal) Else result = "Error" Return result End Function また Form1 クラスは次の太字部分のように修正します ❸ で は 合計を表わすメンバー変数 total の代わりに 合計計算の責任を持つAccumulatorインスタンスの変数に置き換えます Load イベントハンドラーの中では ❹のようにインスタンスを 23

24 作成し この時点では合計値が初期値のゼロの状態なので その次行ではFormatDataメソッドを呼び出して 初期値の状態の文字列を取得し これを引数としてSetResultメソッドを呼び出し ラベルに初期値を表示しています ❺も同様の初期化ですが ここでは明示的に Reset メソッドを呼び出しています ❻や❼では Accumulatorインスタンスの Accumulateメソッドを呼び出すように変更します ❽はもう不要なので アポストロフィーを付けてコメントアウトします その他 ❾やも Accumulatorインスタンスの FormatDataメソッドを呼び出すように変更します Public Class Form1 Dim accum As Accumulator ❸ Private Sub Form1_Load(... accum = New Accumulator() SetResult(accum.FormatData()) ❹ Return Catch ex As DivideByZeroException PrintData( " ゼロでの割り算はできません " + ex.message) Return" Catch ex As OverflowException 'total = Decimal.MaxValue ❽ Catch ex As Exception PrintData( " 予期せぬエラーです " + ex.message) Return End Try SetResult(accum.FormatData()) ❾ PrintData(TextBox1.Text) TextBox1.Text = "" Private Sub Button2_Click(... ListBox1.Items.Clear() accum.reset() SetResult(accum.FormatData()) TextBox1.Focus() Private Sub ProcessCalculation() Dim num As Decimal Dim phrases() As String Try phrases = Split(TextBox1.Text) If phrases.length = 1 Then num = CDec(phrases(0)) accum.accumulate("+", num) ❻ Else num = CDec(phrases(1)) ac cum.accumulate( phrases(0), num) ❼ Catch ex As InvalidCastException PrintData( " 正しく数値を入力してください " + ex.message) Return Catch ex As ArgumentException PrintData( " 演算子が正しくありません " + ex.message) ❺ ' 必要なデータの出力 Pr ivate Sub PrintLog( ByVal writer As TextWriter) writer.writeline("-- 明細 --") For Each dt As String In ListBox1.Items writer.writeline(dt) Next writer.writeline() writer.writeline("-- 合計 --") writer.writeline(accum.formatdata()) writer.writeline("==========") 解答プログラム Chap08 Sample01-Ver Accumulatorクラスから継承したAccumulatorExクラスは次のようになります 記述する必要があるメソッドは オーバーライドした FormatData メソッドだけです Public Class AccumulatorEx Inherits Accumulator Pu blic Overrides Function FormatData() _ As String Dim result As String If mytotal >= D AndAlso mytotal <= D Then re sult = String.Format( "{0,10:#, ##0}", mytotal) Else result = "Error" 24

25 Return result End Function なお 次のように基本クラス (MyBase) のFormatDataメソッドを呼び出して 必要な変更部分だけ 差分だけ実装するのでもかまいません Public Class AccumulatorEx Inherits Accumulator Pu blic Overrides Function FormatData() _ As String Dim result As String result = MyBase.FormatData() If result <> "Error" Then re sult = String.Format( "{0,10:#, ##0}", mytotal) Return result End Function また Form1 クラスの書き換えは Form1_Load イベントハンドラー内のインスタンスを作成する部分をAccumulatorExインスタンスの作成に変更するだけです メンバー変数 accum は Accumulator 型のままでかまいません オーバーライドが成立するので FormatDataメソッドを呼び出すと 派生クラスの固有実装のFormatDataメソッドが呼び出され カンマ区切りの合計値を取得できます Private Sub Form1_Load(...) Handles MyBase.Load accum = New AccumulatorEx() SetResult(accum.FormatData()) 解答プログラム Chap08 Sample01-Ver.2.7 第 9 章 練習問題 テーブル形式の検索結果を取得する場合 SqlConnection SqlCommand SqlDataReaderの3つが必要です それぞれ順番に 接続の操作 ステートメントの実行 クエリ結果の操作を担当します 2. SQL Server の管理下に置くために アタッチが必要です 3. 次のようになります 接続文字列は Myキーワードを使用し て参照できます cn.connectionstring = My.Settings.MyConStr cn.open() 4. SQL ステートメントを実行した際に スカラー値としてレコード件数を取得する必要があるので ExecuteScalarメソッドを使用します 5. ProductName 列を参照するには 次のように記述します While rd.read() list.add(rd("productname")) End While 練習問題 テキストボックスに入力した文字列を SELECT ステートメントの文字列に連結する場合 テキストボックスに入力する内容によっては 不正なステートメントが SQL ステートメントに埋め込まれてしまうセキュリティ上の問題 (SQL インジェクション ) があります 2. SQL ステートメントに後からデータを埋め込むとき パラメーターを使用することで そのステートメントの特定の構文要素として 明示的に埋め込むことができます よって SQL インジェクションなどの不正なステートメントの埋め込みの防止につながります また パラメーター付きのステートメントを用意して 複数回ステートメントを実行する場合 2 回目以降のステートメント解析の負荷が減少する可能性があり パフォーマンスが向上する場合があります 3. ストアドプロシージャGetNumberのパラメーターに関する SqlCommandオブジェクトのParametersコレクションの構成は 次のようなコードが考えられます cmd.parameters.add("@number", SqlDbType.Int) cmd.parameters.add("@result", SqlDbType.Int) cmd.parameters("@result").direction = ParameterDirection.Output 4. 明示的に開始したトランザクションの配下で SqlCommandオブジェクト ( 変数 cmd) のステートメントを実行できるようにするには このオブジェクトのTransactionプロパティに 開始したトランザクション (SqlTransactionオブジェクト) を指定する必要があります 次のようになります ctx = cn.begintransaction() cmd.connection = cn cmd.commandtype = CommandType.Text cmd.commandtext = "INSERT INTO table1 cmd.transaction = ctx 25

26 練習問題 非接続型データアクセスは 同一のデータベースの特定のテーブルなどの限られた部分を頻繁に参照するような場合に向いています 非接続型のデータアクセス手法を使用して そのようなデータをプログラム内にキャッシュすれば データベースへのアクセス回数の減少につながり サーバーの負荷を軽減することができます ただし 同一のデータを複数のユーザーが頻繁に書き換えるような状況では サーバー上のデータとキャッシュデータとの不整合が頻繁に起こるので あまり向いていません 2. データセットに含まれる表形式のオブジェクトのクラス名は DataTable です また その表の各行に相当するオブジェクトのクラス名は DataRowです 3. データセットを表わす変数 ds を使用して titles テーブルの 2 行目の price 列を参照するコードは 次のとおりです ds.tables("titles")(1)("price") または cmd.commandtext = "SELECT ProductID, Price, Amount " & "FROM [Order Details] " & "WHERE OrderID cmd.commandtype = CommandType.Text cmd.parameters.add( "@id", SqlDbType.Int) cmd.parameters("@id").value = TextBox1.Text rd = cmd.executereader() While rd.read() ListBox1.Items.Add(String.Format( "{0} {1:#,##0} {2}", rd("productid"), rd("price"), rd("amount"))) End While rd.close() cn.close() ds.tables.item("titles").rows.item(1).item("price") 4. データセットデザイナー上に Membersというタイトルのデータテーブルがあれば 型指定されたデータセットには Membersプロパティが追加されます これはDataTableを表わします また その DataTableのための MembersDataTable クラスや その行のためのMembersRowクラスが生成されます 解答プログラム Chap09 TestDBApp4 2. データベースサーバー上のデータベース名の一覧を表示するアプリケーションのフォーム部分のコードは 次のようになります Imports System.Data.SqlClient この章の理解度チェック ( 第 9 章 ) Public Class Form1 1. 入力した注文番号に基づいて 該当する注文明細を検索するアプリケーションのコードは 次のようになります ❶では プロジェクトデザイナーの 設定 タブのアプリケーション設定で指定した接続文字列 MyConStrを参照しています Imports System.Data.SqlClient Public Class Form1 Private Sub Button1_Click(... Dim cn As New SqlConnection() Dim cmd As New SqlCommand() Dim rd As SqlDataReader cn.connectionstring = My.Settings.MyConStr cn.open() cmd.connection = cn ❶ Private Sub Button1_Click(... Dim cn As New SqlConnection() Dim cmd As New SqlCommand() Dim rd As SqlDataReader cn.connectionstring = "Data Source=. SQLEXPRESS;" & "Initial Catalog=master;" & "Integrated Security=True" cn.open() cmd.connection = cn cmd.commandtext = "sp_helpdb" cmd.commandtype = CommandType.StoredProcedure rd = cmd.executereader() While rd.read() ListBox1.Items.Add(rd("name")) End While rd.close() 26

27 cn.close() は 491ページの 型指定されたデータセットの追加 を参照してください 解答プログラム Chap09 TestDBApp5 3. 非接続型データアクセスを用いて 入力した会員番号に基づいて 注文を検索するアプリケーションを作る場合 ソースコードは次のようになります Imports System.Data.SqlClient Public Class Form1 Private Sub Button1_Click(... Dim adapter As New SqlDataAdapter( "SELECT OrderID, OrderDate, " & "MemberID " & "FROM Orders WHERE MemberID My.Settings.MyConStr) Dim ds As New DataSet() adapter.selectcommand.parameters.add( "@id", SqlDbType.Char, 6).Value = TextBox1.Text adapter.fill(ds, "Orders") For Each row As DataRow In ds.tables("orders").rows ListBox1.Items.Add(String.Format( "{0} {1:yy/MM/dd} {2}", row("orderid"), row("orderdate"), row("memberid"))) Next 解答プログラム Chap09 TestDBApp6 4. ProductLibsプロジェクトにおいて プロジェクトデザイナーの 設定 タブから アプリケーション設定で接続文字列を設定します この文字列は 次の設問のデータソース構成ウィザードで使用します 解答プログラム Chap09 Sample02-Ver 販売管理プログラムWinAppSale Ver.3.0で変更する点は TableAdapterの名前空間をインポートするほか ProductList クラスの InitDataメソッドを書き換えるだけです ProductList クラスの変更部分を次に示します Imports OurCorp.SalesDBDataSetTableAdapters Namespace Data Public Class ProductList Implements IEnumerable Private products() As Product Public Sub InitData() Dim ds As New SalesDBDataSet() Dim adapter As _ New ProductsTableAdapter() Try adapter.fill(ds.products) products = New Product( ds.products.count - 1) {} For ndx As Integer = 0 To products.length - 1 products(ndx) = New Product( ds.products(ndx). _ ProductID, ds.products(ndx). _ ProductName, ds.products(ndx).price) Next ndx Catch ex As Exception Throw New ApplicationException( "Product.InitData データ " & " の読み込みに " & " 失敗しました ", ex) End Try 5. ソリューションエクスプローラーのツリー上で ProductLibs プロジェクトのノードを選択した状態にして [ データ ] メニューの [ 新しいデータソースの追加 ] を選択し 起動するデータソース構成ウィザードを介して作成します このデータセットは ProductLibsプロジェクトの中に作成されます 具体的な手順 解答プログラム Chap09 Sample02-Ver

28 7. 新しい ProductListEx クラスは 次のようになります Public Class ProductListEx Implements IEnumerable ' 製品データをキャッシュするためのデータセット Dim ds As New SalesDBDataSet() Public Sub InitData() Di m adapter As _ New ProductsTableAdapter() Try adapter.fill(ds.products) Catch ex As Exception Th row New ApplicationException( "Product.InitData データの " & " 読み込みに " & " 失敗しました ", ex) End Try ' フィルタ条件に基づく Pu blic Function Query( ByVal filter As String ) As SalesDBDataSet.ProductsRow() ds.products.casesensitive = True Re turn ds.products.select( "ProductName Like '" + filter + "'") End Function ' 商品リスト全体の件数を返す Public ReadOnly Property Count() As Integer Get Return ds.products.rows.count End Get End Property ' 擬似的な配列の表現 Default Public ReadOnly Property Items( ByVal ndx As Integer ) As SalesDBDataSet.ProductsRow Get If ndx < 0 OrElse _ ndx >= ds.products.count Then Throw New _ IndexOutOfRangeException( " 商品リストのインデックスが無効です ") Return ds.products(ndx) End Get End Property ' For Eachステートメントへの対応 Public Function GetEnumerator() _ As IEnumerator _ Implements IEnumerable.GetEnumerator Return ds.products.rows.getenumerator() End Function 解答プログラム Chap09 Sample02-Ver.3.1 のソリューションに含まれる ProductLibs プロジェクト また 上記の変更に伴い Form1.vb も次のように修正します ❶ の部分が最も大きな違いであり ProductListから ProductListExに変更しています それ以降は これに依存する修正です ❷と❸と❹では 扱う製品の1 件分のデータは Product クラスから ProductsRow クラスに変更されています Imports OurCorp.Data Imports OurCorp Public Class Form1 Private products As New ProductListEx() ❶ Private Sub Form1_Load(... products.initdata() For Each prod As _ SalesDBDataSet.ProductsRow ❷ In products PrintData(String.Format("{0:000}", prod.productid), prod.productname, String.Format( "{0:#,##0}", prod.price) ) Next UpdateUI() Private Sub Button1_Click(...) _ Handles Button1.Click, SearchMenuItem.Click Dim str As String = GetData() Dim phrase() As String Dim number As Integer Dim list() As _ SalesDBDataSet.ProductsRow ❸ 28

29 ' Try list = products.query(phrase(0)) Catch ex As ArgumentException MsgBox( " 二つ目の項目の数字が " & " 有効範囲にありません...") Exit Sub End Try For Each prod As _ SalesDBDataSet.ProductsRow ❹ In list If prod Is Nothing Then Exit For PrintData(String.Format("{0:000}", prod.productid), prod.productname, String.Format( "{0:#,##0}", prod.price) ) Next UpdateUI() 解答プログラム Chap09 Sample02-Ver.3.1 内の型指定されたデータセットが表示されるので これをフォームデザイナー上へドラッグ & ドロップし コンポーネントトレイに貼り付けます 3. データソース構成ウィザードで 初期画面のデータ取得元の選択肢にある データベース を選択すると 型指定されたデータセットをプロジェクトに追加できます また そのプロジェクトのデータソースウィンドウには 型指定されたデータセットのツリー構造が表示されます 一方 データ取得元の選択肢として オブジェクト を選択すると 他のプロジェクトにある型指定されたデータセットを 自己のプロジェクトのデータソースウィンドウに追加することができます なお いずれの方法でデータソースウィンドウに型指定されたデータセットを追加した場合でも そのデータセットの各テーブルをフォームデザイナー上にドラッグ & ドロップすることで データバインディングが構成されたユーザーインターフェイスを簡単に作成することができます 練習問題 コレクションの要素を Object 型にすると そのコレクションはあらゆるデータ型が扱えるようになり 汎用性のあるコレクションを定義できるからです ただし 1つのコレクションにどんなデータ型も含めることが可能なため 意図しないデータ型のデータをコレクションに追加しても コンパイラがエラーを検出できないという問題点があります 2. Stack(Of T) のパラメーターに Integer 型をあてはめる場合 変数 st の定義は次のようになります 第 10 章 Dim st As Stack(Of Integer) 練習問題 リストボックス (ListBox1) が 型指定されたデータセット (ds) のProductsテーブルのProductName 列とバインドするためのコードは 次のとおりです 列の値はリストに表示するので DisplayMemberプロパティに指定します ListBox1.DataSource = ds ListBox1.DisplayMember = "Products.ProductName" または 以下のように指定することもできます ListBox1.DataSource = ds.products ListBox1.DisplayMember = "ProductName" 2. プロパティウィンドウを介して 型指定されたデータセットとのデータバインディングを設定するには このデータセットをデザイナーに認識させる必要があります 型指定されたデータセットを作成すると ツールボックスの上にそのプロジェクト 3. IEnumerable(Of Product) インターフェイスが実装されたオブジェクトは IEnumerator(Of Product) 型の列挙子を返します この列挙子の各要素の型は Product 型です 練習問題 次のような LINQ のメリットが 3 つ以上答えられれば正解です 複数のデータソースに対して同じアクセス方法が利用できるため データソースが異なるごとにアクセス方法を覚え直す必要がなく 学習負荷を軽減できる 簡単に 1 つのクエリ式で 異なるデータソースを連結できる プログラム上の文字列として表現されるSQLステートメントとは異なり コンパイラがLINQのクエリ式の有効性をチェックできるので プログラムの信頼性も向上する 従来の一般のプログラミング言語では簡単に表現できなかった 集合データの合計や平均値の算出といった集計処理も 1 つのステートメントで簡潔に表現できる 29

30 など 2. クエリ式は 次のようになります 配列もIEnumerable(Of T) インターフェイスを持つので Inの後ろに記述できます Dim query = From cust In customers Where cust.point >= 2000 Select cust.firstname, cust.lastname 3. クエリ式は 次のようになります Dim query = From m in members Join o in db.orders On m.memberid Equals o.memberid Select o.orderid, o.orderdate, o.memberid, m.membername ただし データソースの順番を次のように逆にはできません Dim query = From o in db.orders _ ' 不可!!! Join m in members _ ' 不可!!! On m.memberid Equals o.memberid _ Select o.orderid, o.orderdate, _ o.memberid, m.membername このように DataContextオブジェクトであるdbを最初にすると コンパイラは このオブジェクトのJoin メソッドを呼び出すコードを生成し LINQ to SQLプロバイダーのJoinメソッドが利用されます しかし LINQ to SQLプロバイダーでは メモリオブジェクトとSQL Serverのテーブルとの結合をサポートしていないので 実行エラーになります 4. OrdersテーブルのOrderDateをキーにして 同じ値のものが 1つにグループ化され グループごとに集計行が1つできます その集計行 1つ分のオブジェクトには OrderDateプロパティとCountプロパティのほか そのグループ1つ分の子レコードの集合をまとめたGroupという名前のプロパティも含みます ここでは Into キーワードの後ろでは 名前 = Count() と指定していないため 集計関数の名前 Count がそのまま列名になります また 名前 = Group と指定していないため 子レコードの集合の名前は Groupになります 練習問題 次のようなEntity Frameworkを利用するメリットが3つ以上答えられれば正解です Entity Frameworkでは概念モデルを採用しているので リレーショナルデータベースに限らず さまざまなデータを対象として扱うことができる リレーショナルデータに限らないことから 階層構造のデータや継承など 豊富なデータ構造を提供しており これらのモデルとプログラムのオブジェクトをマップするため 表形式にとらわれず さまざまなデータをプログラムで扱うことができる プログラム上のオブジェクトと直接マップしているのは概念モデルのエンティティであるため 後からデータベースの構造が変更されても 概念モデル自体を変更せずに データベースのスキーマと概念モデルとのマッピングを調整することで プログラムコードを変更しなくて済む Entity FrameworkのObjectContextは LINQ to Entities を介して 簡潔なデータアクセスができるなど 2. Order_Detailsプロパティは 概念モデルのOrder_Detailエンティティのインスタンスの集合であるエンティティセットにマップされています そして このエンティティセットは データベースのOrder Detailsテーブルにマップされています 3. ObjectContextが実際にデータベースに対して使用する SQL 文を調べるには クエリ変数が表わすオブジェクトのメソッドを使用します ObjectContextのクエリ変数は ObjectQuery 型のオブジェクトであり このオブジェクトの ToTraceString メソッドを使用します この章の理解度チェック ( 第 10 章 ) 1. 型指定されたデータセットのデータとリストボックスとの間でバインドする方法には 次の 3 種類があります リストボックスの DataSourceプロパティ ( および Display Memberプロパティや ValueMemberプロパティ ) に ソースコード上でバインディングの対象となるデータを指定するコードを記述する デザイナー上に型指定されたデータセットをドロップしてコンポーネントトレイに貼り付けた上で プロパティウィンドウを使用してリストボックスの DataSource プロパティに設定する データソースウィンドウからバインドしたいデータ項目を フォームデザイナー上にドロップする 2. In の後ろに記述されたコレクションオブジェクトである変数 arr (ArrayListオブジェクト) には 要素としてCustomerクラスのオブジェクトが含まれており それをFor Eachループの Integer 型の範囲変数 dtにキャストしたため 実行時エラーが起こりました 一方 ArrayListの要素はクラスライブラリの定義上はObject 型なので コンパイラは Object 型から Integer 型へのキャストとみなしエラーとはしません コンパイル時に この不正を検出するには ArrayListの代わりに ジェネリッ 30

31 ク対応のList(Of T) を使用するようにします もちろん コンパイルエラーが発覚した後 さらに修正は必要ですが 少なくともジェネリッククラスList(Of T) を使用すれば コンパイル時にエラーを検出できます 3. LINQ のクエリ式を使用して 注文明細の行単位の小計から 全体の合計を算出するには 次のように記述します Private Sub UpdateTotal() Dim total As Decimal total = Aggregate row In SalesDBDataSet1.OrdersList Into Sum(row.Total) TotalBox.Text = String.Format( "{0:#,##0}", CDec(total)) 解答プログラム Chap10 Sample03-Ver.1.7 図 A.6 データソースウィンドウ 4. この設問で追加したテーブルアダプター ( およびテーブル ) は データセットデザイナー (SalesDBDataSet.xsd) では 図 A.5 の SalesHitory というタイトルとして表示されます テーブルアダプター (TableAdapter) の追加方法は 例 10.2の注文プログラム WinAppOrder Ver.1.6での手順 ( ページ ) を参考にしてください フォームFormSalesHistory.vbのソースコードとして 次のようなものが考えられます 呼び出し元のメインフォームから コンストラクターの引数を介して 製品の ID と名前を受け取る点に注意してください Imports OurCorp.SalesDBDataSetTableAdapters Public Class FormSalesHistory Private myproductid As Integer Private myproductname As String Public Sub New(ByVal prodid As Integer, ByVal name As String) InitializeComponent() myproductid = prodid myproductname = name Private Sub FormSalesHistory_Load(... Dim adapter As _ New SalesHistoryTableAdapter() 図 A.5 データセットデザイナー (SalesDBDataSet.xsd) WinAppSaleプロジェクト側のデータソースウィンドウには 図 A.6のように表示されます ProductLibsプロジェクトをアクティブにした状態 ( 選択された状態 ) のデータソースウィンドウではなく WinAppSaleプロジェクトがアクティブな状態で このように表示できるようにしてください ( SalesHistory ノードが新たに追加された状態 ) Try adapter.fill( SalesDBDataSet.SalesHistory, myproductid) Catch ex As Exception MsgBox( " 該当する製品データの " & " 検索に失敗しました ") Return 31

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~ .NET プログラマー早期育成ドリル VB 編 付録文法早見表 本資料は UUM01W:.NET プログラマー早期育成ドリル VB 編コードリーディング もしくは UUM02W:.NET プログラマー早期育成ドリル VB 編コードライティング を ご購入頂いた方にのみ提供される資料です 資料内容の転載はご遠慮下さい VB プログラミング文法早見表 < 基本文法 > 名前空間の定義 Namespace

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

データアダプタ概要

データアダプタ概要 データベース TableAdapter クエリを実行する方法 TableAdapter クエリは アプリケーションがデータベースに対して実行出来る SQL ステートメントやストアドプロシージャで TableAdapter で型指定されたメソッドと仕て公開される TableAdapter クエリは 所有るオブジェクトのメソッドと同様に 関連付けられたメソッドを呼び出す事に依り実行出来る TableAdapter

More information

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 ( 此処では 10) を代入する丈でなく 2 の配列変数の宣言の様に ブレース { } の中にカンマ区切りで初期値のリストを記述し 配列の各要素に初期値を代入出来る様に成った

More information

Prog2_15th

Prog2_15th 2019 年 7 月 25 日 ( 木 ) 実施メニューメニューバーとコンテクストメニュー Visual C# では, メニューはコントロールの一つとして扱われ, フォームアプリケーションの上部に配置されるメニューバーと, コントロール上でマウスを右クリックすると表示されるコンテクストメニューとに対応している これ等は選択するとメニューアイテムのリストが表示されるプルダウンメニューと呼ばれる形式に従う

More information

Microsoft Word - VB.doc

Microsoft Word - VB.doc 第 1 章 初めてのプログラミング 本章では カウントアップというボタンを押すと表示されている値が1ずつ増加し カウントダウンというボタンを押すと表示されている値が1ずつ減少する簡単な機能のプログラムを作り これを通して Visual Basic.NET によるプログラム開発の概要を学んでいきます 1.1 起動とプロジェクトの新規作成 Visual Studio.NET の起動とプロジェクトの新規作成の方法を

More information

Microsoft Word -

Microsoft Word - Visual Basic 2005 Express Edition 起動とプロジェクトの新規作成方法 1.1 起動とプロジェクトの新規作成 Visual Basic の起動とプロジェクトの新規作成の方法を Visual Basic 2005 Express Edition で説明します なお バージョンやエディションが異なる場合は 操作方法が若干違います 本節の起動とプロジェクトの新規作成の部分については

More information

XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述する

XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述する XAML Do-It-Yourself シリーズ 第 3 回ベントとトリガー -1- XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述することで ゕプリケーションのユーザーンターフェスを実現していました

More information

プレポスト【問題】

プレポスト【問題】 コース名 : 基礎から学ぶ!Excel VBA による業務の自動化 受講日 氏名 1 Excel VBA を使用するメリットとして誤っているものを 1 つ選びなさい 1. 手作業では手間のかかる作業も プログラムに記述した処理は一括して実行されるため 何段階ものメニュー操作を行う必要がなくなる 2. プログラムに書いた処理は記述どおりに実行されるため だれがいつ何回行っても確実な処理がなされ 誤動作を防ぐことができる

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

sinfI2005_VBA.doc

sinfI2005_VBA.doc sinfi2005_vba.doc MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 主なもの 型 型名 型宣言文字 長さ 内容 整数型 Integer % 2 バイト -32,768 32,767 長整数型 Long & 4 バイト -2,47,483,648 2,47,483,647 単精度浮動小数点数 Single 型!

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プロシージャ プロシージャの種類 Subプロシージャ Functionプロシージャ Propertyプロシージャ Sub プロシージャ Subステートメント~ステートメントで囲まれる 実行はするけど 値は返さない 途中で抜けたいときは Exit Sub を行なう Public Sub はマクロの実行候補に表示される Sub プロシージャの例 Public Sub TestSubProc() Call

More information

テスト 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存し

テスト 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存し 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存しない中間言語を実行するための環境である 2..NET Framework に含まれる.NET Framework

More information

VFD256 サンプルプログラム

VFD256 サンプルプログラム VFD256 サンプルプログラム 目次 1 制御プログラム... 1 2.Net 用コントロール Vfd256 の使い方... 11 2.1 表示文字列の設定... 11 2.2 VFD256 書込み前のクリア処理... 11 2.3 書き出しモード... 11 2.4 表示モード... 12 2.5 表示... 13 2.6 クリア... 13 2.7 接続方法 ボーレートの設定... 13 2.8

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

ファイル操作

ファイル操作 ファイル操作 TextFieldParser オブジェクト ストリームの読込と書込 Microsoft.VisualBasic.FileIO 名前空間の TextFieldParser オブジェクトは 構造化テキストファイルの解析に使用するメソッドとプロパティを備えたオブジェクトで有る テキストファイルを TextFieldParser で解析するのは テキストファイルを反復処理するのと同じで有り

More information

Prog2_4th

Prog2_4th 2018 年 10 月 18 日 ( 木 ) 実施 イベントハンドライベントハンドラとは Windows フォーム上のコントロールに対して クリックされた とか 文字列を変更された とかいったイベントを行った際に, それを受け取って処理を行うメソッドをイベントハンドラと呼ぶ 本日の課題第 3 回の授業では, フォームデザイナーで該当するコントロールをダブルクリックして, コードエディタに表示されたイベントハンドラの処理を記述したが,

More information

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = "select * from

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = select * from Imports MySql.Data.MySqlClient Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Label3.Text = "MySQL のデータ表示と更新のテストを行います メニューから行いたい処理を選択して実行してください

More information

Ver.1.1

Ver.1.1 Ver.1.1 B3MLib ライブラリマニュアル / 使用環境 使用環境 Windows XP(SP2 以降 )/Windows Vista/Windows 7 各 32 ビット 64 ビット版 B3MLib.DLL と Extensions.DLL(B3M ライブラリセット ).NET Framework 2.0 以上 Windows XP サービスパック 2 以降 Windows Vista

More information

MVP for VB が語る C# 入門

MVP for VB が語る C# 入門 MVP for VB が語る C# 入門 2008.08.09 初音玲 自己紹介 Z80 アセンブラ 6809 アセンブラ F-BASIC N88-BASIC FORTRAN 77 COBOL LISP Turbo Pascal Prolog KABA C 言語 M シリーズ アセンブラ PL/I VB3.0~ PL/SQL T-SQL VB2005/2008 index Microsoft Visual

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

Userコントロール

Userコントロール User コントロール 初めてのユーザーコントロールの作成 作成したクラスは他のプログラムで再利用出来る為 同じコードを何度も繰り返し作成する必要が無い コントロールも 複数のプロジェクトで再利用出来るクラスで有る 同じユーザーインターフェイスを何度も繰り返してデザインすると謂う経験は 恐らく誰でも有る 例えば 姓と名を入力する為の TextBox コントロールを追加した後で 両方を組み合わせてフルネームを作成するコードを追加する等の作業で有る

More information

Section1_入力用テンプレートの作成

Section1_入力用テンプレートの作成 入力用テンプレートの作成 1 Excel には 効率よく かつ正確にデータを入力するための機能が用意されています このセクションでは ユーザー設定リストや入力規則 関数を利用した入力用テンプレートの作成やワークシート操作について学習します STEP 1 ユーザー設定リスト 支店名や商品名など 頻繁に利用するユーザー独自の連続データがある場合には ユーザー設定リスト に登録しておけば オートフィル機能で入力することができ便利です

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 目次第 1 章プログラミングについて 1 ソフトウェアの働き 1 2 プログラミング言語 1 3 主なプログラミング言語の歴史 2 第 2 章 Visual Basic について 1 Visual Basic とは 3 2.NET Framework の環境 3 3 Visual Basic と.NET Framework の関係

More information

VB.NET解説

VB.NET解説 Visual Basic.NET 印刷編 目次 印刷の概要... 2 印刷の流れ... 2 標準の Windows フォーム印刷ジョブの作成... 3 実行時に於ける Windows フォーム印刷オプションの変更... 3 Windows フォームに於ける接続されたプリンタの選択... 4 Windows フォームでのグラフィックスの印刷... 5 Windows フォームでのテキストの印刷...

More information

Microsoft Word - VBA基礎(6).docx

Microsoft Word - VBA基礎(6).docx あるクラスの算数の平均点と理科の平均点を読み込み 総点を計算するプログラムを考えてみましょう 一クラスだけ読み込む場合は test50 のようなプログラムになります プログラムの流れとしては非常に簡単です Sub test50() a = InputBox(" バナナ組の算数の平均点を入力してください ") b = InputBox(" バナナ組の理科の平均点を入力してください ") MsgBox

More information

Java知識テスト問題

Java知識テスト問題 Java 知識テスト SDAS プログラマ(Java 編 ) 運営事務局 このテストは J2EE プログラマとしての Java の知識を評価するものです 問題は 30 問, テスト時間は J2EE 知識テストとあわせて 90 分です 問題は全て択一式です 選択肢から 1 つだけ選択してください 資料の閲覧は禁止です テストが終わり次第 答案用紙を提出していただいてかまいません テスト終了後, 本テストの内容を他の方に話さないでください

More information

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

Case 0 sqlcmdi.parameters(?tencode).value = Iidata(0) sqlcmdi.parameters(?tenname).value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else Imports MySql.Data.MySqlClient Imports System.IO Public Class Form1 中間省略 Private Sub コマンドテストCToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles コマンドテストCToolStripMenuItem.Click

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

ExcelVBA

ExcelVBA EXCEL VBA REGLECASSE YU SATO 目次 はじめに 開発タブの表示 拡張子 VBEの起動と初期設定 モジュールの挿入 削除 プロジェクト モジュール プロシージャ 変数の宣言 (Dim) If~Then For~Next 応用 :If~ThenとFor~Next ボタンの作成 最後に Subプロシージャ 基本説明 セルの指定 (Range) 変数とデータ型 (String,Long)

More information

MS-ExcelVBA 基礎 (Visual Basic for Application)

MS-ExcelVBA 基礎 (Visual Basic for Application) MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 ( 主なもの ) 型型名型宣言文字長さ内容整数型 Integer % バイト -, ~, 長整数型 Long & バイト -,,, ~,,, 単精度浮動小数点数型倍精度浮動小数点数型 Single! バイト負値 : -.0E ~ -.0E- 正値 :.0E- ~.0E Double

More information

プロセス間通信

プロセス間通信 プロセス間通信 プロセス間通信 (SendMessage) プロセス間通信とは 同一コンピューター上で起動して居るアプリケーション間でデータを受け渡し度い事は時々有る Framework には リモート処理 と謂う方法でデータの受け渡しを行なう方法が有る 此処では 此の方法では無く 従来の方法の API を使用したプロセス間通信を紹介する 此の方法は 送信側は API の SendMessage で送り

More information

MISAO with WPF

MISAO with WPF System.AddIn を利用した アプリケーション拡張 - アドインの開発 - JZ5( 松江祐輔 )@ わんくま http://katamari.jp http://katamari.wankuma.com 2008/9/13 What s System.AddIn System.AddIn 名前空間 Visual Studio Orcus から利用可能 アプリケーションに拡張機能を提 供 なんかいろいろ特長が?

More information

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部 はじめに コース概要と目的 Oracle 独自の手続き型言語である PL/SQL について説明します PL/SQL の基本構文 ストアド サブプログラム トリガーの作成方法 またストアド サブプログラムの管理について習得することを目的としています 受講対象者 これから PL/SQL を使用してアプリケーション開発をされる方 前提条件 SQL トレーニング コースを受講された方 もしくは 同等の知識をお持ちの方

More information

1.dll の配置場所配布時はプログラムの実行フォルダーへ配置 2. 開発環境での使用 プロジェクトのプロパティーで [USBPIO.dll] を参照追加してください 開発環境 dll ファイルの場所 VB.Net Express Edition 境プロジェクトのフォルダ \bin\release VB.Netebugビルドの場合プロジェクトのフォルダ \bin\debug VB.Net Releaseビルドの場合プロジェクトのフォルダ

More information

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid(text_box02_id); if (001 == statee 全体のヒント 1. テキストボックスの制御 1.1. 日付入力日付の入力ボックスは フォーカスが入った時にスラッショを消し フォーカスが他の項目等に移るとスラッシュが加わるようにする オンフォーカス 20100101 オフフォーカス 2010/01/01 1.1.1 オンフォーカス時にスラッシュを消す入力項目のスラッシュを消すには include/function.js ファイル内の var delslash

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 5 月 Java 基礎 1 タイトル Java 基礎 2 日間 概要 目的 サーバサイドのプログラミング言語で最もシェアの高い Java SE の基本を習得します 当研修ではひとつの技術ごとに実用的なアプリケーションを作成するため 効果的な学習ができます Java SE の多くの API の中で 仕事でよく利用するものを中心に効率よく学びます 実際の業務で最も利用される開発環境である Eclipse

More information

Microsoft Word - VBA基礎(3).docx

Microsoft Word - VBA基礎(3).docx 上に中和滴定のフローチャートを示しました この中で溶液の色を判断する部分があります このような判断はプログラムではどのように行うのでしょうか 判断に使う命令は IF 文を使います IF は英語で もし何々なら という意味になります 条件判断条件判断には次の命令を使います If 条件式 1 Then ElseIf 条件式 2 Then ElseIf 条件式 3 Then 実行文群 1 実行文群 2 実行文群

More information

Javaプログラマー早期育成ドリル ~コードリーディング編~ 解答

Javaプログラマー早期育成ドリル ~コードリーディング編~ 解答 Java プログラマー早期育成ドリルコードリーディング編 解答 2 版 2017 年 1 月 本資料は UFN25W:Javaプログラマー早期育成ドリルコードリーディング編 をご購入頂いた方にのみ提供される資料です 資料内容の転載はご遠慮ください 本解答は UFN25W:Javaプログラマー早期育成ドリルコードリーディング編 の初版および2 版に対応しています コラム一覧 このドリルの解答では すべての構文の紹介はしていません

More information

プラグイン

プラグイン プラグイン プラグイン詳細 2 ~ プラグイン機能を持つテキストエディタの作成 ~ はじめに Adobe Photoshop や Becky! Internet Mail 等のアプリケーションでは プラグイン ( 又は アドイン エクステンション 等 ) と呼ばれるプログラムをインストールする事に依り 機能を拡張する事が出来る 此の記事では此の様なプラグイン機能を持ったアプリケーションの作り方を プラグイン対応のテキストエディタを作成する事に依り

More information

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)... レコードセット (ADODB.Recordset) の使い方 作成日 : 2018/02/05 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2018/02/05 新規作成 西村 1 目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst,

More information

mySQLの利用

mySQLの利用 MySQL の利用 インストール インストール時に特に注意点は無い 本稿記述時のバージョンは 6.5.4 で有る (2017 年 11 月現在では 6.10.4 で https://dev.mysql.com/downloads/connector/net/6.10.html よりダウンロード出来る ) 参照設定 インストールが終了すれば Visual Studio で参照の設定を行う 参照の設定画面で

More information

Microsoft PowerPoint - ruby_instruction.ppt

Microsoft PowerPoint - ruby_instruction.ppt Ruby 入門 流れ Ruby の文法 画面に出力 キーボードから入力 数値 文字列 変数 配列 ハッシュ 制御構造 ( 分岐 繰り返しなど ) if while case for each 関数 クラス Ruby とは プログラミング言語 インタプリタ言語 オブジェクト指向 国産 ウェブアプリケーションフレームワーク RubyOnRails で注目 弊社での Web アプリケーション開発に利用 画面に出力

More information

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなどを設定できます ソースファイル名 :Sample8_1.java // HP よりインポート文をここへ貼り付けてください

More information

ASP.NET 2.0 Provider Model 概要

ASP.NET 2.0 Provider Model 概要 ASP.NET 2.0 Provider Model 概要 Agenda ASP.NET 2.0 Provider Model とは カスタムプロバイダの実装 まとめ ASP.NET 2.0 Provider Model とは ASP.NET 2.0 のインフラストラクチャ データストアへのアクセスをアプリケーションロジックから分離 データストアの変更に柔軟に対応 Strategy パターン デザインパターンによる意識の共通化

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

ルーレットプログラム

ルーレットプログラム ルーレットプログラム VB 2005 4 プログラムの概要 カジノの代表的なゲーム ルーレット を作成する 先ず GO! ボタンをクリックすると ルーレット盤上をボールが回転し 一定時間経過すると ボールが止まり 出目を表示するプログラムを作成する 出目を 1~16 大小 偶数奇数の内から予想して 予め設定した持ち点の範囲内で賭け点を決め 賭け点と出目に依り 1 点賭けの場合は 16 倍 其他は 2

More information

Microsoft Word _VBAProg1.docx

Microsoft Word _VBAProg1.docx 1. VBA とマクロ 1.1 VBA とは VBA(Visual Basic for Applications) は 1997 年に Microsoft 社がマクロを作成するために開発された言語である Windows 対応のアプリケーションを開発するためのプログラミング言語 Visual Basic をもとにしているため 次のような特徴がある 1 VBA は Excel Word, Access,

More information

オブジェクト指向プログラミング・同演習 5月21日演習課題

オブジェクト指向プログラミング・同演習 5月21日演習課題 オブジェクト指向プログラミング 同演習 5 月 21 日演習課題 問題 1 配列の例外処理例外が発生する可能性のある処理を try で囲み その後に catch で例外を捕捉します 例外処理の終了処理として finally が行われます これは書かなくて自動的に行われます 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない ArrayIndexOutOfBoundsException

More information

ガイダンス

ガイダンス 情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック

More information

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加 SharpShooter Reports.Win 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されま す 目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発...

More information

JavaScript 演習 2 1

JavaScript 演習 2 1 JavaScript 演習 2 1 本日の内容 演習問題 1の解答例 前回の続き document.getelementbyid 関数 演習問題 4 イベント処理 基本的なフォーム テキストボックスの入力値の取得 演習問題 5 演習問題 1 prompt メソッドと document.write メソッドを用いて, ユーザから入力されたテキストと文字の色に応じて, 表示内容を変化させる JavaScript

More information

ブロック パニック

ブロック パニック ブロックパニック VB 2005 9 プログラムの概要 壁が迫り来る不思議な空間のオリジナルゲーム ブロックパニック を作成する スタートボタンをクリックし上下左右の矢印キーで白猿を移動させる スペースキーを押すと 向いて居る方向の壁が後退する 左右の壁が合わさると ゲームは終了する 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り

More information

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ 第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイルの作成方法 コンパイル方法について説明します IDL ファイルの作成にあたっては INTERSTAGE

More information

目次 更新履歴... 1 画面設計書の目的... 3 必要な内容... 3 画面一覧... 4 必要な内容... 4 画面遷移... 5 画面レイアウト... 6 入力パラメータ... 7 必要な内容... 7 項目定義... 8 必要な内容... 8 部品の種類... 9 ( 参考 ) 部品指定と

目次 更新履歴... 1 画面設計書の目的... 3 必要な内容... 3 画面一覧... 4 必要な内容... 4 画面遷移... 5 画面レイアウト... 6 入力パラメータ... 7 必要な内容... 7 項目定義... 8 必要な内容... 8 部品の種類... 9 ( 参考 ) 部品指定と 画面設計書の作成 作成日 : 2015/06/30 作成者 : 西村 更新履歴 更新日 更新 作業者 2015/06/30 新規作成 ( 仮 ) 西村 2015/11/09 部品の種類 にカラーピッカーとグラフを追加 コンボボックスの HTML の説明の 西村 追加 2017/12/01 公開用の体裁調整 西村 1 目次 更新履歴... 1 画面設計書の目的... 3 必要な内容... 3 画面一覧...

More information

GEC-Java

GEC-Java Copyright (C) Junko Shirogane, Waseda University 2019, All rights reserved. 1 プログラミング初級 (Java) 第 14 回継承 白銀純子 第 14 回の内容 継承 オーバーライド ポリモーフィズム Copyright (C) Junko Shirogane, Waseda University 2019, All rights

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

Microsoft認定資格問題集(70-483_demo)

Microsoft認定資格問題集(70-483_demo) Microsoft 認定資格問題集 受験番号 : 70-483 受験名 : C# でのプログラミング言語 : 日本語問題数 :179 問 テストバリュー (TESTVALUE) はこの日本語版問題集の著作権を所有します 問題集の他人への展開 譲渡 転売 複製 転載等の無断行為は法律上で禁止されています 違反が発覚した場合 法的措置を取らせて頂きますので 予めご了承ください 問題 1 Orderオブジェクトのコレクションがあります

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 多分岐選択 条件式 If Then Else IIF Select Switch 今日の目的 Dim n As Long n = 10 If n = 10 Then 条件式 Debug.Print ゆっくりしていってね! End If 比較演算子 その他 よく使用する演算子 文字列型にたいする条件式 条件式 オブジェクト型 バリアント型に対する条件式 比較演算子 = 等しい 等しくない >=

More information

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが

More information

ホームページ・ビルダー16

ホームページ・ビルダー16 Part 2 テンプレートからページを作る (3) Part 2-3 テンプレートを使ってページを作ろう テンプレートを利用してホームページを作りましょう テンプレートを利用すると 文字や画像を差し替えるだけで魅力的で華やかなページを作ることができます 特にフル CSS テンプレートを利用して作ったページは ページのデザインやレイアウトをスタイルシートで管理しているため あとから簡単にデザインやレイアウトの変更ができます

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作 マイナンバー管理表 操作説明書 管理者用 2015 年 11 月 30 日 ( 初版 ) 概要 マイナンバー管理表 の動作環境は以下の通りです 対象 OS バージョン Windows7 Windows8 Windows8.1 Windows10 対象 Excel バージョン Excel2010 Excel2013 対象ファイル形式 Microsoft Excel マクロ有効ワークシート (.xlsm)

More information

生存確認調査ツール

生存確認調査ツール Hos-CanR.0 独自項目運用マニュアル FileMaker pro を使用 登録作業者用 Ver. バージョン改訂日付改訂内容 Ver. 00//5 初版 Ver. 0// FileMaker Pro の動作確認の追加 はじめに 本マニュアルについて Hos-CanR.0 院内がん登録システム ( 以降は Hos-CanR.0 と記述します ) では 独自項目の作成 登録 サポートはなくなり

More information

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name クラス ( 教科書第 8 章 p.267~p.297) 前回は処理をまとめる方法として メソッドについて学習した 今回はメソッドとその処理の対象となるデータをまとめるためのクラスについて学習する このクラスはオブジェクト指向プログラミングを実現するための最も重要で基本的な技術であり メソッドより一回り大きなプログラムの部品を構成する 今回はクラスにおけるデータの扱いとクラスの作成方法 使用方法について説明していく

More information

立ち読みページ

立ち読みページ 2 Access データベースの作成 テーブルの作成と編集 フォームの作成と 編集 レポートの作成と編集など Access データベース要素の作成と書 式設定について解説します 2-1 データベースを作成する 69 2-2 テーブルを作成する 72 2-3 テーブルを編集する 77 2-4 フィールドを作成してフィールドプロパティを編集する 84 2-5 フォームを作成する 96 2-6 レポートを作成する

More information

Visual Studio と.NET Framework 概要 Runtime Libraries Languag es Tool.NET Visual Studio 概要 http://download.microsoft.com/download/c/7/1/c710b336-1979-4522-921b-590edf63426b/vs2010_guidebook_pdf.zip 1.

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 配列とコレクション 配列の使い方 固定配列 動的配列 コレクションの使い方 今日の目的 固定配列の宣言例 プロシージャレベル Dim arybuf(0 To 5) As Long モジュールレベル Private arybuf(0 To 5) As Long Public arybuf(0 To 5) As Long 固定配列の宣言例 プロシージャレベル Dim arybuf(0 To 5) As

More information

Microsoft PowerPoint - FormsUpgrade_Tune.ppt

Microsoft PowerPoint - FormsUpgrade_Tune.ppt Forms アップグレードに関する追加作業 - 工数見積もり サイジング チューニング - 必要な追加作業 工数見積もり サイジング チューニング 2 1 C/S Web 工数見積もり 工数見積もりの際に考慮すべき事項 アップグレードによる一般的なコード修正 テスト工数 C/S では使用できるが Web では廃止された機能に対する対策 USER_EXIT を使って Windows 上 DLL のファンクションをコールしている

More information

目次 はじめに... 3 システムの必要条件... 3 サンプルアプリケーションの作成... 3 手順 手順 手順 手順 手順 手順 終わりに... 23

目次 はじめに... 3 システムの必要条件... 3 サンプルアプリケーションの作成... 3 手順 手順 手順 手順 手順 手順 終わりに... 23 SharpShooter Reports.Silverlight 基本的な使い方 Last modified on: August 16, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されます 目次 はじめに... 3 システムの必要条件... 3 サンプルアプリケーションの作成... 3 手順 1...

More information

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y  小幡智裕 Java Script プログラミング入門 3-6~3-7 茨城大学工学部情報工学科 08T4018Y 小幡智裕 3-6 組み込み関数 組み込み関数とは JavaScript の内部にあらかじめ用意されている関数のこと ユーザ定義の関数と同様に 関数名のみで呼び出すことができる 3-6-1 文字列を式として評価する関数 eval() 関数 引数 : string 式として評価する文字列 戻り値 :

More information

DAOの利用

DAOの利用 DAO VB2005 で DAO を使用して Excel のデータを取得 Visual Basic 6.0 Dim DB As DAO.Database Dim RS As DAO.Recordset Dim xlfilename As String Dim xlsheetname As String xlfilename = Form1.StatusBar1.Panels(12) & Dir(Form1.StatusBar1.Panels(12)

More information

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O) 21113 Visual Basic を利用したフリーソフト開発 要旨 各自でフリーソフトを作成 インターネット上に公開することを目的とし Visual Basic2008 2010 を使い簡単なアプリの作成に成功した 1. 目的情報化が進んだ現代において 社会に出ていくためにはパソコンの一つや二つ 軽く扱えなければならない さらに 資源の乏しい日本においては今後 情報技術の発展することが望ましいと考える

More information

正規表現応用

正規表現応用 正規表現 正規表現を使って文字列が或る形式と一致するか調べる 指定された正規表現のパターンと一致する対象が入力文字列内で見付かるか何うかを調べるには Regex クラスの IsMatch メソッドを使用する 此処では IsMatch メソッドを使った例を幾つか紹介する 猶 正規表現のパターンと一致する個所を探し 見付かれば 其の箇所を抽出する方法は 正規表現を使って文字列を検索し 抽出する で紹介して居る

More information

Prog1_10th

Prog1_10th 2014 年 6 月 19 日 ( 木 ) 実施 例外処理 Java 言語では, 作成したプログラムを実行する際に, 記述した処理が想定しない事態によって実行できなくなる場合を例外と呼び, その例外への対処, 即ち例外処理が求められる 例外処理を行うための try 文の一般形は次のようになる 例外を発生させる可能性のある処理 catch( 例外のクラス名 1 変数 1 ) 例外に対処する処理 1 catch(

More information

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問 Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問のメソッドを追加する public static void main(string[] args) {

More information

问题集 ITEXAMPASS 1 年で無料進級することに提供する

问题集 ITEXAMPASS   1 年で無料進級することに提供する 问题集 ITEXAMPASS https://www.itexampass.jp 1 年で無料進級することに提供する Exam : 70-762 Title : Developing SQL Databases Version : DEMO 1 / 10 1. ドラッグドロップ注 : この質問は 同じシナリオを使用する一連の質問の一部です あなたの便宜のために シナリオは各質問で繰り返されます 各質問は異なる目標と答えの選択を提示しますが

More information

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作 Access 2007 と SQL Server Express を使用 SQL 文は SQL Server 主体で解説 Access 版ノースウィンドウデータベースを使用 DBMS プログラム サーバーエクスプローラ SQL 文 実行結果 データベース エンジン データベース SQL 文とは 1 度のコマンドで必要なデータを効率よく取得するための技術といえます

More information

MOS_Windows8

MOS_Windows8 テキストの見方や Windows 8 がインストールされているパソコンで の環境設定 CD-ROM のセットアップなど 学習を進める際に知ってお くべき内容について確認します Windows 8 がインストールされている環境では 各テキストに収録されている模擬試験プログラムが正常に動作しない場合があります 本書の記載は 次のテキストを対象としています また テキスト名には次の略称を使用しています テキスト名

More information

GEC-Java

GEC-Java プログラミング初級 (Java) 第 12 回メッセージのやりとり 白銀純子 Copyright (C) Junko Shirogane, Waseda University 2018, All rights reserved. 1 第 12 回の内容 メッセージのやりとり Copyright (C) Junko Shirogane, Waseda University 2018, All rights

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WebForms ASP.NET サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WebForm ASP.NET VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 01 Visual C# 2010 を使ってみよう BMI 計算プログラム 1 Visual Studio 2010 の起動 1 2 画面左下 タスクバーの左端にある スタートボタン をクリック 表示されたメニューにある すべてのプログラム をクリック 2 1 3 4 メニューから Microsoft Visual Studio 2010 のフォルダを探して これをクリック フォルダが展開されて

More information

スライド 1

スライド 1 WindowsForm サンプル解説 S2Container.NET, S2Dao.NET コミッタ 藤井宏明 1 S2Container.NET の Examples フォルダに付属する WindowsSample の解説です 概要 アプリケーション アーキテクチャー ソリューション構成 プロジェクト概要 サンプル説明 2 Ⅰ. アプリケーション アーキテクチャー 3 アプリケーション アーキテクチャー

More information

テキストファイルの入出力1

テキストファイルの入出力1 テキストファイルの入出力 1 0. 今回の目的前回までは 2 回にわたって繰り返しについて学んできました 今回からテキストファイルの入出力について学ぶことにします 1. テキストファイルへの出力 1.1 テキストファイルについてテキストファイルとは コンピュータで扱うことが出来るファイルの中で最も基本的なファイルであり どの様な OS でもサポートされているファイル形式です Windows においては

More information

プレポスト【問題】

プレポスト【問題】 コース名 : サーブレット /JSP/JDBC プログラミング ~Eclipse による開発 ~ 受講日 氏名 1 JDBC の説明として 間違っているものを 1 つ選びなさい 1. JDBC を使用してデータベースへアクセスするときには JDBC API が必要である 2. JDBC API は java.lang パッケージとして提供されている 3. JDBC には JDBC API JDBC

More information

CodeGear Developer Camp

CodeGear Developer Camp T2 Delphi チュートリアルセッション Delphiはじめて奮戦記 で学ぶ Delphiチュートリアル 株式会社フルネスコーチング事業部マネージャー田原孝 1 アジェンダ 株式会社フルネスについて Delphiプログラミングの基本 演習 : 計算機のテンキーを作る 演習 : 計算機の四則演算ボタンを作る 練習問題 まとめ 2 株式会社フルネスについて 事業内容 ハンズオン教育サービス コーチングサービス

More information

正誤表(FPT1004)

正誤表(FPT1004) 1 Introduction 本書で学習を進める前に ご一読ください 1 第 1 章関数の利用 第 章表作成の活用 第 3 章グラフの活用 第 章グラフィックの利用 SmartArt 第 5 章複数ブックの操作 第 章データベースの活用 第 7 章ピボットテーブルとピボットグラフの作成 第 章マクロの作成 第 9 章便利な機能 総合問題 Excel 付録 1 ショートカットキー一覧 Excel 付録

More information

アプリケーション

アプリケーション アプリケーション開発 お絵かきソフト 目次 お絵かきソフトを作ってみよう... 3 絵を書く枠と場所表示を作る... 3 マウスの動きを見てみよう... 4 絵を書く準備をします... 5 絵を書くとはどういうことか... 5 では線画を描いてみよう... 6 マウスをドラッグしたときだけ線を引くように改造する... 8 お絵かきソフトを作ってみよう 今回は お絵かきソフトを作ってみましょう マウスを動かして線画を書いてみましょう

More information

PowerPoint Presentation

PowerPoint Presentation ソフトウェア演習 B GUI を持つ Java プログラムの 設計と実装 4.1 例題 :GUI を持った電卓を作ろう プロジェクトCalculator パッケージ名 :example ソースファイル : Calculator.java GUI.java EventProcessor.java 2 4.2 GUI とイベント処理 GUI の構成 :Swing GUI の場合 フレーム JFrame:

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 6 回目 if 文と if else 文 今日の講義で学ぶ内容 関係演算子 if 文と if~else 文 if 文の入れ子 関係演算子 関係演算子 ==,!=, >, >=,

More information

図 2 Excel スプレッドシートの世界 のウィンドウ 図 3 Visual Basic の世界 のウィンドウ 図 3 の VBA ウィンドウは 図 2 の Excel ウィンドウのメニューの ツール をクリックし 開か れるプルダウンメニューで マクロ /Visual Basic Editor

図 2 Excel スプレッドシートの世界 のウィンドウ 図 3 Visual Basic の世界 のウィンドウ 図 3 の VBA ウィンドウは 図 2 の Excel ウィンドウのメニューの ツール をクリックし 開か れるプルダウンメニューで マクロ /Visual Basic Editor Excel マクロ -Visual Basic の基本 - 1.Excel ファイルの構成 Excel ファイルは 右図のように 構成されている 一般に Excel と言えば 右図で Excel スプレッドシートの世界 と名付けた部分 すなわち Excel を起動したときに表示されるスプレッドシート (1ページの場合もあり 数ページの場合もある ) のみであるように思われている Excel ファイルには

More information

untitled

untitled Visual Basic.NET 1 ... P.3 Visual Studio.NET... P.4 2-1 Visual Studio.NET... P.4 2-2... P.5 2-3... P.6 2-4 VS.NET(VB.NET)... P.9 2-5.NET... P.9 2-6 MSDN... P.11 Visual Basic.NET... P.12 3-1 Visual Basic.NET...

More information

スクールCOBOL2002

スクールCOBOL2002 3. 関連資料 - よく使われる機能の操作方法 - (a) ファイルの入出力処理 - 順ファイル等を使ったプログラムの実行 - - 目次 -. はじめに 2. コーディング上の指定 3. 順ファイルの使用方法 4. プリンタへの出力方法 5. 索引ファイルの使用方法 6. 終わりに 2 . はじめに 本説明書では 簡単なプログラム ( ファイル等を使わないプログラム ) の作成からコンパイル 実行までの使用方法は既に理解しているものとして

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Excel VBA の基本 1 VBA Visual Basic for Applications Office シリーズに搭載されているプログラミング言語 マクロを作成するために使われる 1 プログラミングとは 人間の意図した処理を行うようにコンピュータに指示を与えること セル A1 の内容をセル B1 にコピーしなさいセル A1 の背景色を赤色にしなさいあれをしなさいこれをしなさい 上から順番に実行

More information

1/9 ページ VBA 基礎文法最速マスター VBA VBAの文法一覧です 他の言語をある程度知っている人はこれを読めばVBAの基礎をマスターしてVBAを書くことができるようになっています 簡易リファレンスとしても利用できると思いますので これは足りないと思うものがあれば教えてください 1. 基礎 Visual Basic Editor の起動 VBAはVisual Basic Editorで編集

More information

プログラミング入門1

プログラミング入門1 Java 2 第 9 回表形式データ (2) 1 [ 復習 ] 配列と複合データを用いた表形式データの作成表へのレコードの登録 ( 考え方 ) (1) 配列を作成 ProductData [] list [0] [1] [2] (3) 配列に登録 (2) インスタンスを作成 name:apple price:100 (2)(3) を繰り返す ProductData [] list [0] name:apple

More information

Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではな

Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではな Visual Studio Do-It-Yourself シリーズ 第 9 回ユーザーコントロール -1- Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではなく

More information

SharpShooter Reports.WPF 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されます

SharpShooter Reports.WPF 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されます SharpShooter Reports.WPF 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されます 目次 はじめに... 3 システムの必要条件... 3 ライセンス認証... 3 アクティベーション... 5 開発...

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WindowsForm サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WindowsForm VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET DLLのサンプルプログラムの参照サンフ

More information