Curl Global Community
画面遷移時の初期フォーカス - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: 画面遷移時の初期フォーカス (/showthread.php?tid=854)



画面遷移時の初期フォーカス - umemura - 02-22-2013

コントロールを配置した画面を、Dialogにいれて、
Dialog.show で表示したときには、デフォルトで一番上のコントロールにフォーカスが入っていると思います。

しかし、replace メソッドで、画面を遷移させたときには、同じような画面でも一番上のコントロールにはフォーカスが入っていません。
どうすれば、Dialog.show で表示したときと同じようにフォーカスを当てた状態にできますか?

業務画面ごとに、初期フォーカスをbecome-active を利用してフォーカスを当てるようなことはしたくないです。
サンプルとは違いますが、現在はSonntag を使っているので、Sonntag で同様の方法があれば教えていただきたいです。


Code:
{curl 8.0 applet}
{curl-file-attributes character-encoding = "utf8"}
{applet manifest = "manifest.mcurl",
    {compiler-directives careful? = true}
}
{def d =
    {Dialog
        {on WindowClose do
            {exit}
        }
    }
}
{define-proc {get-screen}:Frame
    {return
        {Frame
            {VBox
                {TextField },
                {CommandButton
                    {on Action do
                        {d.add replace? = true, {get-screen}}
                    }
                }
            }
        }
    }
}
{do
    {d.add {get-screen}}
    {d.show}
}





RE: 画面遷移時の初期フォーカス - umemura - 02-27-2013

これならいけそうです。

どうしても画面レイアウトを作るときにFrameを使うクセがあるのですが、

画面はDialogで作成する、という前提にしたほうがよさそうな気がしてきました。



Code:
{def d =
    {View
        {on WindowClose do
            {exit}
        }
    }
}
{let cnt:int = 0}
{define-proc {get-screen}:Dialog
    set cnt = cnt + 1
    {return
        {Dialog
            {VBox
                {TextField
                    value = cnt & "番目"
                },
                {CommandButton
                    takes-focus? = false,
                    {on Action do
                        {d.add replace? = true, {get-screen}}
                    }
                }
            },
            ||表示時に左上のコントロールにフォーカスを当てる
            {on AttachEvent at d:Dialog do
                {d.become-active}
            }
        }
    }
}
{do
    {d.add {get-screen}}
    {d.show}
}



RE: 画面遷移時の初期フォーカス - Yuhki - 02-28-2013

Dialogだと、フォントやバックグラウンドなどの初期値が
設定されているので、Frameと同等に扱いたいのであれば
Dialogにおけるフォーカス制御が実装されている親クラスの
StandardActiveTraversalContainerを使ってもいいかも
しれませんね。