こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

データグリッドでの日本語入力方法

またまたお世話になります。

Access2000+VB.NET2003です。

サブフォームを使ってデータを入力しているのですが、メインフォームはテキストボックスやコンボボックスを使っているので、FEPの設定はできるのですが、サブテーブル入力にはデータグリッドを使って直接データを入力しているので、いちいち(日本語←→英数)を切り替えねばならず不便してます。

カーソルがそのフィールドにいったとき、漢字入力が必要なFEP on、不必要ならoffになるように予め設定しておくってできないのでしょうか?

もしいい方法がありましたらご教示ください。
よろしくお願いします。

投稿日時 - 2006-06-07 16:02:26

QNo.2201113

困ってます

質問者が選んだベストアンサー

このスレが役に立つと思います。
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

投稿日時 - 2006-06-08 00:02:44

補足

1050YENさん いつもありがとうございます。
解決に大きく近づきました。
参考にURLを教えていただいて見てみると、「データグリッドにコンボボックス」というのがありましたが、これもやりたかったのですが途中でギブアップしていた項目でした。
早速参考にさせていただきます。
ただ私の場合、明細伝票の数が一定せず、その都度行が増えていくのですが、この場合でも自動的にコンボボックスは表示されるのでしょうか?
新しい質問になってしまいましたがよろしくお願いいたします。

投稿日時 - 2006-06-08 08:34:15

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>その都度行が増えていくのですが

Rowが増えるということであれば大丈夫ですよ^^

Excelに例えて説明すると、、、
DataGridTextBoxColumnは、A列・B列・C列・・・・・という列に対し書式を設定を設定する方法です。
A列全体に書式設定を行うと、縦方向のセルはその書式に従いますよね?それと一緒ですよ。

参考URLのサンプルとかを、実行してみたらわかると思いますよ^^

投稿日時 - 2006-06-08 10:17:05

お礼

ありがとうございます。

これで格段に前進することができます。

プログラムするって楽しいですね。
(まだそんな段階ではないのですが)
今後もよろしくお願いします。

投稿日時 - 2006-06-08 11:23:40

あなたにオススメの質問