Visual Studio International Pack: Japanese Yomi Auto-Completion Libraryを使う †
Japanese Yomi Auto-Completion Libraryは、テキストボックス等で日本語IMEを使って文字入力するときにオートコンプリート機能を提供するライブラリです。日本語IMEで確定した文字列の読みを自動的に登録してくれるため、非常に簡単に使用できます。このライブラリを使用するには、日本語IMEがインストールされており、有効になっている必要があります。
ダウンロードとインストール †
Japanese Yomi Auto-Completion Libraryをインストールする手順は、第85号で紹介した方法とほぼ同じです。インストールに使用するMSIファイルは、"JPNTextAlign.msi "です。
またプロジェクトの参照に「YomiAutoCompletion.dll」を追加する必要があることも第85号と同じです。具体的な方法は、「「○○○.dllを参照に追加します」の意味は?」をご覧ください。なおこのDLLがある場所は、デフォルトでは、「C:\Program Files\Microsoft Visual Studio International Pack\Japanese Yomi Auto-Completion Library\Library」というフォルダです。
YomiAutoCompletionListenerクラス †
Japanese Yomi Auto-Completion Libraryの使い方は非常に簡単で、YomiAutoCompletionListenerクラスのコンストラクタのパラメータにオートコンプリート機能を付けたいテキストボックスを渡すだけです。
テキストボックス"TextBox1"にオートコンプリート機能を付ける例を以下に示します。
1
2
3
4
5
6
7
8
| | Private listener As Microsoft.International.Windows.YomiAutoCompletionListener
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Me.listener = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me.TextBox1)
End Sub
|
1
2
3
4
5
6
7
8
| | private Microsoft.International.Windows.YomiAutoCompletionListener listener;
private void Form1_Load(object sender, EventArgs e)
{
this.listener =
new Microsoft.International.Windows.YomiAutoCompletionListener(this.TextBox1);
}
|
例えば、このテキストボックスに日本語IMEを使って"青森"と入力したとします。テキストボックスに入力されている文字列をクリアした後、日本語IMEで"あ"と入力すると、その下に候補ウィンドウが表示され、その中に"青森"が表示されます。ここで十字キーの↓で"青森"を選択してEnterキーを押せば、"青森"と入力することが出来ます。
このようにJapanese Yomi Auto-Completion Libraryは、日本語IMEで確定した文字列とその読みがなを自動的に登録してくれます。
読みがなの登録はテキストボックスの内容が空であってもそうでなくても行われますが、候補ウィンドウが表示されるのはテキストボックスが空のとき(未確定の文字列だけのとき)だけです。
自動的に登録される読みがなはどのように決定されるか †
自動的に登録される読みがなは、ユーザーが実際にIMEで入力した文字列ではなく、確定した文字列の読みがなとして適当だとIMEが判断した文字列となるようです。具体的には、IFELanguage::GetJMorphResultメソッドを使用しているのではないかと思われます。
候補ウィンドウの実体 †
候補ウィンドウの実体はCandidatesWindowクラスというものであり、このクラスはListBoxクラスから派生しています。候補ウィンドウは別ウィンドウになっておらず、フォーム内に表示されるListBoxなので、TextBoxの下に候補ウィンドウを表示するだけの十分なスペースがないと候補ウィンドウが全て表示されません。
TextBoxクラスをオーバーライドして、オートコンプリート機能を持つテキストボックスを作る †
TextBoxクラスをオーバーライドして、オートコンプリート機能を持つテキストボックスを作っておくと便利です。ちなみにヘルプでは、このような方法しか紹介されていません。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| | Public Class YomiAutoCompleteTextBox
Inherits System.Windows.Forms.TextBox
Private listener As Microsoft.International.Windows.YomiAutoCompletionListener
Public ReadOnly Property YomiAutoCompletionListener() As _
Microsoft.International.Windows.YomiAutoCompletionListener
Get
Return Me.listener
End Get
End Property
Public Sub New()
Me.listener = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me)
End Sub
End Class
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| | public class YomiAutoCompleteTextBox : System.Windows.Forms.TextBox
{
private Microsoft.International.Windows.YomiAutoCompletionListener listener;
public Microsoft.International.Windows.YomiAutoCompletionListener
YomiAutoCompletionListener
{
get { return this.listener; }
}
public YomiAutoCompleteTextBox()
{
this.listener =
new Microsoft.International.Windows.YomiAutoCompletionListener(this);
}
}
|
このクラスを使用する方法は、「「○○○クラスの代わりに派生クラスを使用します」の意味は?」を参考にしてください。
登録された読みがなと候補を保存、復元する †
Japanese Yomi Auto-Completion Libraryで自動的に登録された読みがなと文字列は、アプリケーションが終了すれば忘れてしまいます。これをファイルに保存しておき、復元できるようにする方法を紹介します。
今まで登録されている読みがなのリストは、YomiAutoCompletionContextManagerクラスのSourceプロパティで取得できます(以下、Sourceプロパティで取得できるリストを「ソースリスト」と呼びます)。読みがなの登録は、YomiAutoCompletionContextManager.AddToSourceメソッドまたは、YomiStringCollection.Addメソッドでできます。
以下に、現在登録されているソースリストをファイルに保存、復元するメソッドと、これらを利用してアプリケーションを再起動しても同じソースリストが維持されるようにした例を示します。ちなみにソースリストはタブ区切りのリストで保存しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| | Private listener As Microsoft.International.Windows.YomiAutoCompletionListener
Private yomiListFile As String = _
System.IO.Path.Combine(Application.StartupPath, "yomi.tsv")
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Me.listener = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me.TextBox1)
If System.IO.File.Exists(Me.yomiListFile) Then
Me.LoadYomiSource(Me.yomiListFile, Me.listener)
End If
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As FormClosedEventArgs) _
Handles MyBase.FormClosed
Me.SaveYomiSource(Me.yomiListFile, Me.listener)
End Sub
Public Sub SaveYomiSource(ByVal filePath As String, _
ByVal listen As Microsoft.International.Windows.YomiAutoCompletionListener)
Using strm As New System.IO.StreamWriter(filePath)
For Each strYomi As Microsoft.International.Windows.StringYomi _
In listen.ContextManager.Source
strm.WriteLine( _
String.Format("{0}" & vbTab & "{1}", strYomi.Yomi, strYomi.Text))
Next
End Using
End Sub
Public Sub LoadYomiSource(ByVal filePath As String, _
ByVal listen As Microsoft.International.Windows.YomiAutoCompletionListener)
Using strm As New System.IO.StreamReader(filePath)
listen.ContextManager.Source.Clear()
Dim line As String = strm.ReadLine()
While (line IsNot Nothing)
Dim vals As String() = line.Split(New Char() {ControlChars.Tab}, 2)
If vals.Length = 2 Then
listen.ContextManager.Source.Add(vals(0), vals(1))
End If
line = strm.ReadLine()
End While
End Using
End Sub
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| | private Microsoft.International.Windows.YomiAutoCompletionListener listener;
string yomiListFile =
System.IO.Path.Combine(Application.StartupPath, "yomi.tsv");
private void Form1_Load(object sender, EventArgs e)
{
this.listener =
new Microsoft.International.Windows.YomiAutoCompletionListener(this.TextBox1);
if (System.IO.File.Exists(this.yomiListFile))
this.LoadYomiSource(this.yomiListFile, this.listener);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
this.SaveYomiSource(this.yomiListFile, this.listener);
}
public void SaveYomiSource(
string filePath,
Microsoft.International.Windows.YomiAutoCompletionListener listen)
{
using (System.IO.StreamWriter strm = new System.IO.StreamWriter(filePath))
{
foreach (Microsoft.International.Windows.StringYomi strYomi
in listen.ContextManager.Source)
{
strm.WriteLine(string.Format("{0}\t{1}", strYomi.Yomi, strYomi.Text));
}
}
}
public void LoadYomiSource(
string filePath,
Microsoft.International.Windows.YomiAutoCompletionListener listen)
{
using (System.IO.StreamReader strm = new System.IO.StreamReader(filePath))
{
listen.ContextManager.Source.Clear();
string line;
while ((line = strm.ReadLine()) != null)
{
string[] vals = line.Split(new char[] { '\t' }, 2);
if (vals.Length == 2)
{
listen.ContextManager.Source.Add(vals[0], vals[1]);
}
}
}
}
|
読みがなを独自に提供する †
デフォルトではIMEで確定された文字列に対する読みがなが自動的に登録されますが、独自の読みがなを提供することも出来ます。それには、IYomiProviderインターフェイスを実装したクラスを作成する必要があります。
その方法は、ヘルプの「自分の辞書を利用する方法」にあります。ここではそこで紹介されているクラスをそのまま使用して、どのように動作するか見てみましょう。
ヘルプで紹介されているIYomiProviderインターフェイスを実装したクラスは次のようなものです*1。"日本"という文字列の読みがなに"にほん"と"にっぽん"を、"日本人"という文字列の読みがなに"にほんじん"と"にっぽんじん"を登録するようにします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| | Public Class MyYomiProvider
Implements Microsoft.International.Windows.IYomiProvider
Public Function GetYomi(ByVal text As String) As _
System.Collections.ObjectModel.ReadOnlyCollection(Of String) _
Implements Microsoft.International.Windows.IYomiProvider.GetYomi
Dim yomiCandidates As New List(Of String)()
Select Case text
Case "日本"
yomiCandidates.Add("にほん")
yomiCandidates.Add("にっぽん")
Exit Select
Case "日本人"
yomiCandidates.Add("にほんじん")
yomiCandidates.Add("にっぽんじん")
Exit Select
Case Else
Exit Select
End Select
Return New System.Collections.ObjectModel.ReadOnlyCollection(Of String) _
(yomiCandidates)
End Function
End Class
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| | public class MyYomiProvider :
Microsoft.International.Windows.IYomiProvider
{
public System.Collections.ObjectModel.ReadOnlyCollection<string> GetYomi(
string text)
{
List<string> yomiCandidates = new List<string>();
switch (text)
{
case "日本":
yomiCandidates.Add("にほん");
yomiCandidates.Add("にっぽん");
break;
case "日本人":
yomiCandidates.Add("にほんじん");
yomiCandidates.Add("にっぽんじん");
break;
default:
break;
}
return new System.Collections.ObjectModel.ReadOnlyCollection<string>(
yomiCandidates);
}
}
|
このクラスを利用するには、次のようにYomiAutoCompletionContextManager.YomiProviderプロパティを変更します。
1
2
3
4
5
6
7
8
9
10
11
| | Private listener As Microsoft.International.Windows.YomiAutoCompletionListener
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Me.listener = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me.TextBox1)
Me.listener.ContextManager.YomiProvider = New MyYomiProvider()
End Sub
|
1
2
3
4
5
6
7
8
9
10
11
| | private Microsoft.International.Windows.YomiAutoCompletionListener listener;
private void Form1_Load(object sender, EventArgs e)
{
this.listener =
new Microsoft.International.Windows.YomiAutoCompletionListener(this.TextBox1);
this.listener.ContextManager.YomiProvider = new MyYomiProvider();
}
|
このようにして、TextBox1に日本語IMEで"に"と入力しても、候補ウィンドウは表示されません。TextBox1で一度IMEを使って"日本"あるいは"日本語"と確定した後に、TextBox1にIMEで"に"と入力すれば、候補ウィンドウが表示されます。例えば、TextBox1に"日本"と入力したならば、"にほん"と"にっぽん"の両方が候補として表示されるようになります。
なぜはじめから候補ウィンドウが表示されないのかというと、はじめの段階ではソースリストに読みがなが登録されておらず、"日本"あるいは"日本語"と確定した後でGetYomiメソッドが返す読みがながソースリストに追加されるからです。
よってこの例のように、提供される読みがなが少数であれば、わざわざIYomiProviderを実装したクラスを作るよりも、直接ソースリストに追加した方が簡単で便利です。IYomiProviderを実装した方法を使うのは、IFELanguage::GetJMorphResultとは違った方法で読みがなを取得したいときや、指定した読みがながソースリストに追加されないようにしたいときなどに限られそうです。
ある文字列について、GetYomiメソッドが返す読みがなをソースリストに登録する †
ユーザーがIMEで確定するのではなく、プログラムによって、ある文字列についてIYomiProvider.GetYomiメソッドが返す読みがなをソースリストに登録するには、YomiAutoCompletionContextManager.AddToSourceメソッドを読みがなを指定しないで(nullか空の文字列を指定して)呼び出します。(YomiStringCollection.Addメソッドではできません。)
例えば上記の例において、"日本"の読みがなの"にほん"と"にっぽん"がソースリストに登録されるようにするには、次のようにします。
1
2
3
4
5
6
7
8
| | Me.listener = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me.TextBox1)
Me.listener.ContextManager.YomiProvider = New MyYomiProvider()
Me.listener.ContextManager.AddToSource("日本", Nothing)
|
1
2
3
4
5
6
7
| | this.listener =
new Microsoft.International.Windows.YomiAutoCompletionListener(this.TextBox1);
this.listener.ContextManager.YomiProvider = new MyYomiProvider();
this.listener.ContextManager.AddToSource("日本", null);
|
独自のソースリストだけを使い、入力された読みがなを登録しない †
先に述べたように、IYomiProviderを実装するよりも、ソースリストに直接読みがなを追加した方が便利というケースも多いでしょう。もし独自に読みがなを追加したソースリストだけを使い、ユーザーが入力した読みがなをソースリストに追加しないのであれば、YomiAutoCompletionContextManager.YomiProviderプロパティにnullを設定できます。
「登録された読みがなと候補を保存、復元する」で紹介したLoadYomiSourceメソッドを使ってソースリストをファイルから読み込み、ユーザーが入力した読みがなを登録しないのならば、次のようにします。(「登録された読みがなと候補を保存、復元する」で示したコードのうち、変更するForm1_Loadメソッドの中身だけを示します。)
1
2
3
4
5
6
7
8
| | Me.listener = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me.TextBox1)
Me.listener.ContextManager.YomiProvider = Nothing
If System.IO.File.Exists(Me.yomiListFile) Then
Me.LoadYomiSource(Me.yomiListFile, Me.listener)
End If
|
1
2
3
4
5
6
7
| | this.listener =
new Microsoft.International.Windows.YomiAutoCompletionListener(this.TextBox1);
this.listener.ContextManager.YomiProvider = null;
if (System.IO.File.Exists(this.yomiListFile))
this.LoadYomiSource(this.yomiListFile, this.listener);
|
複数のYomiAutoCompletionListenerのソースリストを共有する †
複数のテキストボックスで同じYomiAutoCompletionListenerを共有することは出来ませんし、複数のテキストボックスで同じソースリストを共有することも出来ません。よって、複数のテキストボックスで同じオートコンプリートリストが表示されるようにするには、それぞれのソースリスト(YomiAutoCompletionContextManager.Source)を同期させる必要があります。
同期の方法やタイミングはいろいろ考えられますが、ここではIYomiProviderを実装したクラスで行う方法を考えてみます。ソースリストに新たな読みがなが追加されるとき、その前にIYomiProvider.GetYomiメソッドが呼び出され、GetYomiメソッドが返す読みがなをソースリストに追加しているようなので、GetYomiメソッドが呼び出されたときに、GetYomiメソッドが返す読みがなを他のソースリストにも登録して、同期するようにします。
具体的なサンプルは以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| | Public Class SharedSourceYomiProvider
Implements Microsoft.International.Windows.IYomiProvider
Private Shared sharedSources As New List( _
Of Microsoft.International.Windows.YomiStringCollection)()
Private source As Microsoft.International.Windows.YomiStringCollection
Private yomiProvider As Microsoft.International.Windows.IYomiProvider
Public Sub New( _
ByVal listen As Microsoft.International.Windows.YomiAutoCompletionListener)
Me.source = listen.ContextManager.Source
Me.yomiProvider = listen.ContextManager.YomiProvider
SharedSourceYomiProvider.sharedSources.Add(listen.ContextManager.Source)
End Sub
Public Function GetYomi(ByVal text As String) As _
System.Collections.ObjectModel.ReadOnlyCollection(Of String) _
Implements Microsoft.International.Windows.IYomiProvider.GetYomi
Dim ret As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = _
Me.yomiProvider.GetYomi(text)
For Each src As Microsoft.International.Windows.YomiStringCollection _
In SharedSourceYomiProvider.sharedSources
If Me.source IsNot src Then
For Each yomi As String In ret
src.Add(yomi, text)
Next
End If
Next
Return ret
End Function
End Class
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| | public class SharedSourceYomiProvider :
Microsoft.International.Windows.IYomiProvider
{
private static List<Microsoft.International.Windows.YomiStringCollection> sharedSources =
new List<Microsoft.International.Windows.YomiStringCollection>();
private Microsoft.International.Windows.YomiStringCollection source;
private Microsoft.International.Windows.IYomiProvider yomiProvider;
public SharedSourceYomiProvider(
Microsoft.International.Windows.YomiAutoCompletionListener listen)
{
this.source = listen.ContextManager.Source;
this.yomiProvider = listen.ContextManager.YomiProvider;
SharedSourceYomiProvider.sharedSources.Add(listen.ContextManager.Source);
}
public System.Collections.ObjectModel.ReadOnlyCollection<string> GetYomi(
string text)
{
System.Collections.ObjectModel.ReadOnlyCollection<string> ret =
this.yomiProvider.GetYomi(text);
foreach (Microsoft.International.Windows.YomiStringCollection src
in SharedSourceYomiProvider.sharedSources)
{
if (this.source != src)
{
foreach (string yomi in ret)
{
src.Add(yomi, text);
}
}
}
return ret;
}
}
|
例えばこのクラスを使って"TextBox1"と"TextBox2"の2つのテキストボックスでソースを共有するには、次のようにします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| | Private listener As Microsoft.International.Windows.YomiAutoCompletionListener
Private listener2 As Microsoft.International.Windows.YomiAutoCompletionListener
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Me.listener = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me.TextBox1)
Me.listener.ContextManager.YomiProvider = _
New SharedSourceYomiProvider(Me.listener)
Me.listener2 = _
New Microsoft.International.Windows.YomiAutoCompletionListener(Me.TextBox2)
Me.listener2.ContextManager.YomiProvider = _
New SharedSourceYomiProvider(Me.listener2)
End Sub
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| | private Microsoft.International.Windows.YomiAutoCompletionListener listener;
private Microsoft.International.Windows.YomiAutoCompletionListener listener2;
private void Form1_Load(object sender, EventArgs e)
{
this.listener =
new Microsoft.International.Windows.YomiAutoCompletionListener(this.TextBox1);
this.listener.ContextManager.YomiProvider = new SharedSourceYomiProvider(this.listener);
this.listener2 =
new Microsoft.International.Windows.YomiAutoCompletionListener(this.TextBox2);
this.listener2.ContextManager.YomiProvider = new SharedSourceYomiProvider(this.listener2);
}
|
複数のソースリストを切り替えて使用する †
状況によってソースリストを切り替え、候補として表示される読みがなを変えたいというケースもあるかもしれません。次にどのようにすれば複数のソースリストを切り替えて使用することができるかを考えてみます。
これには、ソースリストを切り替えるときに現在のYomiAutoCompletionContextManager.Sourceプロパティの内容を保存し、Sourceプロパティの内容をクリアし、切り替えるソースリストの内容をSourceプロパティに移すといった地味な方法しかなさそうです。
複数のソースリストをIDで切り替えられるようにしたYomiAutoCompletionListenerの派生クラスを作ってみましたので、以下にそのコードを紹介します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| | Public Class MultiSourceYomiListener
Inherits Microsoft.International.Windows.YomiAutoCompletionListener
Private _sources As New Dictionary( _
Of String, Microsoft.International.Windows.YomiStringCollection)()
Private _sourceId As String
Public Property SourceId() As String
Get
Return Me._sourceId
End Get
Set(ByVal value As String)
If value.Equals(Me._sourceId) Then
Return
End If
If Not Me._sources.ContainsKey(Me._sourceId) Then
Me._sources(Me._sourceId) = _
New Microsoft.International.Windows.YomiStringCollection()
Else
Me._sources(Me._sourceId).Clear()
End If
Me._sources(Me._sourceId).AddRange(Me.ContextManager.Source)
Me.ContextManager.Source.Clear()
If Me._sources.ContainsKey(value) Then
Me.ContextManager.Source.AddRange(Me._sources(value))
End If
Me._sourceId = value
End Set
End Property
Public Sub New(ByVal ctrl As Control)
MyBase.New(ctrl)
Me._sourceId = ""
End Sub
End Class
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| | public class MultiSourceYomiListener :
Microsoft.International.Windows.YomiAutoCompletionListener
{
private Dictionary<string, Microsoft.International.Windows.YomiStringCollection>
_sources =
new Dictionary<string, Microsoft.International.Windows.YomiStringCollection>();
private string _sourceId;
public string SourceId
{
get
{
return this._sourceId;
}
set
{
if (value.Equals(this._sourceId))
return;
if (!this._sources.ContainsKey(this._sourceId))
{
this._sources[this._sourceId] =
new Microsoft.International.Windows.YomiStringCollection();
}
else
{
this._sources[this._sourceId].Clear();
}
this._sources[this._sourceId].AddRange(this.ContextManager.Source);
this.ContextManager.Source.Clear();
if (this._sources.ContainsKey(value))
{
this.ContextManager.Source.AddRange(this._sources[value]);
}
this._sourceId = value;
}
}
public MultiSourceYomiListener(Control ctrl) : base(ctrl)
{
this._sourceId = "";
}
}
|
このクラスの使い方はYomiAutoCompletionListenerと同じで、次のようになります。ソースリストを切り替えるときは、SourceIdプロパティにIDを代入します。はじめのIDは空の文字列です。
1
2
3
4
5
6
7
| | Private listener As MultiSourceYomiListener
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Me.listener = New MultiSourceYomiListener(Me.TextBox1)
End Sub
|
1
2
3
4
5
6
7
| | private MultiSourceYomiListener listener;
private void Form1_Load(object sender, EventArgs e)
{
this.listener = new MultiSourceYomiListener(this.TextBox1);
}
|
参考 †
コメント †
- 大変貴重な情報ありがとうございます。 -- やまと