スポンサーサイト

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

F#入門 Windowsアプリケーション編 DateTimePicker MonthCalendar

DateTimePickerは日時入力用の部品です。
 
それではいつも通り部品をのっけるWindows Formを準備しておきます。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form(Width = 460, Height = 150, Text = "MyComboBox Window")
mainForm.Show() |> ignore
 
ComboBoxのインスタンスを一個作成してフォームにのっけてみます。
 
let myDateTimePicker = new DateTimePicker(Location = new Point(10,10),Width =360)
mainForm.Controls.Add (myDateTimePicker) 
 
820-1.jpg 
 
値を所得してみます。(インスタンス化されたときの時刻DateTime.Nowが値となります。)
 
> myDateTimePicker.Value;;
val it : DateTime = 2010/06/29 8:49:31 {Date = 2010/06/29 0:00:00;
                                        Day = 29;
                                        DayOfWeek = Tuesday;
                                        DayOfYear = 180;
                                        Hour = 8;
                                        Kind = Unspecified;
                                        Millisecond = 0;
                                        Minute = 49;
                                        Month = 6;
                                        Second = 31;
                                        Ticks = 634133981710000000L;
                                        TimeOfDay = 08:49:31;
                                        Year = 2010;}
 
このようにDateTime型の値となります。
値を設定してみます。
 
> myDateTimePicker.Value<- new DateTime(2010,7,8,10,11,30);;
val it : unit = ()
これで表示されている日付も変わりました。(時刻まではこのままでは表示されませんし、このコンストラクタを使用した場合は秒以下は0となります。)
 
なおDateTimeのコンストラクタは12個のオーバーロードを持ちます。
 
フォーム側から日付部分は入力することも、選択することもできます。
 
(入力)
820-2.jpg 
 
(選択)
820-3.jpg 
 
なお時刻も表示するなどの、自分好みの形式で表示するには、FormatプロパティをCustomuに設定し、CustomFormatプロパティに書式を設定します。
 
>myDateTimePicker.Format <- DateTimePickerFormat.Custom
myDateTimePicker.CustomFormat <- "yyyy 年で MM 月で dd 日の HH 時 だよ。";; 
 
820-4.jpg 
 
 
書式指定文字列 は次のようになっています。
 
d          1 桁または 2 桁の日付。 
 
dd          2 桁の日付。日付値が 1 桁の場合、前に 0 が付きます。 
 
ddd      3 文字の曜日の省略形。 
 
dddd      完全な曜日名。 
 
h          12 時間形式で表される 1 桁または 2 桁の時間。 
 
hh          12 時間形式で表される 2 桁の時間。値が 1 桁の場合、前に 0 が付きます。 
 
H          24 時間形式で表される 1 桁または 2 桁の時間。 
 
HH         24 時間形式で表される 2 桁の時間。値が 1 桁の場合、前に 0 が付きます。 
 
m          1 桁または 2 桁の分。 
 
mm          2 桁の分。値が 1 桁の場合、前に 0 が付きます。 
 
M          数字で表示する 1 桁または 2 桁の月。 
 
MM          数字で表示する 2 桁の月。値が 1 桁の場合、前に 0 が付きます。 
 
MMM      3 文字の月の省略形。 
 
MMMM      完全な月の名前。 
 
s          1 桁または 2 桁の秒。 
 
ss          2 桁の秒。値が 1 桁の場合、前に 0 が付きます。 
 
t          1 文字の A.M./P.M. の省略形 ("A.M." の場合は "A")。 
 
tt          2 文字の A.M./P.M. の省略形 ("A.M." の場合は "AM")。 
 
y          1 桁の年 (2001 年の場合は "1")。 
 
yy          年の最後の 2 桁 (2001 の場合は "01")。 
 
yyyy      完全な年 (2001 の場合は "2001")。 
 
 
 
なお、ドロップダウンして日付を選択する部分は独立した部品として、MonthCalendarという名前でコンポーネントとして利用できます。
 
>let myMonthCalendar = new MonthCalendar(Location = new Point(10,80))
mainForm.Controls.Add(myMonthCalendar);; 
 
820-5.jpg  
スポンサーサイト

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

F#入門 Windowsアプリケーション編 Tree View(3)

Tree Viewはツリー構造(二分木やrose tree)を視覚的に表現するのにもってこいなので、今回は二分木を試しにTree Viewで視覚化してみます。
 
今回使用する簡単なASTはこちらで定義したものです。
 
まずは準備です。
 
> open System
open System.Windows.Forms
open System.Drawing
 
 
type Ast0 = 
    |Val of int 
    |Multi of Ast0 * Ast0 
    |Plus of Ast0 * Ast0 
    |Minus of Ast0 * Ast0 
 
let mainForm = new Form(ClientSize = new Size(500,350), Text = "MyAutoComplete Window")
mainForm.Show() |> ignore
 
let myTreeView = new TreeView(Width = 280,Height = 280,Location = new Point(10,10))
mainForm.Controls.Add (myTreeView)
 
let ExpressAst0InTreeView (in_t:Ast0) =
    let rec subEAITV t (node : TreeNode) =
        match t with
        | Val v ->
            node.Nodes.Add(new TreeNode(Text =v.ToString(),Tag = t)) |> ignore
        | Multi (l,r) ->
            let newNode = new TreeNode(Text ="*",Tag = t)
            node.Nodes.Add(newNode) |> ignore
            subEAITV l newNode
            subEAITV r newNode
        | Plus (l,r) ->
            let newNode = new TreeNode(Text ="+",Tag = t)
            node.Nodes.Add(newNode) |> ignore
            subEAITV l newNode
            subEAITV r newNode
        | Minus (l,r) ->
            let newNode = new TreeNode(Text ="-",Tag = t)
            node.Nodes.Add(newNode) |> ignore
            subEAITV l newNode
            subEAITV r newNode
    let root = new TreeNode(Text = "Root",Tag = in_t)
    subEAITV in_t root
    root ;;
 
type Ast0 =
  | Val of int
  | Multi of Ast0 * Ast0
  | Plus of Ast0 * Ast0
  | Minus of Ast0 * Ast0
val mainForm : Form = System.Windows.Forms.Form, Text: MyAutoComplete Window
val myTreeView : TreeView = System.Windows.Forms.TreeView, Nodes.Count: 0
val ExpressAst0InTreeView : Ast0 -> TreeNode
 
この状態で空のTreeViewが表示されます。
 
それではいくつかASTの例を定義しておきます。
 
> let ex1 = Plus(Val(1),Val(2)) 
let ex2 = Minus(Val(3),Val(5))
let ex3 = Multi(ex1,ex2)
let ex4 = Plus(Minus(Val(7),Val(1)),ex3);;
 
val ex1 : Ast0 = Plus (Val 1,Val 2)
val ex2 : Ast0 = Minus (Val 3,Val 5)
val ex3 : Ast0 = Multi (Plus (Val 1,Val 2),Minus (Val 3,Val 5))
val ex4 : Ast0 =
  Plus (Minus (Val 7,Val 1),Multi (Plus (Val 1,Val 2),Minus (Val 3,Val 5)))
 
まずは
ex1を表示してみます。
 
> myTreeView.Nodes.Add(ExpressAst0InTreeView ex1) |> ignore
myTreeView.ExpandAll();; 
 
824-1.jpg 
 
次にex2を表示してみます。
 
> myTreeView.Nodes.Clear()
myTreeView.Nodes.Add(ExpressAst0InTreeView ex2) |> ignore
myTreeView.ExpandAll();; 
 
824-2.jpg 
 
次にex3を表示してみます。
 
> myTreeView.Nodes.Clear()
myTreeView.Nodes.Add(ExpressAst0InTreeView ex3) |> ignore
myTreeView.ExpandAll();; 
 
824-3.jpg 
 
次にex4を表示してみます。
 
> myTreeView.Nodes.Clear()
myTreeView.Nodes.Add(ExpressAst0InTreeView ex4) |> ignore
myTreeView.ExpandAll();; 
 
824-4.jpg 
 
次にテキストボックスを追加して、ノードをクリックするとそのノード以下の部分木を計算した値を表示するようにしてみます。
 
まずはAST0を評価して値を計算するeValの定義です。
 
> let rec eVal exp  = 
    match exp with 
    |Val(v)  
        -> v 
    |Multi(right,left)  
        -> (eVal right) * (eVal left) 
    |Plus (right,left) 
        -> (eVal right) + (eVal left) 
    |Minus (right,left) 
        -> (eVal right) - (eVal left);;
 
val eVal : Ast0 -> int
 
テキストボックスを追加し、ツリーノードがクリックされたときに、そのノードのタグをAst0にキャストして、eValで計算し、テキストボックスに表示するようにします。
 
> let myTextBox = new TextBox(Text = "0",Size = new Size(30,15),
                            Location = new Point(310,100))
 
myTreeView.NodeMouseClick.Add(fun e -> let calcV = eVal (e.Node.Tag :?> Ast0) 
                                                                               myTextBox.Text <- calcV.ToString()) 
mainForm.Controls.Add(myTextBox);;
 
val myTextBox : TextBox = System.Windows.Forms.TextBox, Text: 0
 
(実行例) 
 
824-5.jpg 

824-6.jpg 

824-7.jpg

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

F#入門 Windowsアプリケーション編 Tree View(2)

今回はTree Viewの紹介の続きで、下のようなアプリを作って、プロパティを調べてみます。
 
左側にTree Viewが表示されており、ここでノードを選択すると、右にそのノードのプロパティが表示されるというものです。 
 
823-1.jpg 

823-2.jpg 
823-3.jpg 
823-4.jpg 
823-5.jpg 
823-6.jpg 
 
実行例から分かるようにそれぞれのプロパティは次のことを表します。
 
○FullPath    一番の親ルートからのパス
 
○Level        階層の深さ (一番の親がLevel 0)
 
○Index        兄弟ノード内でのインデックス(0から始まる)
 
○PrevNode    兄弟ノードですぐ前にあるノード
 
○NextNode    兄弟ノードですぐ後にあるノード
 
○FirstNode    子ノード内で最初のもの
 
○LastNode    子ノード内で最後のもの
 
○Parent    親ノード
 
ではソースを載せておきます。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form(ClientSize = new Size(700,300), Text = "MyTreeView Window")
mainForm.Show() |> ignore
 
//TreeViewの生成と配置
let myTreeView = new TreeView(Width = 280,Height = 280,Location = new Point(10,10))
mainForm.Controls.Add (myTreeView)
 
//ラベルの配置
["FullPath";"Level";"Index";"PrevNode";"NextNode";"FirstNode";"LastNode";"Parent"]
 |> List.map (fun x -> new Label(Text = x,AutoSize = true))
 |> List.mapi (fun i lb -> lb.Location <- new Point(300,15+30*i);lb)
 |> List.iter (fun lb -> mainForm.Controls.Add (lb) |> ignore)
//テキストボックスの生成
let tbs = 
   [for i in [1 .. 8] -> new TextBox(Width = 290,Height = 19)]
    |> List.mapi (fun i tb -> tb.Location <- new Point(400,15+30*i);tb)
//テキストボックスの束縛、配置(warningがでるけど無視)
let fPTB :: lTB :: iTB :: pNTB :: nNTB :: fNTB :: lNTB ::pTB :: _ = tbs
//テキストボックスの配置
tbs 
 |> List.iter (fun lb -> mainForm.Controls.Add (lb) |> ignore) 
 
//ノードに対してプロパティの一覧を表示する
let dispInfo (nd : TreeNode) =
    tbs 
      |> List.iter (fun tb -> tb.Text <- "") //クリアする
 
    fPTB.Text <- nd.FullPath
    lTB.Text  <- nd.Level.ToString()
    iTB.Text  <- nd.Index.ToString()
    if nd.PrevNode <> null then
        pNTB.Text <- nd.PrevNode.ToString()
    if nd.NextNode <> null then
        nNTB.Text <- nd.NextNode.ToString()
    if nd.FirstNode <> null then
        fNTB.Text <- nd.FirstNode.ToString()
    if nd.LastNode <> null then
        lNTB.Text <- nd.LastNode.ToString()
    if nd.Parent <> null then
        pTB.Text <- nd.Parent.ToString()
        
 
myTreeView.AfterSelect.Add(fun e ->  dispInfo (e.Node)) 
 
let rootNode = new TreeNode(Text = "Root Node")
myTreeView.Nodes.Add (rootNode) |> ignore
 
let rootChildNode1 = new TreeNode(Text = "Root child1")
let rootChildNode2 = new TreeNode(Text = "Root child2")
let rootChildNode3 = new TreeNode(Text = "Root child3")
 
rootNode.Nodes.Add ( rootChildNode1) |> ignore
rootNode.Nodes.Add ( rootChildNode2) |> ignore
rootNode.Nodes.Add ( rootChildNode3) |> ignore
 
let rootChild2ChildNode1 = new TreeNode(Text = "Root child2 child1")
let rootChild2ChildNode2 = new TreeNode(Text = "Root child2 child2")
 
rootChildNode2.Nodes.Add( rootChild2ChildNode1) |> ignore
rootChildNode2.Nodes.Add( rootChild2ChildNode2) |> ignore
 

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

F#入門 Windowsアプリケーション編 Tree View(1)

今回はTree Viewの紹介です。
それではいつも通り部品をのっけるWindows Formを準備しておきます。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form(ClientSize = new Size(300,200), Text = "MyComboBox Window")
mainForm.Show() |> ignore
 
Tree Viewのインスタンスを一個作成してフォームにのっけてみます。
 
let myTreeView = new TreeView(Width = 280,Height = 180,Location = new Point(10,10))
mainForm.Controls.Add (myTreeView) 
 
822-1.jpg 
 
プロパティを調べてみます。
 
> myTreeView;;
val it : TreeView =
  System.Windows.Forms.TreeView, Nodes.Count: 0
    {前略
     CheckBoxes = false; // trueにすると、中に表示される項目すべてにチェックボックスがつきます。
     中略
     HideSelection = true; //フォーカスが外に移ったときに選択していたものが、分からないようになります。
     中略
     Nodes = seq [];
     中略
     Scrollable = true; //スクロール可能とするか?
          中略
     TopNode = null;
     後略;}
 
一番大事なのはNodesプロパティでここに、表示する部品(TreeNodeクラスのインスタンス)を登録します。
TreeViewでの一番上の階層を追加することになります。
 
では中身を追加していきます。
 
> let rootNode = new TreeNode(Text = "Root Node")
myTreeView.Nodes.Add (rootNode) |> ignore;;
 
val rootNode : TreeNode = TreeNode: Root Node
 
これで、フォームは下のようになり、 
 
822-2.jpg  
 
 
> myTreeView;;とすると
    前略
    Nodes = seq [TreeNode: Root Node];
    中略
    TopNode = TreeNode: Root Node;
    後略
    
となります。
 
同様に一つ付け加えてみます。
 
> let rootNode2 = new TreeNode(Text = "Root Node2")
myTreeView.Nodes.Add (rootNode2) |> ignore;;
 
val rootNode2 : TreeNode = TreeNode: Root Node2> let rootNode2 = new TreeNode(Text = "Root Node2")
myTreeView.Nodes.Add (rootNode2) |> ignore;;
 
val rootNode2 : TreeNode = TreeNode: Root Node2
 
すると以下のようになり、 
 
822-3.jpg  
> myTreeView;;とすると
    前略
     Nodes = seq [TreeNode: Root Node; TreeNode: Root Node2]; //2つに増えている
    中略
    TopNode = TreeNode: Root Node; //先ほどのまま。Nodesの最初の要素。
    後略
    
となります。
 
通常一番上の階層は「rootという名前をつけて、一つだけ」という場合が多いので、あとから付け加えたノードを取り除いておきます。
 
> myTreeView.Nodes.Remove(rootNode2);;
val it : unit = ()
 
それでは、RootNodeにさらにノードを付け加えて、tree構造を作っていきます。
 
>let rootChildNode1 = new TreeNode(Text = "Root child1")
let rootChildNode2 = new TreeNode(Text = "Root child2")
let rootChildNode3 = new TreeNode(Text = "Root child3")
 
rootNode.Nodes.Add ( rootChildNode1) |> ignore
rootNode.Nodes.Add ( rootChildNode2) |> ignore
rootNode.Nodes.Add ( rootChildNode3) |> ignore;;
 
これでrootNodeに3個の子ノードがつけ加わりました。 
 
822-4.jpg  

先ほどと変化してないようにも、見えますがRoot Nodeの文字の横に+マークが出現しています。
これをクリックすると、3つの子ノードが出てきます。このように隠れている子ノードを、見える状態にすることを「展開する(expand)」といい、逆を「折りたたむ(Collapse)」といいます。
(collapseは「つぶれる, 崩壊する」という意味です)
 
プログラム上から展開するには次のようにします。
> rootNode.Expand();;
val it : unit = () 
 
822-5.jpg 
 
逆に折りたたむには次のようにします。
 
> rootNode.Collapse();;
val it : unit = ()
 
さらにノードを2個作り、これを上から2番目のノードの子ノードとして登録します。
 
>let rootChild2ChildNode1 = new TreeNode(Text = "Root child2 child1")
let rootChild2ChildNode2 = new TreeNode(Text = "Root child2 child2")
 
rootChildNode2.Nodes.Add( rootChild2ChildNode1) |> ignore
rootChildNode2.Nodes.Add( rootChild2ChildNode2) |> ignore;;
 
ExpandAllメソッドを使うと、あるノード以下のノードがすべて展開します。
 
> rootNode.ExpandAll();; 
 
822-6.jpg 
 
 
それでは、rootの2番目の子ノードである rootChildNode2のプロパティを調べてみます。
 
> rootChildNode2;;
val it : TreeNode =
  TreeNode: Root child2
     前略
     FirstNode = TreeNode: Root child2 child1; //Nodesコレクション内の最初の子ノード
     中略
     FullPath = "Root Node\Root child2";//ルート ツリー ノードから現在のツリー ノードまでのパス。
     //連結文字はTreeView コントロールの PathSeparator プロパティに指定されている値が使われる
     
     中略
     IsExpanded = true;
     IsSelected = false;
     中略
     IsVisible = true;
     LastNode = TreeNode: Root child2 child2;//Nodesコレクション内の最後の子TreeNode
     Level = 1;//階層の深さ,ルートは深さ0
     Name = "";
     NextNode = TreeNode: Root child3; //次回解説
     NextVisibleNode = TreeNode: Root child2 child1;
     中略
     Nodes = seq [TreeNode: Root child2 child1; TreeNode: Root child2 child2];
     Parent = TreeNode: Root Node;//親ノード
     PrevNode = TreeNode: Root child1; //次回解説
     PrevVisibleNode = TreeNode: Root child1;
     中略
     Tag = null;
     Text = "Root child2";
     中略
     TreeView = System.Windows.Forms.TreeView, Nodes.Count: 1, Nodes[0]: TreeNode: Root Node;}
 

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

F#入門 Windowsアプリケーション編 ComboBox(2) オートコンプリート

今回はComboBoxの続きです。
ComboBox表示スタイルとして4種類が用意されているので、これを順番に見ていきます。
それではいつも通り部品をのっけるWindows Formを準備しておきます。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form(Width = 460, Height = 150, Text = "MyComboBox Window")
mainForm.Show() |> ignore
 
ComboBoxのインスタンスを一個作成して項目を追加したのち、フォームに乗っけます。
 
let myComboBox01 = new ComboBox(Location = new Point(10,10))
List.iter (fun t -> myComboBox01.Items.Add(t) |> ignore) [1;3;5;7;9;11;13;15]
mainForm.Controls.Add(myComboBox01) 
 
819-1.jpg 
 
これがデフォルトのDropDownスタイルでDropDownStyleプロパティがDropDownとなっており、入力も選択もできるスタイルです。
 
次にスタイルを変更してみます。
 
myComboBox01.DropDownStyle <- ComboBoxStyle.DropDownList 
 
819-2.jpg  
 
このDropDownListスタイルでは、テキストが入力できなくなり、選択のみ可能となります。
 
さらに別のスタイルに変更してみます。
 
myComboBox01.DropDownStyle <- ComboBoxStyle.Simple 
 
819-3.jpg  
このSimpleスタイルでは、入力も選択も可能です。(選択部分が常に表示されている形となっています。)
 
 
次にオートコンプリート機能の話題に移りたいと思います。ComboBox,TextBoxともにこの機能が使えますが、ここではTextBoxについての例を紹介します。
 
ではmainFormを準備して、TextBoxを一つ乗っけておきます。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form(ClientSize = new Size(500,300), Text = "MyAutoComplete Window")
mainForm.Show() |> ignore
 
let myTextBox = new TextBox(Size = new Size(200,30),Location = new Point(10,10))
mainForm.Controls.Add(myTextBox)
 
TextBoxコントロールでオートコンプリート機能を使用可能にするには、AutoCompleteModeプロパティとAutoCompleteSourceプロパティの2つを設定します。
 
AutoCompleteSourceプロパティでは、オートコンプリートでよく使われるURLの履歴や、ファイルシステムなのが準備されています。また独自の補完候補を使用することもできます。
とりあえずURLの履歴を設定しておきます。
 
> myTextBox.AutoCompleteSource <- AutoCompleteSource.AllUrl;;
val it : unit = ()
 
なおAutoCompleteSource列挙対の候補の一覧は、http://msdn.microsoft.com/ja-jp/library/system.windows.forms.autocompletesource.aspx を参照してください。
 
次はAutoCompleteModeの設定です。
 
> myTextBox.AutoCompleteMode;;
val it : AutoCompleteMode = None
 
からわかるようにデフォルトではNoneになっています。
 
ここには、AutoCompleteMode列挙体の値を設定します。次のような値があります。
 
○Append     既存の文字に、その後に続く可能性が最も高い候補文字列を追加し、追加した文字を強調表示します。  
 
○None     ComboBox コントロールおよび TextBox コントロールのオート コンプリート機能を無効にします。  
○Suggest エディット コントロールに関連付けられた補助のドロップダウン リストを表示します。このドロップダウン リストには、1 つ以上の補完文字列の候補が格納されています。  
 
○SuggestAppend Suggest オプションと Append オプションの両方を適用します。  
 
ではまずは、AutoCompleteMode.Appendに設定してみます。
 
> myTextBox.AutoCompleteMode <- AutoCompleteMode.Append;;
val it : unit = ()
 
テキストボックスにhttp:://bと入力して、矢印キーを押すと次の状態になります。 
 
819-4.jpg  
次にAutoCompleteMode.Suggestに変更してみます。
 
> myTextBox.AutoCompleteMode <- AutoCompleteMode.Suggest;;
val it : unit = ()
 
テキストボックスにhttp::/と入力すると次の状態になります。 
 
 819-5.jpg 
 
次にAutoCompleteMode.SuggestAppendに変更してみます。
 
> myTextBox.AutoCompleteMode <- AutoCompleteMode.SuggestAppend;;
val it : unit = ()
 
テキストボックスにhttp:://dと入力すると次の状態になります。 
 
819-6.jpg 
 
最後に独自の候補リストを使用する例を紹介します。
この場合テキストボックスのAutoCompleteSourceプロパティにAutoCompleteSource.CustomSourceを指定します。また、テキストボックスのAutoCompleteCustomSourceプロパティに、候補文字列を蓄積するAutoCompleteStringCollectionクラスのインスタンスを指定します。
下の例ではボタンを押すたびに、テキストボックスの文字列を候補に追加していきます。
 
<ソース>
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form(ClientSize = new Size(500,150), Text = "MyAutoComplete Window")
mainForm.Show() |> ignore
 
let myTextBox = new TextBox(Size = new Size(400,20),Location = new Point(10,10))
let myButton = new Button(Size = new Size(50,20),Location = new Point(420,10),Text= "submit")
mainForm.Controls.Add(myTextBox)
mainForm.Controls.Add(myButton)
 
let myACSC = new AutoCompleteStringCollection()//候補の文字列をためるところ
myTextBox.AutoCompleteSource <- AutoCompleteSource.CustomSource
myTextBox.AutoCompleteMode <- AutoCompleteMode.SuggestAppend
myTextBox.AutoCompleteCustomSource <- myACSC
 
myButton.Click.Add(fun _ -> let candidateStr = myTextBox.Text.Trim()
                            if candidateStr.Length > 0 && myACSC.Contains(candidateStr) = false then
                                 myACSC.Add( candidateStr) |> ignore
                                 myTextBox.Text <- "")
 
実行例 
 
819-7.jpg  
 

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

プロフィール

T GYOUTEN

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

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

この人とブロともになる

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