データバインドは難しそうなので一旦放置。
対象環境
- 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で表示される
