2009-06-13 11 views
2

WindowsフォームまたはWPFの使用ShowDialogを呼び出してダイアログウィンドウを開くことができます。 Gtk#を使ってどうすればいいですか?Gtk#Windowsに対応するForm.Showdialogはありますか?

私はWindowモーダルを作成しようとしましたが、呼び出し元ウィンドウとのやりとりを妨げますが、ShowAll()の後にコードを実行する前にユーザーがダイアログを閉じるのを待っていません。

答えて

10

Gtk.Windowを使用する代わりに、Gtk.Dialogを使用してからdialog.Run()を呼び出します。これは、ユーザがダイアログを閉じるために使用したボタンのIDに対応する整数値を返します。

廃棄()はGTK#でウィジェットはGTK#で)(それを破壊しないINGのこと

Dialog dialog = null; 
ResponseType response = ResponseType.None; 

try { 
    dialog = new Dialog (
     "Dialog Title", 
     parentWindow, 
     DialogFlags.DestroyWithParent | DialogFlags.Modal, 
     "Overwrite file", ResponseType.Yes, 
     "Cancel", ResponseType.No 
    ); 
    dialog.VBox.Add (new Label ("Dialog contents")); 
    dialog.ShowAll(); 

    response = (ResponseType) dialog.Run(); 
} finally { 
    if (dialog != null) 
     dialog.Destroy(); 
} 

if (response == ResponseType.Yes) 
    OverwriteFile(); 

注 - 過去の設計事故、下位互換性のために保存しました。ただし、カスタムダイアログサブクラスを使用する場合は、Disposeをオーバーライドしてダイアログを破棄することもできます。あなたはまた、コンストラクタ内の子ウィジェットとSHOWALL()の呼び出しを追加する場合は、あなたがこのようなよりよいコードを記述することができます。もちろん

ResponseType response = ResponseType.None; 
using (var dlg = new YesNoDialog ("Title", "Question", "Yes Button", "No Button")) 
    response = (ResponseType) dialog.Run(); 

if (response == ResponseType.Yes) 
     OverwriteFile(); 

を、あなたはさらに一歩それを取るとShowDialogのと同等のものを書くことができます。

+0

カスタムダイアログで 'Dispose'をオーバーライドするときには、' destroy.D''を呼び出す必要があります。 –

0

私は、ウィンドウを持たない、より複雑なダイアログを作成しようとしています。スクロールビューにネストされた完了ツリービューの検索ダイアログで、EnterまたはEscapeで閉じられます。ここで

は、私はあなたが一緒に手動でモーダルダイアログの仕組みを入れて理解しました方法は次のとおりです。

  • は、それが完了したか否かを示し、あなたのダイアログのプロパティを定義します。私は鉱山ModalResult、値がNoneOKCancelの列挙型を呼び出しています。

    // assuming Dispose properly written per @mhutch 
    using (window = new MyDialogWindow()) 
    { 
        window.TransientFor = dialogParent; 
        window.Modal = true; 
        window.Show(); 
        while (window.ModalResult == ModalResult.None) 
         Application.RunIteration(true); 
        // now switch on value of modal result 
    } 
    

    注しかしthis Ubuntu bug with overlay scrollbars

  • すると、便利なダイアログの親ウィンドウ(以下dialogParent

サンプル・コードを持っていることを確認します。私はそれらを使用せず、私のアプリは個人的な使用のためですが、YMMVです。