0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Gtk3アプリ イベントハンドラー編

Last updated at Posted at 2021-05-07

###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で裏で処理してくれてる

スクリーンショット 2020-03-29 12.53.22.png
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#を書き出してくるものがあまり見当たらない

Gtk3アプリ イベントハンドラー生成ツールの作成へ続く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?