Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

プログラムで作成したTextBoxに、日本語が入力できない 解決済み

タグの編集...

投稿者 zz6989   (社会人)   投稿日時 2012/6/21 18:49:24
いつもお世話になります。
Form1にPictureBoxを貼り付けてその上に、TextBoxをプログラムから作成したのですが、言語バーが
Enabled = False状態のようになり、数字や英字は入力できますが、日本語が入力できません。
 
 Dim i As Integer
        For i = 0 To 4
            Dim txtbox As New TextBox
            '配置    
            txtbox.Location = New Point(20, 20 + (i * 40))
            txtbox.Multiline = True
            'サイズ   
            txtbox.Size = New Size(100, 30)

            PictureBox1.Controls.Add(txtbox) ' MeをPictureBox1に変更すると言語バーがEnabled = False状態になる。 
        Next

 PictureBox1をMeにしてForm上にTextBoxを作成した場合は、言語バーは通常で日本語も普通に入力できます。

ツールボックスから選択したTextBoxは、PictureBoxの上に貼り付けても、問題なく日本語が入力できます。

できれば、TextBoxをPictureBox上に作成して、日本語を入力できるようにしたいのですが、方法のご教示をお願いいたします。
自分は、初級講座のレベルでもままならない状態ですので、難易度が高ければあきらめます。




投稿者 ズッカ   (社会人)   投稿日時 2012/6/22 06:22:38
PictureBoxはコントロールのコンテナではないので、
単にPictureBox上にテキストボックスを乗せたいのであれば、
LocationをPictureBox1上の座標から、フォームの座標に変換し、

txtbox.Location = New Point(20 + PictureBox1.Location.X, 20 + (i * 40) + PictureBox1.Location.Y)
Me.Controls.Add(txtbox)

となるのですが、もし、PictureBox1のスクロールがあり、それに伴ってTextBoxもスクロールする
場合には、Panelを利用することになるでしょう。

投稿者 魔界の仮面弁士   (社会人)   投稿日時 2012/6/22 12:24:17
IME が使えないのは、TextBox の ImeMode プロパティが Disable の状態になっているためです。
ImeMode を Close や On などにしておけば、日本語も入力可能な状態となります。

txtbox.ImeMode = Windows.Forms.ImeMode.Close




> MeにしてForm上にTextBoxを作成した場合は、言語バーは通常で日本語も普通に入力できます。
TextBox の ImeMode プロパティの初期値が、 NoControl であることに注意してください。
これは、親コンテナの IME 設定を引き継ぐということを意味しています。


コンテナとなっている Form や PictureBox には ImeMode がありませんが、その代わりに
「DefaultImeMode プロパティ」という、読み込み専用のProtected なプロパティがあります。

PictureBox の場合、DefaultImeMode が Disable を返すため、その上の TextBox  が
ImeMode = NoControl の場合、TextBox の IME も使用不可(Disable)となります。
(TextBox の ImeMode が NoControl 以外なら、TextBox 側の設定が優先されます)


もし、TextBox 側は NoControl のままにしておきたいのであれば、PictureBox 側の
設定を変更する必要があるので、少々手間がかかります。すなわち、PictureBox を継承して、
その PictureBox の ImeModeBase プロパティを Disable 以外に変更するということです。

投稿者 zz6989   (社会人)   投稿日時 2012/6/22 12:26:47
お返事ありがとうございます。
ズッカさんのコードに変更してみましたが、やはりTextBoxには英数字のみの入力しかできません。言語バーの状態はEnabled = Falseのような感じです。

当方、当講座の入講条件の「Windowsの基本操作ができること」に反して、入講してしまいましたので、Windowsの設定に問題があるのでしょうか?

>PictureBox1のスクロールがあり、それに伴ってTextBoxもスクロールする
スクロールはありません。

「難しい場合は、あきらめます。」といいましたが、PictureBoxには線とか、文字とかいっぱい書きましたし、他にもいろいろありまして、あきらめられません、理解できないコードが必要でしたら、コピペしますのでどうかお助けください。(汗~



投稿者 魔界の仮面弁士   (社会人)   投稿日時 2012/6/22 12:28:14
訂正…。

> コンテナとなっている Form や PictureBox には ImeMode がありませんが、その代わりに
> 「DefaultImeMode プロパティ」という、読み込み専用のProtected なプロパティがあります。

すみません、上記は PictureBox だけの話です。

PictureBox には ImeMode がありませんが、代わりに DefaultImeMode や ImeModeBase があります。
一方 Form では、ImeMode も DefaultImeMode も ImeModeBase も利用できます。

投稿者 m190   (社会人)   投稿日時 2012/6/22 18:18:48
あの、もしかすると私の環境が XP + VB2010 だから?なのかもしれませんが
txtbox.ImeMode = ImeMode.On    ←とかではダメですか?
私の環境では漢字の入力できましたし、入力中に、IMEのオン・オフなどもできました。
試してみたコードです
Public Class Form1
    Sub Form_Load() Handles Me.Load
        Dim PictureBox1 As New PictureBox With {.Dock = DockStyle.Fill}
        For i = 0 To 4
            Dim txtbox = New TextBox With {.Multiline = True}
            txtbox.Bounds = New Rectangle(20, 40 * i + 20, 100, 30)
            txtbox.ImeMode = ImeMode.On  '←単純に On にしただけです 
            PictureBox1.Controls.Add(txtbox)
        Next
        Me.Controls.Add(PictureBox1)
    End Sub
End Class



投稿者 zz6989   (社会人)   投稿日時 2012/6/22 19:16:39
魔界の仮面弁士さまへ。
すいません、ズッカ さんに返信を書いている間に、魔界の仮面弁士さまからのお返事があったようで、見逃してしまいました。

確かに↓のようにしたところ、日本語の入力ができるようになりました。
txtbox.ImeMode = Windows.Forms.ImeMode.Close

>TextBox の ImeMode プロパティの初期値が、 NoControl であることに注意してください。これは、親コンテナの IME 設定を引き継ぐということを意味しています。
このことは、よ~く覚えておきます。

PictureBoxの IMEの動作がよくわかりました。(感謝。
なんか、魔界の仮面弁士さまの解説は魔法にかかったように「わかった!」って感じになります。
やっぱり、魔界の人なのかな~

m190さんへ
お返事有難う御座いました。
 XP + VB2010 のせいではありませんでした。投稿のタイミングがちょっとずれてしまいまして、私が、あたかも解決しなかったかのように、返信したためです。
txtbox.ImeMode = ImeMode.On←でOKでした。
いつも、お気ずかい、有難う御座います。やっぱりm190さんは、心療内科の先生?

「これは、まいったな~」と思っていましたが、解決できてよかったで~す。
今回手がけているプログラムは、少々複雑ですので、これからしばらくは、みなさんのお力をお借りさせてください。(もうすでに、1箇所問題があります、たぶん自力解決は不可能です)

みなさん、有難う御座いました。