###Gtk3アプリ イベントハンドラー編
####コード上でイベントハンドラーを書くパターン
従来通りイベントハンドラーとコールバック関数を書くやり方
Riderのエディタの場合関数のコードヒントが効きます。
namespace event2GtkApplication
{
class MainWindow : Window
{
[UI] private Button _button1 = null;
public MainWindow() : this(new Builder("MainWindow.glade")) { }
private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow"))
{
builder.Autoconnect(this);
_button1.Clicked += Button1_Clicked;
}
private void Button1_Clicked(object sender, EventArgs a)
{
Console.WriteLine(e);
}
}
}
####課題
すべてのコントロールにイベントハンドラーとコールバック関数を書かないといけない。
コールバック関数の引数がわからないことがある。
Windows版のVisalStudioはボタンを押すとイベントハンドラーとコールバック関数を自動生成してくれて便利な機能があった
####Gladeにコールバック関数名を書くやり方
Gladeにコールバック関数名を書きコードにコールバック関数を書きます。
イベントハンドラーはAutoConnectで裏で処理してくれてる
using System;
using Gtk;
using UI = Gtk.Builder.ObjectAttribute;
namespace EventGtkApplication
{
partial class MainWindow : Window
{
[UI] private Button btn2 = null;
public MainWindow() : this(new Builder("MainWindow.glade"))
{
}
private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow"))
{
builder.Autoconnect(this);
}
public void on_btn2_clicked(Object sender,EventArgs e)
{
Console.WriteLine("" + sender);
Console.WriteLine("" + e);
}
}
}
######イベントーハンドラーの記入は不要
btn2.Clicked += on_btn2_clicked;
#####以下の状態だとビルドができない
- Glade上にコールバック関数名を記入。コード上にコールバック関数がない
- Glade上にコールバック関数名を記入。コード上のコールバック関数の名前が一致しない
#####以下の状態だとビルドができる
- Glade上に2つのボタンに同じコールバック関数を名記入。コード上のコールバック関数が同じ(非推奨)
####課題
コールバック関数も自動生成したい。
Windows VisualStudioやMonoDevelopでは自動生成があり便利だった。
GTK3はリリースしてから10年以上経つ。流石に自動生成するオープンソースがあるはず
####Gladeからコールバック関数を自動生成するものを探す
gitに上がっているGladeToCppが理想に違いが自動生成されるコードはC++であり対象外
あとはpythonでpythonのGTKを生成するものが少々
glade gtk python generatorで検索するとヒットします。
C#を書き出してくるものがあまり見当たらない