スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門 Windowsアプリケーション編 その1 フォーム

このシリーズではWindowsアプリケーションの作成方法を紹介していきます。

まずは新規プロジェクトでF# Applicationを選択します。名前は例えばWindowForTestとでもしておきます。
次にSolution ExplorerのReferences(参照)を右クリックして、Add Reference(参照の追加)を選択します。.NETタブを選択しSystem.Windows.FormsとSystem.Drawingを選択(Ctrlで複数選択できます。)して、OKを押します。これで参照の準備は終了です。
(System.Winows.Formsは必須ですがSystem.Drawingは必要ない場合もあります。)
次に選択するのは、フォームを直接表示するのか、それともコンソール経由で表示するのかです。

まずは直接表示の場合を取り上げます。
Solution Explorerでプロジェクト名を右クリックして、プロパティを選択します。
ApplicationタブのOutput TypeでWindows Applicationを選択します。
ソースコードを次のようにします。
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form() //#0
 
[<STAThread>]//#1
do
    Application.Run(mainForm) // #2
 
ctrl+F5でウィンドウが表示されます。
(#1の部分はWindows Formは内部でCOMを呼んでいる場所があることより必要となります。)
#0で引き数なしのコンストラクタでフォームオブジェクトを作成して#2の部分でRunするだけです。
あとは、#0の部分のフォームに部品を色々貼り付けて、それらの挙動をコーディングしていくことになります。
 
次はコンソール経由でのウインドウの表示です。
Solution Explorerでプロジェクト名を右クリックして、プロパティを選択します。
ApplicationタブのOutput TypeでConsole Applicationを選択します。
コードを次のようにします。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form() //#1
mainForm.Show() |> ignore
 
ctrl+F5でウィンドウが表示されます。
 
コンソール経由だと、F# Interactiveを使用することができ、こまめに結果を確認することができるので、この後はこちらを使って説明を進めていきたいと思います。
 
まずはメインフォームの大きさタイトルと設定してみます。
#1以下の部分を次のように変更します。
let mainForm = new Form(Width = 620, Height = 450, Text = "MyFirst Window")
mainForm.Show() |> ignore
 
ctrl+F5かこの部分をF#Interactiveに食わせることにより、ウィンドウが表示されます。
 
let mainForm = new Form(Width = 620, Height = 450, Text = "MyFirst Window")の部分はoptional property settingsを利用しています。
 
ソースコード部分で、mainForm. と打つと、次の候補の一覧が表示されます。
手が紙切れみたいなのを持っているアイコンが付いているのがプロパティ、雷マークがイベント、ピンク色の箱が飛びだしている?のがメソッドです。

800-1.jpg 


ここではTextを選択してフォームのタイトルを変更してみます。
(イベント関係のことは次回紹介します。)
 
 mainForm.Text <- "New Title";;
 
としてこの部分をF#Interactiveに食わせます。
 
タイトルが変更されたことと思います。
同様にして大きさを変更してみます。
 
> mainForm.Width <- 310;;
val it : unit = ()
 
なお >mainForm;;でプロパティ情報をみることができます。
 
> mainForm;;
val it : Form =
  System.Windows.Forms.Form, Text: 
    {AcceptButton = null;
     AccessibilityObject = ?;
     AccessibleDefaultActionDescription = null;
     AccessibleDescription = null;
     AccessibleName = null;
     AccessibleRole = Default;
     ActiveControl = null;
     ActiveMdiChild = null;
     AllowDrop = false;
     AllowTransparency = false;
     Anchor = Top, Left;
     AutoScale = false;
     AutoScaleBaseSize = {Width=5, Height=12};
     AutoScaleDimensions = {Width=0, Height=0};
     AutoScaleMode = Inherit;
     AutoScroll = false;
     AutoScrollMargin = {Width=0, Height=0};
     AutoScrollMinSize = {Width=0, Height=0};
     AutoScrollOffset = {X=0,Y=0};
     AutoScrollPosition = {X=0,Y=0};
     AutoSize = false;
     AutoSizeMode = GrowOnly;
     AutoValidate = EnablePreventFocusChange;
     BackColor = Color [Control];
     BackgroundImage = null;
     BackgroundImageLayout = Tile;
     BindingContext = seq [];
     Bottom = 666;
     Bounds = {X=207,Y=216,Width=620,Height=450};
     CanFocus = false;
     CanSelect = false;
     CancelButton = null;
     Capture = false;
     CausesValidation = true;
     ClientRectangle = {X=0,Y=0,Width=604,Height=413};
     ClientSize = {Width=604, Height=413};
     CompanyName = "Microsoft Corporation";
     Container = null;
     ContainsFocus = false;
     ContextMenu = null;
     ContextMenuStrip = null;
     ControlBox = true;
     Controls = seq [];
     Created = false;
     CurrentAutoScaleDimensions = {Width=0, Height=0};
     Cursor = [Cursor: Default];
     DataBindings = seq [];
     DesktopBounds = {X=207,Y=216,Width=620,Height=450};
     DesktopLocation = {X=207,Y=216};
     DialogResult = None;
     DisplayRectangle = {X=0,Y=0,Width=604,Height=413};
     Disposing = false;
     Dock = None;
     DockPadding = ;
     Enabled = true;
     Focused = false;
     Font = [Font: Name=MS UI Gothic, Size=9, Units=3, GdiCharSet=128, GdiVerticalFont=False];
     ForeColor = Color [ControlText];
     FormBorderStyle = Sizable;
     Handle = ?;
     HasChildren = false;
     Height = 450;
     HelpButton = false;
     HorizontalScroll = System.Windows.Forms.HScrollProperties;
     Icon = (Icon);
     ImeMode = NoControl;
     InvokeRequired = false;
     IsAccessible = false;
     IsDisposed = true;
     IsHandleCreated = false;
     IsMdiChild = false;
     IsMdiContainer = false;
     IsMirrored = false;
     IsRestrictedWindow = false;
     KeyPreview = false;
     LayoutEngine = System.Windows.Forms.Layout.DefaultLayout;
     Left = 207;
     Location = {X=207,Y=216};
     MainMenuStrip = null;
     Margin = {Left=3,Top=3,Right=3,Bottom=3};
     MaximizeBox = true;
     MaximumSize = {Width=0, Height=0};
     MdiChildren = [||];
     MdiParent = null;
     Menu = null;
     MergedMenu = null;
     MinimizeBox = true;
     MinimumSize = {Width=0, Height=0};
     Modal = false;
     Name = "";
     Opacity = 1.0;
     OwnedForms = [||];
     Owner = null;
     Padding = {Left=0,Top=0,Right=0,Bottom=0};
     Parent = null;
     ParentForm = null;
     PreferredSize = {Width=0, Height=0};
     ProductName = "MicrosoftR .NET Framework";
     ProductVersion = "4.0.30128.1";
     RecreatingHandle = false;
     Region = null;
     RestoreBounds = {X=-1,Y=-1,Width=620,Height=450};
     Right = 827;
     RightToLeft = No;
     RightToLeftLayout = false;
     ShowIcon = true;
     ShowInTaskbar = true;
     Site = null;
     Size = {Width=620, Height=450};
     SizeGripStyle = Auto;
     StartPosition = WindowsDefaultLocation;
     TabIndex = 0;
     TabStop = true;
     Tag = null;
     Text = "";
     Top = 216;
     TopLevel = true;
     TopLevelControl = ...;
     TopMost = false;
     TransparencyKey = Color [Empty];
     UseWaitCursor = false;
     VerticalScroll = System.Windows.Forms.VScrollProperties;
     Visible = false;
     Width = 620;
     WindowState = Normal;
     WindowTarget = System.Windows.Forms.Control+ControlNativeWindow;}

 
なお次のような点に留意しておいてください
    ClientSize は {Width=604, Height=413} でありSize は {Width=620, Height=450}であり異なること。
    Controlsにボタンなどの部品(Control)を登録できること
 
なおフォームのデザインは、「C#などのプロジェクトとして、フォームデザイナを使いDLLを作り、それをF#側から利用する方法」やそれの逆で「F#側でデザイン部分以外のDLLを作りC#から利用する方法」や「Nobushisaさんが作られた、C# => F# GUI Converterを利用する方法」等がありますが、これらの紹介は後日するとして、まずは基本である「F#のコードだけですます方法」を紹介していきたいと思います。
    
次回から、ウィンドウに部品をのっけていきます。

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。