お手軽Linux(Ubuntu) GUIアプリ開発　入門

##お手軽Linux(Ubuntu)Guiアプリ開発　入門

**2021/4月追記**
**Rider .net5 でのLinux GUI開発に移行しています**

https://qiita.com/tana_/items/1628c104acb6c937534e

###VisualStudioMacやMonoDevelopだけでWindows Formsを作る感覚でLinux GUIアプリが作れます

利点
ターミナルで開発環境を整えなくてよい。VisualStudioMacが自動で整えてくれます

[VisualStudioMacをダウンロード](https://docs.microsoft.com/ja-jp/visualstudio/mac/installation?view=vsmac-2019)

MonoDevelop(linux版)でもやり方は一緒です。

GTK＃２を選択する
<img width="907" alt="スクリーンショット 2020-03-29 12.52.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/e263ee52-0573-fa8b-db0b-bba05014cba5.png">

ツールボックスを選択
<img width="920" alt="スクリーンショット 2020-03-29 12.53.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/df1c3cac-5363-fdb8-3d3a-db181a8cc790.png">

ツールボックスが表示される　インターフェース　Main Windowを選択
<img width="1372" alt="スクリーンショット 2020-03-29 12.53.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/6aa2ffc5-da20-2e92-5a97-c9a5ee48b77d.png">

FiexedをMain Windowにドラッグします。編集可能領域を作成します
<img width="1242" alt="スクリーンショット 2020-03-29 12.54.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/6998fc47-e6be-f1f2-f494-a51029fce793.png">

ボタンをドラッグします。ボタンを移動させるには白い四角をクリックしドラッグします
<img width="1115" alt="スクリーンショット 2020-03-29 12.54.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/bd1c6923-6368-b0a8-e1d9-a64ba041cabf.png">

プロパティを表示します。
<img width="865" alt="スクリーンショット 2020-03-29 12.54.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/a3869e63-fdc4-db24-1252-53407dcf3357.png">

Clickedの文字の部分をダブルクリックします。クリックイベントメソッドが自動生成します。
<img width="901" alt="スクリーンショット 2020-03-29 12.57.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/fbe6b8ca-c97e-1851-a9d8-413fe35c8ebc.png">

クリックイベントメソッドが自動生成されます。ラベルに文字を入れる処理を加えます
<img width="585" alt="スクリーンショット 2020-03-29 12.58.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/f6dd932e-ad07-3f98-6f1c-02b278455fb3.png">

実行します
<img width="516" alt="スクリーンショット 2020-03-29 13.29.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/1922fa85-1134-c929-428c-8fed76a31d29.png">

ボタンを押すと実行されます
<img width="405" alt="スクリーンショット 2020-03-29 12.59.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/1401680c-866e-335f-a3fb-589ed5923756.png">

ビルドされたプログラムはBinファイルの中に生成されています
<img width="303" alt="スクリーンショット 2020-03-29 13.42.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/49a53f38-dab0-7843-c258-a139adf3f22d.png">

ラズベリーパイで動作させるにはMonoDevelopをインストールします

追記
[GTKSharp](https://www.mono-project.com/download/stable)もインストールする

<img width="1005" alt="スクリーンショット 2020-03-29 13.31.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/59cc652c-8c7c-9847-8b3d-58ab9942f9cd.png">


[MonoDevelop](https://www.monodevelop.com/download/#fndtn-download-lin-raspbian)

MonoDevelopのユーザー設定 ー プロジェクト ー ビルド
エラーが出るので「xbuildの代わりにMSBuildでビルドする」を無効にすること

####感想
VisualStudioのWindowsFormを作成する感覚でお手軽に作成できました。
WindowsのVusualStudioだとGUIデザイナーが組み込まれていないため、GladeやSteticといったGUIデザイナーをダウンロードし、
交互に使わないといけない。クリックなどのイベントも自分で書かないといけない。

Gladeをターミナルでダウンロードしたり、Monoの開発環境を手動で整えなくても、VisualStudioMacが自動で環境を作ってくれます。。
あとはWindows Formsを作る感覚でC#を書くだけで作れます。

[mono stetic](https://www.mono-project.com/archived/stetic/)

###参考
[C# VisualStudio for Mac でGtk#を使ってみた。gtk-sharp ](http://1studying.blogspot.com/2017/04/c-visualstudio-for-mac-gtkgtk-sharp.html)

###次回　開発予定
C#からPythonを実行する   [C#からPythonスクリプトを呼び出す](https://qiita.com/kaysquare1231/items/dfe6064f82c1c23971c6)
Dapperの導入  [Dapperについてまとめてみた](https://sweets-junkie.hatenablog.com/entry/2014/03/07/010004)
Dapper Extensionの導入 [Dapperの拡張ライブラリ 比較検討](https://www.nuits.jp/entry/dapper-extension-libaries)
DataGrideViewとModelのバインディングの実現  [treeView](https://www.mono-project.com/docs/gui/gtksharp/widgets/treeview-tutorial/)
Swaggerを使う Stoplight Studioなどを使う　 [本当に使ってよかったOpenAPI (Swagger) ツール](https://future-architect.github.io/articles/20191008/)
Jetson nanoへのデプロイの仕方
Sqlite3の利用


[お手軽Linux GUIアプリ開発　初級　前編](https://qiita.com/tana_/items/1b6ab825ae27e4173b29)
[お手軽Linux GUIアプリ開発　初級　後編](https://qiita.com/tana_/items/8f6d563fd43289983fa3)
[お手軽Linux GUIアプリ開発　パーツサンプル集] (https://qiita.com/tana_/items/3114b715586a5f83cd8c)