- ベストアンサー
データグリッドでの日本語入力方法
またまたお世話になります。 Access2000+VB.NET2003です。 サブフォームを使ってデータを入力しているのですが、メインフォームはテキストボックスやコンボボックスを使っているので、FEPの設定はできるのですが、サブテーブル入力にはデータグリッドを使って直接データを入力しているので、いちいち(日本語←→英数)を切り替えねばならず不便してます。 カーソルがそのフィールドにいったとき、漢字入力が必要なFEP on、不必要ならoffになるように予め設定しておくってできないのでしょうか? もしいい方法がありましたらご教示ください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
このスレが役に立つと思います。 http://okwave.jp/kotaeru.php3?q=2142818 http://okwave.jp/kotaeru.php3?q=2062060 DataGridTextBoxColumnを作成しつつ、その中のDataGridTextBoxに対しIMEを設定することができます。 '---------------------------------------------------------------------------- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '--データテーブル構造作成 Dim dt As New DataTable("aaa") dt.Columns.AddRange(New DataColumn() { _ New DataColumn("日付", GetType(DateTime)), _ New DataColumn("整数", GetType(Integer)), _ New DataColumn("半角", GetType(String)), _ New DataColumn("全角", GetType(String)) _ }) '--データテーブルへデータを追加 dt.Rows.Add(New Object() {System.DateTime.Now.AddDays(0), 1000, "A", "あ"}) dt.Rows.Add(New Object() {System.DateTime.Now.AddDays(1), 2000, "B", "い"}) dt.Rows.Add(New Object() {System.DateTime.Now.AddDays(2), 3000, "C", "う"}) dt.Rows.Add(New Object() {System.DateTime.Now.AddDays(3), 4000, "D", "え"}) dt.Rows.Add(New Object() {System.DateTime.Now.AddDays(4), 5000000, "E", "お"}) '--データグリッドへ反映 DataGrid1.DataSource = dt 'データグリッドテーブルスタイルの設定 Dim ts As New DataGridTableStyle() ts.MappingName = dt.TableName ts.GridColumnStyles.AddRange(New DataGridColumnStyle() { _ 取得_TextBoxColumn日付(dt.Columns(0), 120), _ 取得_TextBoxColumn整数(dt.Columns(1)), _ 取得_TextBoxColumn文字(dt.Columns(2), , ImeMode.Disable), _ 取得_TextBoxColumn文字(dt.Columns(3), , ImeMode.Hiragana) _ }) DataGrid1.TableStyles.Add(ts) End Sub #Region "TextBoxColumn関係" #Region "TextBoxColumn関係:日付用" Private Function 取得_TextBoxColumn日付( _ ByVal p_dc As DataColumn, _ Optional ByVal p_width As Integer = -1 _ ) As DataGridTextBoxColumn Dim l_tbc As DataGridTextBoxColumn = 取得_TextBoxColumn(p_dc, p_width, HorizontalAlignment.Left, ImeMode.Disable) '--日付用の書式を設定 l_tbc.Format = "yyyy/MM/dd hh:mm:ss" Return l_tbc End Function #End Region #Region "TextBoxColumn関係:整数用" Private Function 取得_TextBoxColumn整数( _ ByVal p_dc As DataColumn, _ Optional ByVal p_width As Integer = -1 _ ) As DataGridTextBoxColumn Dim l_tbc As DataGridTextBoxColumn = 取得_TextBoxColumn(p_dc, p_width, HorizontalAlignment.Right, ImeMode.Disable) '--整数用の書式を設定 l_tbc.Format = "#,###" Return l_tbc End Function #End Region #Region "TextBoxColumn関係:文字用" Private Function 取得_TextBoxColumn文字( _ ByVal p_dc As DataColumn, _ Optional ByVal p_width As Integer = -1, _ Optional ByVal p_ImeMode As ImeMode = System.Windows.Forms.ImeMode.NoControl _ ) As DataGridTextBoxColumn Dim l_tbc As DataGridTextBoxColumn = 取得_TextBoxColumn(p_dc, p_width, HorizontalAlignment.Left, p_ImeMode) Return l_tbc End Function #End Region #Region "TextBoxColumn関係:汎用" '直接このメソッドを利用してもよいが、利用したい型毎にメソッドを作成し、そこから呼んだ方がよいかも? 'もしくは別クラスを作成し、このメソッドを継承させるとか Private Function 取得_TextBoxColumn( _ ByVal p_dc As DataColumn, _ Optional ByVal p_width As Integer = -1, _ Optional ByVal p_Alignment As HorizontalAlignment = HorizontalAlignment.Left, _ Optional ByVal p_ImeMode As ImeMode = System.Windows.Forms.ImeMode.NoControl _ ) As DataGridTextBoxColumn Dim l_tbc As New DataGridTextBoxColumn() With l_tbc .MappingName = p_dc.ColumnName 'データテーブルとリンクする項目を指定 .HeaderText = p_dc.ColumnName 'ヘッダ .Width = p_width '幅 .Alignment = p_Alignment '右/左/中央寄せ End With l_tbc.TextBox.ImeMode = p_ImeMode 'IMEの設定 Return l_tbc End Function #End Region #End Region
その他の回答 (1)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>その都度行が増えていくのですが Rowが増えるということであれば大丈夫ですよ^^ Excelに例えて説明すると、、、 DataGridTextBoxColumnは、A列・B列・C列・・・・・という列に対し書式を設定を設定する方法です。 A列全体に書式設定を行うと、縦方向のセルはその書式に従いますよね?それと一緒ですよ。 参考URLのサンプルとかを、実行してみたらわかると思いますよ^^
お礼
ありがとうございます。 これで格段に前進することができます。 プログラムするって楽しいですね。 (まだそんな段階ではないのですが) 今後もよろしくお願いします。
補足
1050YENさん いつもありがとうございます。 解決に大きく近づきました。 参考にURLを教えていただいて見てみると、「データグリッドにコンボボックス」というのがありましたが、これもやりたかったのですが途中でギブアップしていた項目でした。 早速参考にさせていただきます。 ただ私の場合、明細伝票の数が一定せず、その都度行が増えていくのですが、この場合でも自動的にコンボボックスは表示されるのでしょうか? 新しい質問になってしまいましたがよろしくお願いいたします。