C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: enterでセルを横移動させたい。また入力文字数を制限したい


(過去ログ 66 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■38548 / inTopicNo.1)  enterでセルを横移動させたい。また入力文字数を制限したい
  
□投稿者/ アドらす (1回)-(2009/07/18(Sat) 02:43:17)

分類:[.NET 全般] 

ここに初めて書き込みをさせていただきます。
vb.net初心者です。
今、私はdatagridviewで単価、数量の列を入力して、enter押して金額、テキストボックス(合計、消費税)が自動計算されるように作成しています。
作成してて問題点が・・・・・。
@enterでセルを横移動するようにしています。空白のままだと横移動して数量のところでだったら新しい行を追加して単価に戻るのですが、単価を入力してenterを押すと新しい行を追加して下の行に移ってしまいます。
A単価と数量を入力して値を変えてセルが離れたときに合計、テキストボックス(合計、消費税)が変わるようにしたいのですが、今は数量のときにしか変わらないようになっている・・・・・。
B単価、数量、合計、テキストボックス(合計、消費税)の桁数制限をしたい。「DataGridView1TextBox_KeyPress」で処理を書こうと思っていますが、どう書けばいいかわからないです・・・・。単価3桁、数量3桁、合計8桁(カンマ区切り。3桁ごと)。テキストボックスは合計はカンマ処理していますが、桁数制限をしていません。8桁です。消費税の方も8桁で制限しないといけませんが、カンマ編集のやり方がわかりません。消費税は小数点も含まれてくるのでそのあたりが・・・・・・。

CVB.net2008です。
windowsXPです。

Dお忙しいとは思いますが、どうかお知恵を拝借できませんでしょうか・・・・。お願いします。もうこれで三日間悩み続けてます。
ソースをはっておきます。
みにくいソースですいませんでした。

Public Class Form1
    'テーブル宣言
    Private m_dt As DataTable

    '行取得用の変数宣言
    Private currentRow As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        m_dt = New System.Data.DataTable
        m_dt.Columns.Add("単価", Type.GetType("System.String"))
        m_dt.Columns.Add("数量", Type.GetType("System.String"))
        m_dt.Columns.Add("合計", Type.GetType("System.String"))
    End Sub

    'セルの編集が終了したら
    Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
        Call cellendedit()
    End Sub

    '金額、合計,消費税の自動計算
    Private Sub cellendedit()
        '単価、数量,合計、消費税の結果を入れるための変数
        Dim tanka As Integer
        Dim suuryou As Integer
        Dim total As Integer
        Dim syouhize As Double

        Dim cell As String = DataGridView1.CurrentCell.Value
        currentRow = DataGridView1.CurrentCell.RowIndex

        Select Case DataGridView1.CurrentCell.OwningColumn.Name

            Case "数量"
                For i As Integer = 0 To DataGridView1.Rows.Count - 1
                    tanka = CInt(DataGridView1.Rows(i).Cells(0).Value)
                    suuryou = suuryou + CInt(DataGridView1.Rows(i).Cells(1).Value)

                    'これだとカンマ編集してない。金額のセルにはそのままの値が入る
                    DataGridView1.Rows(i).Cells(2).Value = CInt(DataGridView1.Rows(i).Cells(0).Value) + CInt(DataGridView1.Rows(i).Cells(1).Value)
                    total = total + DataGridView1.Rows(i).Cells(2).Value
                Next

                textSumGoukei.Text = total.ToString("#,###,#")
                syouhize = total * 1.05 / 100.05

                '整数、小数点あわせて9桁になるようにしたい。
                'これだとならない。
                txtSyouhizei.Text = syouhize.ToString
        End Select
    End Sub

    'イベントハンドラ
    Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
        If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
            Dim dgv As DataGridView = CType(sender, DataGridView)

            Dim tb As DataGridViewTextBoxEditingControl = CType(e.Control, DataGridViewTextBoxEditingControl)

            RemoveHandler tb.KeyPress, AddressOf DataGridView1TextBox_KeyPress

            AddHandler tb.KeyPress, AddressOf DataGridView1TextBox_KeyPress


        End If
    End Sub

    'セル移動。ただしこれだと単価を入力してenterを押すと新しい行が追加されてしまう・・・・。
       Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
        currentRow = DataGridView1.CurrentCell.RowIndex
        Dim curentColum As Integer = DataGridView1.CurrentCell.ColumnIndex
        Dim nextColum As Integer = curentColum + 1
        Dim nextrow As Integer = currentRow

        If e.KeyCode = Keys.Enter Then
            If nextColum = 2 Then
                nextColum = 0
                nextrow += 1
                DataGridView1.Rows.Add()
            End If
            DataGridView1.CurrentCell = DataGridView1(nextColum, nextrow)
        End If

    End Sub

    '入力文字制限。ここに入力文字数制限もしたい。
    Private Sub DataGridView1TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DataGridView1.KeyPress
        Select Case DataGridView1.CurrentCell.OwningColumn.Name
            Case "単価"
                Select Case e.KeyChar
                    Case "0" To "9"
                    Case Microsoft.VisualBasic.Chr(Keys.Back)
                    Case Else
                        e.KeyChar = Nothing
                End Select
            Case "数量"
                Select Case e.KeyChar
                    Case "0" To "9"
                    Case Microsoft.VisualBasic.Chr(Keys.Back)
                    Case Else
                        e.KeyChar = Nothing
                End Select
        End Select
    End Sub
End Class


以上です。

引用返信 編集キー/
■38549 / inTopicNo.2)  Re[1]: enterでセルを横移動させたい。また入力文字数を制限したい
□投稿者/ やじゅ (1113回)-(2009/07/18(Sat) 05:00:59)
やじゅ さんの Web サイト
No38548 (アドらす さん) に返信

@単価を入力してenterを押すと新しい行を追加して下の行に移ってしまいます。
DataGridViewでEnterキーを押すと隣のセルにフォーカスが移動されるようにする
http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html

A今は数量のときにしか変わらないようになっている・・・・・
数量のときしか合計の計算処理が入ってないから

B単価、数量、合計、テキストボックス(合計、消費税)の桁数制限をしたい。
 DataGridViewの入力桁数を制限したいのですが
 http://oshiete1.goo.ne.jp/qa3669267.html

実現したいことをキーワードにして検索してみては?
「DataGridView セル移動」とか
「DataGridView 入力制限」とか
引用返信 編集キー/
■38550 / inTopicNo.3)  Re[1]: enterでセルを横移動させたい。また入力文字数を制限したい
□投稿者/ もりお (12回)-(2009/07/18(Sat) 05:15:34)
2009/07/18(Sat) 05:30:51 編集(投稿者)
No38548 (アドらす さん) に返信
ぬお・・・整理させてくださいな。
問題点はこのような認識であっていますか。

・DataGridView で enterキー を押した時に横に移動したい
・単価(DataGridView) の値を変更したときに 合計(DataGridView) が変わるようにしたい
・単価(DataGridView) の値を変更したときに 合計(TextBox) が変わるようにしたい
・単価(DataGridView) の値を変更したときに 消費税(TextBox) が変わるようにしたい
・単価(DataGridView) の入力桁数を制限したい (3桁)
・数量(DataGridView) の入力桁数を制限したい (3桁)
・合計(DataGridView) の表示桁数を制限したい (8桁)
・合計(TextBox) の表示桁数を制限したい (8桁)
・消費税(TextBox) の表示桁数を制限したい (8桁)

表示桁数に関しては、セットするときに Substring(0,8) で善いのではないでしょうか。

引用返信 編集キー/
■38557 / inTopicNo.4)  Re[2]: enterでセルを横移動させたい。また入力文字数を制限したい
□投稿者/ アドらす (2回)-(2009/07/18(Sat) 23:33:53)
2009/07/19(Sun) 02:52:04 編集(投稿者)
2009/07/19(Sun) 02:48:35 編集(投稿者)

>>やじゅさん
・アドバイスありがとうございます。
・調べてやってみたいと思います。
・そのキーワードで検索かけたんですがいいのがみつからなくて・・・・・・。

>>もりおさん
アドバイスありがとうございます
・問題点はそれであってます。
・後一つだけ足りない点が
・DataGridView で enterキー を押した時に横に移動したい
 これで単価に値をいれてenterを押しても横移動。
 datagridviewが二行あったとして(すべてに値が入力されているとする)一行目の単価のセルがあってenterを押すと斜め下に移動し てしますんです・・・
・「表示桁数に関しては、セットするときに Substring(0,8) で善いのではないでしょうか。」
  どうセットすればいいのでしょうか?



やじゅさん、もりおさん返信が遅くなり申し訳ありませんでした。

引用返信 編集キー/
■38559 / inTopicNo.5)  Re[3]: enterでセルを横移動させたい。また入力文字数を制限したい
□投稿者/ アドらす (3回)-(2009/07/18(Sat) 23:46:10)
>>やじゅさん
@http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html
 このサイトだとtabキーがおされたことにするやり方ですね・・・・・・。
 私の場合「http://vsug.jp/tabid/63/forumid/72/postid/4370/view/topic/Default.aspx」を参考に作成したんですが、これだと
 2行目がある状態で
Me.DataGridView1(0, 0)の位置でENTERを押したときに、
Me.DataGridView1(1, 0)ではなくて、Me.DataGridView1(1, 1)に移動してしまいます・・・

この原因がわからずこまってります・・・・。

引用返信 編集キー/
■38564 / inTopicNo.6)  Re[4]: enterでセルを横移動させたい。また入力文字数を制限したい
□投稿者/ やじゅ (1115回)-(2009/07/19(Sun) 05:02:02)
やじゅ さんの Web サイト
No38559 (アドらす さん) に返信
> >>やじゅさん
> @http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html
>  このサイトだとtabキーがおされたことにするやり方ですね・・・・・・。

それでいいと思うんですが、逆にtabキーはどういう動作にするつもりですか?

>  私の場合「http://vsug.jp/tabid/63/forumid/72/postid/4370/view/topic/Default.aspx」を参考に作成したんですが、これだと
>  2行目がある状態で
> Me.DataGridView1(0, 0)の位置でENTERを押したときに、
> Me.DataGridView1(1, 0)ではなくて、Me.DataGridView1(1, 1)に移動してしまいます・・・

その参考にしたサイトの質問者さんもその方法では正常に動作していないから質問されているわけです。
Enterキーは特別扱いされてるから、ProcessDialogKeyをoverrideするとかしないと制御が出来ないってことです。
引用返信 編集キー/
■38585 / inTopicNo.7)  Re[5]: enterでセルを横移動させたい。また入力文字数を制限したい
□投稿者/ アドらす (4回)-(2009/07/19(Sun) 23:54:35)
2009/07/20(Mon) 00:51:34 編集(投稿者)

No38564 (やじゅ さん) に返信
> ■No38559 (アドらす さん) に返信
>>>>やじゅさん
>>@http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html
>> このサイトだとtabキーがおされたことにするやり方ですね・・・・・・。
>
> それでいいと思うんですが、逆にtabキーはどういう動作にするつもりですか?
>
>> 私の場合「http://vsug.jp/tabid/63/forumid/72/postid/4370/view/topic/Default.aspx」を参考に作成したんですが、これだと
>> 2行目がある状態で
>>Me.DataGridView1(0, 0)の位置でENTERを押したときに、
>>Me.DataGridView1(1, 0)ではなくて、Me.DataGridView1(1, 1)に移動してしまいます・・・
>
> その参考にしたサイトの質問者さんもその方法では正常に動作していないから質問されているわけです。
> Enterキーは特別扱いされてるから、ProcessDialogKeyをoverrideするとかしないと制御が出来ないってことです。




tabキーはかんがえてませんでした。

そうだったんですか。
単純にDataGridViewのKeyDownイベントでなんとかなると思っていたのでその方法でやらなくてもいいだろうって思ってしまいした。
オーバーライドとかイマイチ実感がつかめなかったので・・・・。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -