2 つのウィンドウを作成しようとしていますFileChooserButtons
。最初のものは、ユーザーがディレクトリを選択するのに役立つはずなので、アクション Select_folder を使用しています。2 つ目は、ユーザーがファイルを選択できるようにすることです。
問題は、ユーザーが最初のフォルダーで行った選択に応じて、2 番目のフォルダーを現在のフォルダーに変更したかったことです。
私の最初のアイデアは、次のように Signal.connect を使用することでした。
Signal.connect(chooser1, "selection_changed", folder_changed, null)
ただし、これにより次のコンパイルエラーが発生します。
exercise4_1.gs:62.55-62.68: error: Cannot create delegate without target for instance method or closure
Signal.connect(chooser1, "selection_changed", folder_changed, null)
^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)
また、valaメーリングリストでのこのメール通信に従って (callback)folder_changed を追加しようとしましたが、役に立ちませんでした。
これはコード全体です:
[indent=4]
uses
Gtk
GLib
class TestWindow : Window
chooser1:Gtk.FileChooserButton
chooser2:Gtk.FileChooserButton
construct()
// General characteristics of the window
title = "File chooser"
window_position = WindowPosition.CENTER
destroy.connect(Gtk.main_quit)
chooser1 = new FileChooserButton(
"Choose a Folder",
FileChooserAction.SELECT_FOLDER
)
chooser2 = new FileChooserButton(
"Chooser a Folder",
FileChooserAction.OPEN
)
chooser1.set_current_folder(Environment.get_home_dir())
chooser2.set_current_folder(Environment.get_home_dir())
Signal.connect(chooser1, "selection_changed", folder_changed, null)
var box = new Gtk.Box(Gtk.Orientation.VERTICAL, 0)
box.pack_start(chooser1, true, true,0)
box.pack_start(chooser2, true, true,0)
add(box)
def folder_changed()
var folder = chooser1.get_filename()
chooser2.set_current_folder(folder)
init
Gtk.init (ref args)
var test = new TestWindow ()
test.show_all ()
Gtk.main ()
確かに、この特定の構文についての私の理解不足ですが、行き詰まっているので、そこから抜け出すためのポインタをいただければ幸いです。
余分な、あまり重要ではない点として、ベスト プラクティスは何ですか: 長い行を分割してインデントするか、コード内でそれらを許可するか?