2

フォーカスを受け取ったときにすべてのテキストを自動的に選択する入力コントロールが必要です。コードを実行し、Tab キーを押して 2 つのコントロール間でフォーカスを切り替えると、コントロール内のすべてのテキストが自動的に選択されます。マウスを使用して他のコントロールを選択する場合も、同じ動作が必要です。私の質問は、エントリ コントロールがマウスでクリックされたときに通知される GTK イベントは何ですか?

import Graphics.UI.Gtk

main :: IO ()
main = do
  initGUI

  vbox   <- vBoxNew False 4
  window <- windowNew
  set window [ containerBorderWidth := 8,
               containerChild := vbox ]

  mkEntry "Entry 1" vbox
  mkEntry "Entry 2" vbox

  onDestroy window mainQuit
  widgetShowAll window
  mainGUI


mkEntry :: String -> VBox -> IO Entry
mkEntry txt vbox = do
  entry <- entryNew
  entrySetText entry txt
  boxPackStart vbox entry PackNatural 0
  -- selects all text when tabbing into the control
  entry `on` entryActivate $ do editableSelectRegion entry 0 (-1)
  return entry
4

1 に答える 1

1

主な問題は、クリック自体によってエントリの選択が GTK+ 自体によって変更されることです。私はこれを機能させました

  1. focusInEventトリガーとして使う
  2. すべてが十分に「落ち着いた」後、アイドル状態のコールバックで選択を変更する

まとめる:

-- selects all text when tabbing into the control
on entry focusInEvent $ do
    liftIO $ flip idleAdd priorityDefaultIdle $ do
        editableSelectRegion entry 0 (-1)
        return False
    return True
于 2015-05-07T12:45:50.087 に答える