- ベストアンサー
フォーカスを無効にする方法と苦戦している理由
- VB2010の環境で電卓を作っていますが、フォーカスを無効にする方法がわかりません。
- Windowsの電卓を参考にしているのですが、ボタンを押した時にフォーカスが設定されないような状況を作りたいです。
- 現在、フォーカスを無効にするための記述方法に苦戦しています。どのように記述すればよいでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私がその昔 VB6 で電卓を作った時は数字ボタンを押したクリックイベントの最後で入力数値が表示されている TextBox にフォーカスを強制的に動かしていました。 そうすれば TextBox に直接数値を入力する事も可能です。 四則演算のボタンを押しても同じように TextBox にフォーカスを動かします。 TextBox 上のカーソルの位置も制御する必要があるので TextBox にフォーカスと移動させる処理もサブルーチン化しておいた方が後々楽です。
その他の回答 (1)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
電卓の動きは、計算処理ロジックを行った後、結果表示のテキスト部分にフォーカスを飛ばしているようです。 フォーカス消しの足し算サンプルです。 ※必要なもの Form1 →ボタン1~4 →テキストボックス Public Class Form1 <System.Runtime.InteropServices.DllImport("USER32.DLL", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> Private Shared Function HideCaret(ByVal hwnd As IntPtr) As Integer End Function Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Button1.Text = "1" Me.Button2.Text = "2" Me.Button3.Text = "3" Me.Button4.Text = "C" With Me.TextBox1 .ReadOnly = True .BackColor = Color.White .ForeColor = Color.Black .Text = 0 .TabIndex = 0 End With Dim typBtn As Type = GetType(Button) For Each ctl As Control In Me.Controls If ctl.GetType Is typBtn Then Dim btn As Button = ctl AddHandler btn.Click, AddressOf All_Click End If Next End Sub Private Sub Num_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click Dim btn As Button = sender SumCalc(btn.Text) End Sub Private Sub C_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Me.TextBox1.Text = "0" End Sub Private Sub All_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Me.TextBox1.Focus() End Sub Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus With Me.TextBox1 Call HideCaret(.Handle) .[Select](.Text.Length, 0) End With End Sub Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If IsNumeric(e.KeyChar) Then SumCalc(e.KeyChar) End If End Sub Sub SumCalc(ByVal pVal As String) Me.TextBox1.Text = CULng(Me.TextBox1.Text) + CULng(pVal) End Sub End Class
お礼
なるほど。大変参考になりました。 おかげで解決にいたりました。 表示処理をラベルコントロールのままにし、テキストボックスを隠れる場所に配置。 そこにフォーカスをすべて動かすことで、とりあえず、目的達成にいたりました。 どうも、ありがとうございました!