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

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

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

Re[2]: ENTER


(過去ログ 115 を表示中)

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

■67976 / inTopicNo.1)  ENTER
  
□投稿者/ りんご (1回)-(2013/09/12(Thu) 16:36:38)

分類:[.NET 全般] 

Win7
VB.net 2010
framework3.5の環境です。


タッチキーであるコマンドボタンを画面に配置して  
datagridviewに転記しています。@
最後にENTERと書かれたコマンドボタンを押すと
キーボードのENTERが押されたように
datagridviewのセルを改行したり、入力チェック(CellValidating)イベントに飛ばしたいと思っています。
Aのように考えたのですが、固まってしまいうまく動きません。
お分かりになる方、教えて頂けないでしょうか。
宜しくお願いします。

イベントの作成方法もよくわかっていません。



@
Private Sub NUMBER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button0.Click, Button1.Click, Button2.Click,       
Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click, Buttondot.Click

Try
datagridview(datagridview.CurrentCell.ColumnIndex, datagridview.CurrentCell.RowIndex).Value = datagridview      (datagridview.CurrentCell.ColumnIndex, datagridview.CurrentCell.RowIndex).Value + sender.text

Catch ex As Exception
エラー処理
End Try

End Sub

A
Private Sub ButtonEnter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonEnter.Click
SendKeys.Send("{ENTER}")
end sub
引用返信 編集キー/
■67978 / inTopicNo.2)  Re[1]: ENTER
□投稿者/ 魔界の仮面弁士 (340回)-(2013/09/12(Thu) 17:00:33)
2013/09/12(Thu) 17:00:57 編集(投稿者)

No67976 (りんご さん) に返信
> タッチキーであるコマンドボタンを画面に配置して  
コマンドボタン、というのがよく分かりませんが(VB6 や Office VBA の CommandButton のこと?)、
タッチキーということは、いわゆるスクリーンキーボードを自作しているということでしょうか。
http://msdn.microsoft.com/ja-jp/library/cc440905.aspx


> 固まってしまいうまく動きません。
以下、未検証で回答します。


> datagridview.CurrentCell.ColumnIndex, datagridview.CurrentCell.RowIndex
.CurrentCell を使うと、共有行が非共有行になってしまうため、
現在のセルの位置を取得するだけならば、代わりに、
 pos = dataGridView1.CurrentCellAddress
を利用して、そこから pos.X と pos.Y を得る方が望ましいです。

ただし、今回のように dataGridView1(pos.X, pos.Y).Value へのアクセスが
目的なのであれば、dataGridView1.CurrentCell.Value と書くことができます。


> ).Value + sender.text
文字列連結の意味であれば、「+」ではなく「&」を使ってください。

+ を使うと、たとえば .Value が数値型だった場合、
sender.Text の内容を数値変換してから加算しようとするため、
非数値が入力されていた場合に例外が発生してしまいます。


> SendKeys.Send("{ENTER}")
SendKeys は、アクティブなコントロールに対して処理されます。

ButtonEnter の Click イベントが実行される場合というのは、
アクティブなコントロールは普通 ButtonEnter 自身になってしまうので、
本来やりたいこととは異なってしまうかと思います。

編集中の値の確定が目的なら、EndEdit メソッドを試してみてください。

改行させることが目的なら、目的セルの .Value プロパティに対して
改行文字(ControlChars.NewLine 等)を追記されては如何でしょう。
引用返信 編集キー/
■67979 / inTopicNo.3)  Re[1]: ENTER
□投稿者/ shu (391回)-(2013/09/12(Thu) 17:01:04)
No67976 (りんご さん) に返信

とりあえず何が起きているのか確認するため
以下のコードを実行してみて下さい。(デバッグ実行で停止が出来るようにしておいて下さい)
    Private cnt As Integer = 0

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        cnt += 1
        Button1.Text = cnt.ToString
        SendKeys.Send("{ENTER}")
    End Sub


ボタンをクリックするとフォーカスが移動します。
その状態でEnterキーを押下するということはボタンのクリックが再び発生します。
SendKeysするまえにフォーカスを移動しなおす必要があります。

引用返信 編集キー/
■67989 / inTopicNo.4)  Re[2]: ENTER
□投稿者/ りんご (2回)-(2013/09/13(Fri) 20:16:38)
shu さん
魔界の仮面弁士 さん 
回答ありがとうございます!!!

 説明不足ですみません。
 参照URLで頂いた電卓フォームのように数値のキーのほかに[ENTER]キーがあり、
 数値キーを打つと、datagridviewに数値表示し、[ENTER]キーというコマンドボタンを押すと
 キーボードのENTERを押したように
 cellvallidingで入力値チェック,入力値OKであれば次の入力セルへセル移動したいのです。
 (キーボードで打つタイプもあり、同様の動きにしたいと考えています。)
 
 datagridviewをどのようにアクティブコントロールにして、SendKeys.Send("{ENTER}") を行えばいいのでしょうか。。。
 もしいい方法があればご教授お願いします。

 文字列連結の意味であれば、「&」なんですね。初めて知りました。
 dataGridView1.CurrentCell.Value を使うことですっきりしたソースになりました。
ありがとうございます。

 
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -