Window
ボタンをクリックしてコード内のGtk# を閉じようとしています。つまり、X
ボタンはタイトル バーのボタンと同じ効果を持つ必要があります。
ただし、ウィンドウは閉じますが、タイトル バーのボタンDeleteEvent
をクリックするのではなく、自分のボタンをクリックしても は起動しません。X
これは最小限のサンプル コードです。
using System;
using Gtk;
namespace GtkSharpTest
{
class Program
{
[STAThread]
public static void Main(string[] args)
{
Application.Init();
using (Window win = new Window("Test")) {
win.SetSizeRequest(300, 200);
win.Hidden += delegate(object sender, EventArgs e) {
Application.Quit();
};
win.DeleteEvent += delegate(object o, DeleteEventArgs e) {
using (MessageDialog dlg = new MessageDialog(win,
DialogFlags.Modal,
MessageType.Question,
ButtonsType.YesNo,
"Really close?")) {
ResponseType result = (ResponseType)dlg.Run();
dlg.Destroy();
if (result == ResponseType.No) {
e.RetVal = true;
}
}
};
Button bClose = Button.NewWithLabel("Close");
bClose.Clicked += delegate(object sender, EventArgs e) {
// ???
};
win.Add(bClose);
win.ShowAll();
Application.Run();
}
}
}
}
私が探している行は でマークされてい// ???
ます。
私はそこでさまざまな呼び出しを試みました:
win.Hide();
win.HideAll();
win.Destroy();
Hide
との両方が、このフォーラムで Gtk ウィンドウを閉じるためDestroy
に提案されました。この SO 投稿で選択された回答も示唆しており、そのメソッドを呼び出すときにイベントが発生するとさえ主張しています。ただし、その主張を再現することはできません。前述のすべてのメソッドはウィンドウを非表示にするだけですが、タイトルバーボタンでウィンドウを閉じた場合にのみ発生します。Destroy
delete
DeleteEvent
X
言い換えれば、Windows フォーム/WPFClose()
メソッドに相当する Gtk# を探していると言えます。これらを呼び出すと、X
タイトル バー ボタンのクリックが正確にシミュレートされます。それぞれのClosing
イベントが発生し、フォーム/ウィンドウが閉じられないようにする可能性がまだあるからです。