• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォーカスを無効にしたいのですが、できません。どうしたらいいでしょう?)

フォーカスを無効にする方法と苦戦している理由

このQ&Aのポイント
  • VB2010の環境で電卓を作っていますが、フォーカスを無効にする方法がわかりません。
  • Windowsの電卓を参考にしているのですが、ボタンを押した時にフォーカスが設定されないような状況を作りたいです。
  • 現在、フォーカスを無効にするための記述方法に苦戦しています。どのように記述すればよいでしょうか。

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

  • ベストアンサー
  • emsuja
  • ベストアンサー率50% (1085/2161)
回答No.1

私がその昔 VB6 で電卓を作った時は数字ボタンを押したクリックイベントの最後で入力数値が表示されている TextBox にフォーカスを強制的に動かしていました。 そうすれば TextBox に直接数値を入力する事も可能です。 四則演算のボタンを押しても同じように TextBox にフォーカスを動かします。 TextBox 上のカーソルの位置も制御する必要があるので TextBox にフォーカスと移動させる処理もサブルーチン化しておいた方が後々楽です。

yangxun38
質問者

お礼

なるほど。大変参考になりました。 おかげで解決にいたりました。 表示処理をラベルコントロールのままにし、テキストボックスを隠れる場所に配置。 そこにフォーカスをすべて動かすことで、とりあえず、目的達成にいたりました。 どうも、ありがとうございました!

その他の回答 (1)

回答No.2

電卓の動きは、計算処理ロジックを行った後、結果表示のテキスト部分にフォーカスを飛ばしているようです。 フォーカス消しの足し算サンプルです。 ※必要なもの 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

関連するQ&A

専門家に質問してみよう