2013年5月13日月曜日

文字列の文字数を取得するには

文字列の文字数を取得するには、StringクラスのLengthプロパティ(Integer型)を使用。
Lengthプロパティは半角と全角を区別せずに1文字と数える。
        Dim s As String = "ABCDE"
        MessageBox.show(s.Length.ToString() & "文字です")

部分文字列を取り出すには
Dim  変数  As Char = 文字列.Chars(インデックス)
Dim  変数  As String = 文字列.Substring(開始位置,文字数)

       Dim s As String = "ABCDEF"
       TextBox1.Text = s.Chars(1).ToString()
       TextBox1.Text = s.Substring(1,4)
       TextBox1.Text = s.Substring(3)

部分文字列を削除/挿入するには
Dim  変数  As String = 文字列.Remove(削除位置,削除文字数)
Dim  変数  As String = 文字列.Remove(削除位置)
Dim  変数  As String = 文字列.Remove(挿入位置,挿入文字数)


   Dim s As String = "ABCDEF"
       TextBox1.Text = s.Remove(0,3)
       TextBox1.Text = s.Remove(2)
       TextBox1.Text = s.Insert(1,"ZX")

文字列を検索するには
Dim  変数  As Integer = 文字列.IndexOf(検索文字列)
Dim  変数  As Integer = 文字列.IndexOf(検索文字列,検索開始位置)

        Dim s As String = TextBox1.Text
        Dim i As Integer = s.IndexOf("検索")
        ListBox1.Item.Clear()
        Do While i < >  - 1
            ListBox1.Item.Add( ( i + 1 ).ToString() & " 文字目 ")
            i  = s.IndexOf("検索", i + 1)
        Loop


←←←VBからACCESSのマクロを動かす

Imports System.Data.OleDb
Imports System.Runtime.InteropServices
Imports Microsoft.Office.Interop.Access

Private Sub Button1_Click...
   Dim myPath As String = My.Application.Info.DirectoryPath & "¥***.accdb"
   Dim AccObj As Object = CreateObject("Access.Application")

  With AccObj
     .OpenCurrentDatabase(myPath)
     .DoCmd.RunMacro("マクロ")
     .Quit()
 End With
 AccObj = Nothing
End Sub

2011年9月16日金曜日

→→→抽象クラスより難しい「インタフェース」

インタフェースは、抽象クラスと同じように、機能の大枠を定めるもの

Module Module
  Sub Main()
    Dim c As New Class1()
    c.Output()
  End Sub
End Module


Interface Interface1
   Sub Output()
End Interface


Class Class1
  Implements Interface1


  Public Sub Output()
    Implements Interface1.Output


    Dim s As String = "こんにちは"
    Console.WriteLine(S)
  End Sub
End Class

Interface1インタフェースを実装したClass1
Implementsキーワードを使い、Interface1の実装であることを示す

インタフェースは、抽象クラスよりも厳しい制約を課すものと言える。
抽象クラスClass1の中に記述していた文字列変数sの宣言はInterface1に書くことはできない。
インタフェースはメンバー変数を持てない。
Class1のメンバー変数として文字列sを記述することもできない。
インタフェースを実装するクラスは、メンバー変数を勝手に追加することができない

→→→そのまま使えない「抽象クラス」

そのまま使えない、必ず子クラスを作って追加実装をしなければいけない「抽象クラス(abstract class)」というものがある。
Module Module1
  Sub Main()
    Dim c As New Class2()
    c.Output()
  End Sub
End Module


MustInherit Class Class1
    Protected S As String = "こんにちは"
    Public MustOverride Sub  Output()
End Class


Class Class2
    Inherits Class1
    Public Overrides Sub Output()
         Console.WriteLine(S)
    End Sub
End Class


Class1クラスは抽象クラス。MustInherit(継承しなければいけない)と記述しているし、OutputメソッドはMustOverride(オーバーライドしなければいけない)と書かれた抽象メソッドで、中身の記述がない。
Class2クラスではOutputメソッドをオーバーライドして処理を記述している。Class1ではOutputメソッドの外側を記述し、Class2で内側を記述しているようなもの。
Class2の段階まで持っていけばインスタンス化して利用できる。
Class1は直接はインスタンス化して利用できない。Class2をClass1に書き換えるとエラー。

抽象クラスは「何をするか」の大枠だけを決めておいて「どのようにするか」を子クラスにまかせる仕組み

→→→メソッドのオーバーライド

メソッドのオーバーライド(override)という機能。簡単に言えば子クラスで親クラスのメソッドを「上書き」する機能。

Module Module1
  Sub Main()
    Dim c As New Class2()
    c.Output()
  End Sub
End Module


Class Class1
   Protected S As String = "こんにちは"
   Public Overridable Sub Output()
     Console.WriteLine(S)
   End Sub
End Class


Class Class2
   Inherits Class1


   Public Overrides Sub Output()
     Console.Write(S)
     Console.WriteLine(S)
   End Sub
End Class

Class2のインスタンスcを作り、そのOutputメソッドを呼び出す。Class2クラスのOutputメソッドが呼び出される。ここでは「こんにちは こんにちは」と表示される
Class2の親であるClass1にもOutputメソッドがあるがOverridableと書いてオーバーライドを許可している。Class2クラスではOverridesと書いてオーバーライドすることを示している。
Class2の外部からClass1のOutputを呼び出すことはできない。
でも、Class2の内部からであれば、
MyBase.Output()
と記述することによって、親クラスのOutputメソッドを呼び出せる。

2011年9月15日木曜日

→→→継承

クラスには「継承(inheritance)」という機能がある。

Module Module1
 Sub Main()
   Dim c As New Class2()
   c.Output()
   c.Output2()
 End Sub
End Module

Class Class1
  Protected S As String = "こんにちは"
  Public Overridable Sub Output()
    Console.WriteLine(S)
  End Sub
End Class


Class Class2
  Inherits Class1


  Public Sub  Output2()
     Console.Write(S)
     Console.WriteLine(S)
  End Sub
End Class

Class2クラスのインスタンスcを作り、そのOutputメソッド、Output2メソッドを呼ぶ。
でも、Class2クラスを見ると、Outputメソッドはない。
また、Output2メソッドの中で参照しているSもない。
それらはClass1から継承されている。
継承を行う場合には、Inheritsキーワードを使って継承元を指定する