データバインドは難しそうなので一旦放置。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch(9.0) 2018-06-27
- Mono 5.16.0
- MonoDevelop 7.6 build 711
- Eto.Forms 2.4.1 拡張機能, NuGetパッケージ
前回
- http://ytyaru.hatenablog.com/entry/2020/01/27/000000
- http://ytyaru.hatenablog.com/entry/2020/01/26/000000
- http://ytyaru.hatenablog.com/entry/2020/01/25/000000
- http://ytyaru.hatenablog.com/entry/2020/01/24/000000
手順
- プロジェクト作成
- TextBox追加
- 実行
1. プロジェクト作成
- メニュー→
ファイル
→新しいソリューション
マルチプラットフォーム
→アプリ
→Eto Application
- 名前などを適当に入力し、
Xaml
を選択する
場所
を入力する
- プロジェクトが作成される
2. TextBox追加
- Xamlファイルを開く(MainForm.xeto)
<TextBox x:Name="textBox1" Text="https://www.google.co.jp" Width="800" KeyDown="HandleInputUrl" />
を追記する- csファイルを開く(MainForm.xeto.cs)
HandleInputUrl
メソッドを追加する
ソースコード抜粋
MainForm.xeto
属性=値
の形式で、イベント名KeyDown
とそのハンドラとする任意のメソッド名を書く。ここではハンドラ名をHandleInputUrl
とする。
<?xml version="1.0" encoding="UTF-8"?> <Form xmlns="http://schema.picoe.ca/eto.forms" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My Eto Form" ClientSize="800, 600" Padding="10"> <StackLayout> <TextBox x:Name="textBox1" Text="https://www.google.co.jp" Width="800" KeyDown="HandleInputUrl" /> </StackLayout> <Form.Menu> <MenuBar> <ButtonMenuItem Text="F&ile"> <ButtonMenuItem Text="Click Me!" Click="HandleClickMe" DataContextChanged="ChangedTextBox" /> </ButtonMenuItem> <MenuBar.ApplicationItems> <ButtonMenuItem Text="Preferences.." Shortcut="{On Control+O, Mac=Application+Comma}" /> </MenuBar.ApplicationItems> <MenuBar.QuitItem> <ButtonMenuItem Text="Quit" Shortcut="CommonModifier+Q" Click="HandleQuit" /> </MenuBar.QuitItem> <MenuBar.AboutItem> <ButtonMenuItem Text="About..." Click="HandleAbout" /> </MenuBar.AboutItem> </MenuBar> </Form.Menu> <Form.ToolBar> <ToolBar> <ButtonToolItem Text="Click Me!" Click="HandleClickMe" /> </ToolBar> </Form.ToolBar> </Form>
MainForm.xeto.cs
XAMLで追加したHandleInputUrl
メソッドを実装する。
using System; using System.Collections.Generic; using Eto.Forms; using Eto.Drawing; using Eto.Serialization.Xaml; namespace HelloEtoXamlWebView { public class MainForm : Form { ... protected void HandleInputUrl(object sender, EventArgs e) { if ((e as KeyEventArgs).Key == Keys.Enter) { MessageBox.Show("InputUrl: " + (sender as TextBox).Text); } } } }
引数はUI要素やイベントによって変わるので、その都度キャストせねばならない。
いつの間にか(変数 as 型)
という構文でキャストできるようになったらしい。私が知ってた記法はint a = (int)v
。asのほうが高速らしい。
3. 実行
- Ctrl+F5で実行
- 怒られた
- ファイルパスを辿ってexeファイルを直接叩くと実行できた
- テキストボックス内でEnterキーを押す
- 入力された内容がMessageBoxで表示される