tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルフォーカスの削除
記事No7019
投稿日: 2008/02/14(Thu) 15:28
投稿者たろう
はじめまして。

現在VB.NETで電卓を作っています。
Enterを押すと、「=」buttonを押したように動作させたいのですが、
フォーカスが「=」以外の、buttonにある場合、
そのbuttonの動作が優先されてしまいます。

例として「3」buttonにフォーカスがある場合、Enterを押すと3が入力されます。

現在、フォーカスの初期配置をtextboxなどにしてますが、マウス操作すると
フォーカスが移動してしまうのが現状です。

よって、フォーカスをなくしたいのですが、その他解決策があればお願いします。

[ツリー表示へ]
タイトルRe: フォーカスの削除
記事No7028
投稿日: 2008/02/15(Fri) 09:39
投稿者y4yama
> 例として「3」buttonにフォーカスがある場合、Enterを押すと3が入力されます。
こんちは
1.
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        TextBox1.Text &= "2"
        Button1.Focus()
    End Sub

Button1が「=」buttonならば、Button1.Focus()としておけば、フォーカスをなくすのでなく
Button1に常にFocusさせるのが解決策でしょうか。

2.
>例として「3」buttonに・・
「3」はラベルとしてBorderStyleをFixed3Dにします。Form1にはbuttonとしては、「=」buttonだけにすれば
ソフトは簡単ではないかと思います

3.
Form1のKeyPreviewプロパティをTrueにしておけば、Enterがボタンに行く前にForm1で
先取りできます。ぐぐってみれば、サンプルがありますよ

[ツリー表示へ]
タイトルRe: フォーカスの削除
記事No7029
投稿日: 2008/02/15(Fri) 10:06
投稿者よねKEN
> よって、フォーカスをなくしたいのですが、その他解決策があればお願いします。

これが良い解決策かどうかはよく考える必要がありますが、
一つの手として以下のようにフォーカスを持たないボタンを作るという手もありますね。

Public Class NoFocusButton
    Inherits Button

    Public Sub New()
        MyBase.New()
        Me.SetStyle(ControlStyles.Selectable, False)
    End Sub
End Class

※これをやるとキーボード操作でこのボタンへフォーカスを移してボタンを押すことはできません。キーボードでの操作性を考えるとフォーカスを奪うという考え方が必ずしも最適なのか?はよく検討する必要があると思います。

[ツリー表示へ]
タイトルRe: フォーカスの削除
記事No7032
投稿日: 2008/02/16(Sat) 10:09
投稿者たろう
y4yama様、よねKEN様、アドバイスありがとうございました。

とりあえず、すべてのbutton_clickの後にフォーカスを「=」buttonへ移動させることで
思い通りの動きとなりました。

他の方法も試すとともに、勉強していきたいと思います。

[ツリー表示へ]