Visual Basic 入門講座 |
Visual Basic 中学校 > 入門講座 >
この記事が対象とする製品・バージョン (バージョンの確認方法)
Visual Basic 2019 | ◎ | 対象です。 | |
Visual Basic 2017 | ◎ | 対象です。 | |
Visual Basic 2015 | ◎ | 対象です。 | |
Visual Basic 2013 | ◎ | 対象です。 | |
Visual Basic 2012 | ◎ | 対象です。 | |
Visual Basic 2010 | ◎ | 対象です。 | |
Visual Basic 2008 | ◎ | 対象です。 | |
Visual Basic 2005 | ◎ | 対象です。 | |
Visual Basic.NET 2003 | △ | 対象外ですがほとんどの操作は同じなので参考になります。 | |
Visual Basic.NET (2002) | △ | 対象外ですがほとんどの操作は同じなので参考になります。 | |
Visual Basic 6.0 | × | 対象外です。 |
プログラムでメソッドとプロパティを使用する方法とその意味を説明します。
概要 ・VBでは物(オブジェクト)の状態(プロパティ)を変更したり、物(オブジェクト)に対して命令(メソッド)を呼び出すことでプログラムしていく。 ・メソッドの使い方 ・プロパティの使い方 |
今回の解説を始める前に「オブジェクト」、「メソッド」、「プロパティ」という3つの重要な言葉について簡単に説明します。
VBでは「物」の状態を変更したり、「物」に対して命令したりすることでプログラムを進めていきます。この「物」のことをオブジェクト、「状態」をプロパティ、「命令」をメソッドと呼びます。
たとえば、TextBoxコントロール(読み方:TextBox = テキストボックス)をツールバーから貼り付けて、その背景を青くする場合は次のようにしますね。
TextBox1.BackColor = Color.Blue |
■リスト1:プロパティの使用例。テキストボックスの背景を青くする。
これはTextBox1という「物」(オブジェクト)に対して、BackColorという状態(プロパティ)を、青(Color.Blue)に変更するという指示です。
一方、今回紹介する「メソッド」というものは、「物」(オブジェクト)に対して、○○しなさいと命令します。
たとえば、TextBoxのAppendTextメソッド(読み方:AppendText = アッペンドテキスト)は、テキストボックスに文字を追加しなさいと命令します。
プログラム例は次の通りです。テキストボックスを実際に配置してこのプログラムを試してみてください。
TextBox1.AppendText("Hello!") |
■リスト2:メソッドの使用例:テキストボックスにHello!という文字列を追加する。
このプログラムをどこに書けば試せるの?と言う方は、前回の 入門講座 第4回 イベントを逃すな をご覧ください。ボタンを配置してクリックイベントに書いても良いですし、FormのShownイベントに書いても良いですしお好みのようにしてください。 |
これはTextBox1という「物」(オブジェクト)に対して、文字(Hello!)を追加しなさいと命令していることになるわけです。
プログラムの多くの部分でオブジェクト(物)のプロパティ(状態)を変更したり、オブジェクト(物)のメソッド(命令)を呼び出したりすることになります。
発展学習では意欲的な方のために現段階では特に理解する必要はない項目を解説します。 コントロール・コンポーネント・オブジェクト紛らわしい言葉です。 「オブジェクト」という言葉は使い方によって微妙にさしているものが変わっているように私は感じます。現段階ではひとまず次のように理解しておいてください。 コントロール:ボタンやテキストボックスなど目に見えるUIの部品。 コンポーネント:タイマーなど目には見えない以外はコントロールと同じように扱える部品。 オブジェクト:コントロールとコンポーネントの両方。 学習が進むとオブジェクトの範囲は広がります。コントロールでもコンポーネントでもないオブジェクトも出てきます。実のところVBではオブジェクトでないものを探すほうが困難です。 |
違う種類のオブジェクトであれば使えるプロパティやメソッドは異なります。 それで、プロパティの使い方、メソッドの使い方、またどんなプロパティがあってどんなメソッドがあるのかということを1つずつ習得していくことがVBの初級者の務めです。
なお、プロパティとメソッドなどのことをまとめて「メンバー」と呼びます。上の例ではBackColorもAppendTextもTextBoxのメンバーです。
今回はメソッドとプロパティの使い方を解説します。
さきほど説明したようにメソッドとは「命令」のようなものです。オブジェクトにはさまざまなメソッドが用意されており、いろいろな機能をもっています。ファイルを読み書きするメソッドや、インターネットで通信するメソッド、メールを送信するメソッド、画像やグラフィックを描画するメソッド、その数はマイクロソフトが標準で用意しているものだけでもおそらく数万はあると思います。
どのようなメソッドでも、基本的な呼び出し方は同じです。オブジェクト名の後ろに . (ドット) をつけてメソッド名を書くことで呼び出します。
最も簡単なメソッドの呼び出しは次のような構文になります。
オブジェクト名.メソッド名() |
メソッド名の後ろには必ず () カッコがつきますが、カッコの中身が空の場合このカッコは省略しても構いません。カッコの中身については少し後で説明します。
実際にいくつかのメソッドを使ってみて、慣れてみましょう。
新規プロジェクトを作成して、フォームにボタンとテキストボックスを1つずつ貼り付けてください。
テキストボックスは文字を入力するのに使用するコントロールです。
初期状態は1行分の入力しかできず、フォーム上に大きく配置しても高さは1行分になります。横幅は自由です。MultiLineプロパティ(読み方:MultiLine = マルティライン)を True にすると複数行の入力も可能になります。Trueは「オン」や「有効」・「はい」などを表す重要な値でしたね。今回は1行でよいのでMultiLineプロパティは初期値のFalseのままにしておいてください。
字は大きいほうが見やすいのでFontプロパティでフォントのサイズを18にしてください。
初期状態で何か表示しておきたいので、Textプロパティには 雨ニモマケズ と設定しましょう。
準備ができたら、ボタンのクリックイベントでいろいろなメソッドを使ってみましょう。
テキストボックスには次のようなメソッドがあります。
メソッド | 読み方 | 機能 | |
---|---|---|---|
AppendText | アッペンドテキスト | 文字を追加する。 | |
Clear | クリア | 文字をすべて削除する。 | |
Copy | コピー | 選択している文字をコピーする。 | |
Cut | カット | 選択している文字を切り取る。 | |
Focus | フォーカス | カーソルをセットして、入力を受け取れる状態にする。 | |
Paste | ペイスト | 貼り付ける。 | |
Select | セレクト | 文字の一部分を選択する。 | |
SelectAll | セレクトオール | 文字をすべて選択する。 | |
Undo | アンドゥー | 直前の編集を取り消す。 |
■表1:テキストボックスの代表的なメソッド
これで全部ではありません。ここには簡単に使えて分かりやすいものだけ掲載しました。
まずは、Clearメソッドを使ってみましょう。実に簡単で、次のように記述するだけです。
Clearメソッドはカッコの中が空なので、入力するときにはカッコを自分で入力する必要はありません。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click TextBox1.Clear() End Sub |
プログラムを実行したら、ボタンをクリックしてみてください。「雨ニモマケズ」という表示が消えます。
次に、FocusメソッドとSelectAllメソッドを使ってみます。次のようにしてみてください。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click TextBox1.Focus() TextBox1.SelectAll() End Sub |
これも実行したら、テキストボックスに何か適当に入力してからボタンをクリックしてみてください。TextBox1にカーソルがセットされてTextBox1の内容がすべて選択された状態になります。
FocusメソッドはカーソルをTextBox1にセットし、SelectAllはすべてを選択します。SelectAllメソッドだけだと選択状態にはなるのですが、カーソルがテキストボックスにないため、表示上選択されているのかどうか良くわからない状態になります。
次は少しタイプが違うAppendTextメソッドを使ってみましょう。AppendTextメソッドはテキストボックスに文字を「追加」するメソッドですが、上で説明したClearメソッドやFocusメソッドなどと違って、「何を」追加するか指定する必要があります。このようにメソッドの中には追加情報を指定しなければならないメソッドもあります。
追加情報が必要な場合、メソッド名の後ろのかっこの中に追加情報を指定します。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click TextBox1.AppendText("風ニモマケズ") End Sub |
かっこの中の情報のことを「引数」(ひきすう)または「パラメーター」と呼びます。
引数の前後についている " (ダブルクォーテーション)は、プログラムの中で一連の文字を表現するための記号です。今回のテーマであるメソッドの呼び出しとは関係ありません。この例では引数が一連の文字なので " が必要ですが、引数が数値の場合は不要です。詳しくは次回説明します。
この例ではボタンをクリックしていくと、どんどん「風ニモマケズ」が追加されていきます。
追加情報(引数)が2つ以上必要な場合もあります。たとえばSelectメソッドは文字列の一部を選択する命令ですが、「どこから」「どこまで」選択するのか指示しなければなりません。情報が2つ以上ある場合はカッコの中に , (カンマ)で区切って指定します。次のようになります。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click TextBox1.Focus() TextBox1.Select(3, 2) End Sub |
■リスト:テキストボックスの4文字目から2文字分を選択する。
この例では、テキストボックスにカーソルを移動し、テキストボックスの4文字目から2文字分が選択された状態になります。
■画像:Select(3,2)を実行するとこの画面のように4文字目から2文字分を選択した状態になる。
「どこから」の部分に「3」を指定しているのに「4文字目から」というのはおかしい気がするかもしれませんが、プログラムの世界では順番を数えるとき 0 から始めることになっており、先頭の文字は0番目の文字です。だから、3を指定すると4文字目という意味になります。
メソッドの中には、値を返すタイプのメソッドがあります。このタイプのメソッドは 関数 (かんすう)と呼ばれることもあります。
テキストボックスには説明しやすい関数がないのでMathオブジェクト(読み方:Math = マス)で説明します。
Mathオブジェクトはほとんどの場合何も準備しないでいきなりプログラムで使用できる便利なオブジェクトです。このオブジェクトは算数・数学用の便利な機能を表しています。
今回はPowメソッド(読み方:Pow = パウ または パワー)を呼び出してみます。このメソッドは2つの引数をとり、累乗(べき乗)を計算します。ひょっとするとまだ数学で累乗を習っていない人や累乗のことをすっかり忘れてしまっている人もいるかも知れませんので簡単に説明します。
累乗とは同じ数字を何個かけ算するかを表しています。たとえば、2を3個かけ算すると答えは8です。これを「2の3乗は8」と表現し、2の右上に小さい8を書いて表現します。
プログラムでは右上に小さい数字で書くということはできませんので、文字の大きさとしては両方同じで、1つ目の引数・2つ目の引数で表現します。
次の例は2の3乗を計算しています。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click MsgBox(Math.Pow(2, 3)) End Sub |
これを計算すると 8 という答えが返ってくるので、画面には 8 と表示されます。
MsgBoxで直接答えを表示すると、「答えが返ってくる」というイメージが湧きにくいかもしれないので、答えを変数で受け取ってみます。
まだ変数については何も説明していませんが、次のプログラムは感覚的に理解できるのではないでしょうか?
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click Dim answer = Math.Pow(2, 3) MsgBox(answer) End Sub |
この例ではMath.Powから返ってきた値を変数 answer に格納します。次に、変数answerをMsgBoxで表示します。
このように関数から返ってくる値のことを 返り値 (かえりち) または 戻り値 (もどりち) と呼びます。
関数・返り値・戻り値という言葉はとても重要ですので覚えておいてください。
ここまでで紹介した例は、すぐに扱える簡単なものを抜粋しています。複雑なメソッドは引数に何を指定すればよいのか難しく苦しむこと多いです。
それでも オブジェクト名.メソッド名 で呼び出してカッコの中に必要な追加情報(引数)を指定するという使い方は共通なのです。
メソッドは動きを表すのに対し、とプロパティは状態を表します。使い方も異なります。あります。
人間にたとえると「歩く」、「話す」、「寝る」などはメソッドで、「やる気」、「空腹状態」、「100m走の速さ」などはプロパティです。
テキストボックスを例に取ると「表示を消す」(Clear)、「選択する」(Select)、「フォーカスを移す」(Focus)などはメソッドで、「内容」(Text)、「位置」(Location等)、「背景色」(BackColor)などはプロパティです。
発展学習では意欲的な方のために現段階では特に理解する必要はない項目を解説します。 しかし、たとえば、Timerコントロールの場合、EnabledプロパティをTrueにするとTimerが有効になりTimerが動作を開始したのを覚えているでしょうか? Timerを設計したマイクロソフトのプログラマーはこれをTimerの状態と考えEnabledというプロパティで表現しました。しかし、もし別のプログラマーであれば、これはTimerを開始するという動作であるととらえ、Startというような名前のメソッドにしたかもしれません。このようにそれを作った人がどのように考えたかによって同じ機能でもプロパティになるか、メソッドになるかは恣意的に決定します。 |
プロパティの使い方については第3回「プロパティをいじろう」など以前にも説明しています。
少し繰り返しになりますが、プログラムで プロパティを設定するには次の構文を使います。
オブジェクト名.プロパティ名 = 値 |
これを使ってTextBox1に内容を設定するには次のように書きます。
TextBox1.Text = "こんにちは" |
TextBox1.Text のような オブジェクト名.プロパティ名 という記述はプロパティに値を設定するだけではなく、プロパティに設定された値を読み取る場合にも使用します。
たとえば、次のプログラムを考えて見ます。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click TextBox1.Text = "Hello, Visual Basic." TextBox2.Text = TextBox1.Text End Sub |
これを実行すると、TextBox1とTextBox2の両方に"Hello, Visual Basic."と表示されます。
TextBox1には明示的には"Hello, Visual Basic."と設定していますが、TextBox2.Textに値を設定するときに右辺(右辺というのは = の右側の部分のことです)には表示する文字ではなく、TextBox1.Text を指定しています。
これで TextBox1.Textの値をTextBox2.Textに設定する という意味になります。
BackColorプロパティを使って背景色を設定する例を覚えているでしょうか?次のような例でした。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click TextBox1.BackColor = Color.Red End Sub |
この例では値として Color.Red を指定しています。数値や文字ならば初心者にも意味がわかりやすいと思うのですが、Visual Basicではこの Color.Red のような記述方法で値を指定する場合があります。このような値は定数または列挙型(読み方:列挙型 = れっきょがた)と呼ばれます。
|
大昔(1980年代頃)のプログラミング言語 BASIC では1は青、2は赤…という具合に色には数字が割り当てられていて、数字を使って色を指定していました。
しかし、やがてパソコンが進化し、1677万もの色が表現できるようになりました。これでは何番が何色か覚え切れません。
1998年発売のVisual Basic 6.0ではまだ数字を直接色として指定することができました。少し紹介します。次のプログラムを実行するとテキストボックスの背景色は緑色になります。
Text1.BackColor = 65280 |
次のプログラムでは赤になります。
Text1.BackColor = 255 |
この方法で色を指定するのはとても厄介です。
そこで、65280は緑、255は赤 のように意味のある値にはプログラム上名前を付けて、プログラマーは生の値の代わりにその名前を指定するという方法が主流となりました。このように名前をつけられた値が定数や列挙型です。
なお、VB6は過渡期の言語であったため色を数字で指定することもできましたし、定数や列挙型(VB6では列挙体)で指定することもできました。当時でもほとんどのプログラマーは定数や列挙型を使って色を指定していたように思います。
他の例も見てみましょう。TextAlignプロパティ (読み方:TextAlign = テキストアライン) は右寄せ、左寄せなど文字の表示の仕方をあらわします。この場合も0は左寄せ、1は右寄せ・・・などと番号を割り当てると覚えるのが大変なので、TextAlignプロパティの値は列挙型で指定するようになっています。
プログラムを入力するときに TextBox1.TextAlign = まで入力すると入力すべき値の候補として列挙体が表示されます。
(この入力支援機能のことをインテリセンスと呼びます。)
ここに指定できる列挙体の値は次の3つです。
列挙型 | 読み方 | 意味 |
---|---|---|
HorizontalAlignment.Center | ホリゾンタルアライメント センター | 中央寄せ |
HorizontalAlignment.Left | ホリゾンタルアライメント レフト | 左寄せ |
HorizontalAlignment.Right | ホリゾンタルアライメント ライト | 右寄せ |
上述の画面を良く見ると、選択肢の右側にHorizontalAlignment.Center = 2と表示されています。これは列挙型の値 HorizontalAlignment.Centerの生の値が 2 であることを示しています。しかし、2という数字を直接していすることはできませんので、この情報は通常は役に立ちません。
このまま選択肢から値をマウスでクリックするか、キーボードの↑↓で選択してTABまたはEnterを押すと入力できますし、キーボードからすべてを直接手入力しても良いです。
右寄せにするには次のようにします。
Private
Sub Button1_Click(sender As Object,
e As EventArgs)
Handles Button1.Click TextBox1.TextAlign = HorizontalAlignment.Right End Sub |
プログラムではこのように自由な数値や文字を入力する代わりに選択肢から入力することが多々あり、定数と列挙体にはいろいろな種類があります。
Visual Basic 2015まではBackColorプロパティなど色を指定する場所でも、下記のように BackColor = まで入力するとインテリセンスは入力候補を表示してくれていました。しかし、Visual Basic 2017からは自分で Color. を入力しない限り入力候補が表示されなくなりました。理由はわかりませんが少し不便に感じます。 Color. の6文字を入力するくらいはたいした手間ではないのですが、そもそも Color. と入力するということを知らないと入力候補を表示できないというのが良くないと思います。
もう少し踏み込むと Color は定数で、HorizontalAlignmentの方は列挙型なので、どうも定数の候補が表示されなくなってしまったように感じします。 |