Visual Basic 入門講座
VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

第5回 メソッドとプロパティ

この記事が対象とする製品・バージョン (バージョンの確認方法)

VB2019 Visual Basic 2019 対象です。
VB2017 Visual Basic 2017 対象です。
VB2015 Visual Basic 2015 対象です。
VB2013 Visual Basic 2013 対象です。
VB2012 Visual Basic 2012 対象です。
VB2010 Visual Basic 2010 対象です。
VB2008 Visual Basic 2008 対象です。
VB2005 Visual Basic 2005 対象です。
VB.NET 2003 Visual Basic.NET 2003 対象外ですがほとんどの操作は同じなので参考になります。
VB.NET 2002 Visual Basic.NET (2002) 対象外ですがほとんどの操作は同じなので参考になります。
VB6対応 Visual Basic 6.0 × 対象外です。

プログラムでメソッドとプロパティを使用する方法とその意味を説明します。

概要

・VBでは物(オブジェクト)の状態(プロパティ)を変更したり、物(オブジェクト)に対して命令(メソッド)を呼び出すことでプログラムしていく。

・メソッドの使い方

・プロパティの使い方

 

1.知識の準備

 

今回の解説を始める前に「オブジェクト」、「メソッド」、「プロパティ」という3つの重要な言葉について簡単に説明します。

VBでは「物」の状態を変更したり、「物」に対して命令したりすることでプログラムを進めていきます。この「物」のことをオブジェクト、「状態」をプロパティ、「命令」をメソッドと呼びます。

たとえば、TextBoxコントロール(読み方:TextBox = テキストボックス)をツールバーから貼り付けて、その背景を青くする場合は次のようにしますね。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019


TextBox1.BackColor = Color.Blue

■リスト1:プロパティの使用例。テキストボックスの背景を青くする。

 

これはTextBox1という「物」(オブジェクト)に対して、BackColorという状態(プロパティ)を、青(Color.Blue)に変更するという指示です。

 

一方、今回紹介する「メソッド」というものは、「物」(オブジェクト)に対して、○○しなさいと命令します。

 

たとえば、TextBoxAppendTextメソッド(読み方:AppendText = アッペンドテキスト)は、テキストボックスに文字を追加しなさいと命令します。

プログラム例は次の通りです。テキストボックスを実際に配置してこのプログラムを試してみてください。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019


TextBox1.AppendText("Hello!")

■リスト2:メソッドの使用例:テキストボックスにHello!という文字列を追加する。

 

メモ このプログラムをどこに書けば試せるの?

このプログラムをどこに書けば試せるの?と言う方は、前回の 入門講座 第4回 イベントを逃すな をご覧ください。ボタンを配置してクリックイベントに書いても良いですし、FormShownイベントに書いても良いですしお好みのようにしてください。

 

これはTextBox1という「物」(オブジェクト)に対して、文字(Hello!)を追加しなさいと命令していることになるわけです。

 

プログラムの多くの部分でオブジェクト(物)のプロパティ(状態)を変更したり、オブジェクト(物)のメソッド(命令)を呼び出したりすることになります。

発展 発展学習  -  コントロール・コンポーネント・オブジェクト

発展学習では意欲的な方のために現段階では特に理解する必要はない項目を解説します。

コントロール・コンポーネント・オブジェクト紛らわしい言葉です。

「オブジェクト」という言葉は使い方によって微妙にさしているものが変わっているように私は感じます。現段階ではひとまず次のように理解しておいてください。

コントロール:ボタンやテキストボックスなど目に見えるUIの部品。

コンポーネント:タイマーなど目には見えない以外はコントロールと同じように扱える部品。

オブジェクト:コントロールとコンポーネントの両方。

学習が進むとオブジェクトの範囲は広がります。コントロールでもコンポーネントでもないオブジェクトも出てきます。実のところVBではオブジェクトでないものを探すほうが困難です。

違う種類のオブジェクトであれば使えるプロパティやメソッドは異なります。 それで、プロパティの使い方、メソッドの使い方、またどんなプロパティがあってどんなメソッドがあるのかということを1つずつ習得していくことがVBの初級者の務めです。

なお、プロパティとメソッドなどのことをまとめて「メンバー」と呼びます。上の例ではBackColorAppendTextTextBoxのメンバーです。

今回はメソッドとプロパティの使い方を解説します。

 

2.メソッド

 

2−1.メソッドの概要

さきほど説明したようにメソッドとは「命令」のようなものです。オブジェクトにはさまざまなメソッドが用意されており、いろいろな機能をもっています。ファイルを読み書きするメソッドや、インターネットで通信するメソッド、メールを送信するメソッド、画像やグラフィックを描画するメソッド、その数はマイクロソフトが標準で用意しているものだけでもおそらく数万はあると思います。

 

どのようなメソッドでも、基本的な呼び出し方は同じです。オブジェクト名の後ろに . (ドット) をつけてメソッド名を書くことで呼び出します。

最も簡単なメソッドの呼び出しは次のような構文になります。

オブジェクト名.メソッド名()

メソッド名の後ろには必ず () カッコがつきますが、カッコの中身が空の場合このカッコは省略しても構いません。カッコの中身については少し後で説明します。

 

2−2.テスト用プログラム作成

実際にいくつかのメソッドを使ってみて、慣れてみましょう。

新規プロジェクトを作成して、フォームにボタンとテキストボックスを1つずつ貼り付けてください。

主なコントロール

 

テキストボックスは文字を入力するのに使用するコントロールです。

初期状態は1行分の入力しかできず、フォーム上に大きく配置しても高さは1行分になります。横幅は自由です。MultiLineプロパティ(読み方:MultiLine = マルティライン)を True にすると複数行の入力も可能になります。Trueは「オン」や「有効」・「はい」などを表す重要な値でしたね。今回は1行でよいのでMultiLineプロパティは初期値のFalseのままにしておいてください。

字は大きいほうが見やすいのでFontプロパティでフォントのサイズを18にしてください。

初期状態で何か表示しておきたいので、Textプロパティには 雨ニモマケズ と設定しましょう。

テキストボックスとボタンが配置されたフォーム。テキストボックスには「雨ニモマケズ」

 

準備ができたら、ボタンのクリックイベントでいろいろなメソッドを使ってみましょう。

テキストボックスには次のようなメソッドがあります。

  メソッド 読み方 機能
メソッド AppendText アッペンドテキスト 文字を追加する。
メソッド Clear クリア 文字をすべて削除する。
メソッド Copy コピー 選択している文字をコピーする。
メソッド Cut カット 選択している文字を切り取る。
メソッド Focus フォーカス カーソルをセットして、入力を受け取れる状態にする。
メソッド Paste ペイスト 貼り付ける。
メソッド Select セレクト 文字の一部分を選択する。
メソッド SelectAll セレクトオール 文字をすべて選択する。
メソッド Undo アンドゥー 直前の編集を取り消す。

■表1:テキストボックスの代表的なメソッド

これで全部ではありません。ここには簡単に使えて分かりやすいものだけ掲載しました。

 

2−3.最も単純なメソッドの使い方

まずは、Clearメソッドを使ってみましょう。実に簡単で、次のように記述するだけです。

Clearメソッドはカッコの中が空なので、入力するときにはカッコを自分で入力する必要はありません。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    TextBox1.Clear()

End Sub

プログラムを実行したら、ボタンをクリックしてみてください。「雨ニモマケズ」という表示が消えます。

 

2−4.メソッドを2つ連続して使う

次に、FocusメソッドとSelectAllメソッドを使ってみます。次のようにしてみてください。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

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メソッドだけだと選択状態にはなるのですが、カーソルがテキストボックスにないため、表示上選択されているのかどうか良くわからない状態になります。

  

2−5.追加情報が1つ必要なメソッド

次は少しタイプが違うAppendTextメソッドを使ってみましょう。AppendTextメソッドはテキストボックスに文字を「追加」するメソッドですが、上で説明したClearメソッドやFocusメソッドなどと違って、「何を」追加するか指定する必要があります。このようにメソッドの中には追加情報を指定しなければならないメソッドもあります。

追加情報が必要な場合、メソッド名の後ろのかっこの中に追加情報を指定します。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    TextBox1.AppendText("風ニモマケズ")

End Sub

かっこの中の情報のことを「引数」(ひきすう)または「パラメーター」と呼びます。

引数の前後についている " (ダブルクォーテーション)は、プログラムの中で一連の文字を表現するための記号です。今回のテーマであるメソッドの呼び出しとは関係ありません。この例では引数が一連の文字なので " が必要ですが、引数が数値の場合は不要です。詳しくは次回説明します。

この例ではボタンをクリックしていくと、どんどん「風ニモマケズ」が追加されていきます。

 

2−6.追加情報が2つ必要なメソッド

追加情報(引数)が2つ以上必要な場合もあります。たとえばSelectメソッドは文字列の一部を選択する命令ですが、「どこから」「どこまで」選択するのか指示しなければなりません。情報が2つ以上ある場合はカッコの中に , (カンマ)で区切って指定します。次のようになります。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

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文字目という意味になります。

 

2−7.関数

メソッドの中には、値を返すタイプのメソッドがあります。このタイプのメソッドは 関数 (かんすう)と呼ばれることもあります。

テキストボックスには説明しやすい関数がないのでMathオブジェクト(読み方:Math = マス)で説明します。

Mathオブジェクトはほとんどの場合何も準備しないでいきなりプログラムで使用できる便利なオブジェクトです。このオブジェクトは算数・数学用の便利な機能を表しています。

今回はPowメソッド(読み方:Pow = パウ または パワー)を呼び出してみます。このメソッドは2つの引数をとり、累乗(べき乗)を計算します。ひょっとするとまだ数学で累乗を習っていない人や累乗のことをすっかり忘れてしまっている人もいるかも知れませんので簡単に説明します。

累乗とは同じ数字を何個かけ算するかを表しています。たとえば、2を3個かけ算すると答えは8です。これを「2の3乗は8」と表現し、2の右上に小さい8を書いて表現します。

2×2×2=8

xのy乗

プログラムでは右上に小さい数字で書くということはできませんので、文字の大きさとしては両方同じで、1つ目の引数・2つ目の引数で表現します。

次の例は2の3乗を計算しています。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    MsgBox(Math.Pow(2, 3))

End Sub

これを計算すると 8 という答えが返ってくるので、画面には 8 と表示されます。

MsgBoxで直接答えを表示すると、「答えが返ってくる」というイメージが湧きにくいかもしれないので、答えを変数で受け取ってみます。

まだ変数については何も説明していませんが、次のプログラムは感覚的に理解できるのではないでしょうか?

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

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で表示します。

このように関数から返ってくる値のことを 返り値 (かえりち) または 戻り値 (もどりち) と呼びます。

関数・返り値・戻り値という言葉はとても重要ですので覚えておいてください。

 

ここまでで紹介した例は、すぐに扱える簡単なものを抜粋しています。複雑なメソッドは引数に何を指定すればよいのか難しく苦しむこと多いです。

それでも オブジェクト名.メソッド名 で呼び出してカッコの中に必要な追加情報(引数)を指定するという使い方は共通なのです。  

3.プロパティ

 

3−1.メソッドとプロパティの違い

メソッドは動きを表すのに対し、とプロパティは状態を表します。使い方も異なります。あります。

人間にたとえると「歩く」、「話す」、「寝る」などはメソッドで、「やる気」、「空腹状態」、「100m走の速さ」などはプロパティです。

テキストボックスを例に取ると「表示を消す」(Clear)、「選択する」(Select)、「フォーカスを移す」(Focus)などはメソッドで、「内容」(Text)、「位置」(Location等)、「背景色」(BackColor)などはプロパティです。

 

発展 発展学習  -  メソッドとプロパティの区別は恣意的です。

発展学習では意欲的な方のために現段階では特に理解する必要はない項目を解説します。

しかし、たとえば、Timerコントロールの場合、EnabledプロパティをTrueにするとTimerが有効になりTimerが動作を開始したのを覚えているでしょうか?

Timerを設計したマイクロソフトのプログラマーはこれをTimerの状態と考えEnabledというプロパティで表現しました。しかし、もし別のプログラマーであれば、これはTimerを開始するという動作であるととらえ、Startというような名前のメソッドにしたかもしれません。このようにそれを作った人がどのように考えたかによって同じ機能でもプロパティになるか、メソッドになるかは恣意的に決定します。

 

3−2.プロパティの使い方

プロパティの使い方については第3回「プロパティをいじろう」など以前にも説明しています。

少し繰り返しになりますが、プログラムで プロパティを設定するには次の構文を使います。

オブジェクト名.プロパティ名 = 値

これを使ってTextBox1に内容を設定するには次のように書きます。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019


TextBox1.Text = "こんにちは"

 

TextBox1.Text のような オブジェクト名.プロパティ名 という記述はプロパティに値を設定するだけではなく、プロパティに設定された値を読み取る場合にも使用します。

たとえば、次のプログラムを考えて見ます。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

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に設定する という意味になります。

 

3−2.定数をセットするプロパティ

BackColorプロパティを使って背景色を設定する例を覚えているでしょうか?次のような例でした。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

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ではまだ数字を直接色として指定することができました。少し紹介します。次のプログラムを実行するとテキストボックスの背景色は緑色になります。

VB6


Text1.BackColor = 65280

次のプログラムでは赤になります。

VB6


Text1.BackColor = 255

この方法で色を指定するのはとても厄介です。

そこで、65280は緑、255は赤 のように意味のある値にはプログラム上名前を付けて、プログラマーは生の値の代わりにその名前を指定するという方法が主流となりました。このように名前をつけられた値が定数や列挙型です。

なお、VB6は過渡期の言語であったため色を数字で指定することもできましたし、定数や列挙型(VB6では列挙体)で指定することもできました。当時でもほとんどのプログラマーは定数や列挙型を使って色を指定していたように思います。

 

他の例も見てみましょう。TextAlignプロパティ (読み方:TextAlign = テキストアライン) は右寄せ、左寄せなど文字の表示の仕方をあらわします。この場合も0は左寄せ、1は右寄せ・・・などと番号を割り当てると覚えるのが大変なので、TextAlignプロパティの値は列挙型で指定するようになっています。

プログラムを入力するときに TextBox1.TextAlign = まで入力すると入力すべき値の候補として列挙体が表示されます。

TextAlignプロパティに値を指定するときに列挙体の選択肢が表示されている

(この入力支援機能のことをインテリセンスと呼びます。)

 

ここに指定できる列挙体の値は次の3つです。

列挙型 読み方 意味
HorizontalAlignment.Center ホリゾンタルアライメント センター 中央寄せ
HorizontalAlignment.Left ホリゾンタルアライメント レフト 左寄せ
HorizontalAlignment.Right ホリゾンタルアライメント ライト 右寄せ

上述の画面を良く見ると、選択肢の右側にHorizontalAlignment.Center = 2と表示されています。これは列挙型の値 HorizontalAlignment.Centerの生の値が 2 であることを示しています。しかし、2という数字を直接していすることはできませんので、この情報は通常は役に立ちません。

このまま選択肢から値をマウスでクリックするか、キーボードの↑↓で選択してTABまたはEnterを押すと入力できますし、キーボードからすべてを直接手入力しても良いです。

右寄せにするには次のようにします。

VB.NET 2002 VB.NET 2003 VB2005 VB2008 VB2010 VB2012 VB2013 VB2015 VB2017 VB2019

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. と入力するということを知らないと入力候補を表示できないというのが良くないと思います。

Visual Basic 2015でColorの入力候補が表示されている

もう少し踏み込むと Color は定数で、HorizontalAlignmentの方は列挙型なので、どうも定数の候補が表示されなくなってしまったように感じします。