###追記と注意書き。2017/12/26 Tue 18:07:23
バインドの問題について悩む人が、
この投稿内容について読む前に、
まず、この質問投稿の解決が
バインドの問題ではなくなってしまっていることを
お伝えしておきます。
これは、私がバインドという言葉を勘違いして使ってしまっていたせいです。
いまでもわかっていません。
それでも回答者様の回答の中には、
C#によるwindowsフォームのバインドについて
有用な情報があると思います。
回答者様の力のみによってこの投稿の価値が維持されているとおもいます。
しかし、質問内容がそもそもズレているので投稿については、
いずれ一部削除かあるいは全削除する可能性はあります。
そして私自身の投稿内容については、あてにしないでください。お騒がせしました。。
###前提・実現したいこと
こんにちは。
C#でフォームを作成しているのですが、
データバインドで二日ほど詰まっています。
昨日質問を投稿し、回答をいただいて、
DataBindingsの構文については知ることができたので
エラーが出ることはなくなりました。
しかし、目的とする動作が達成できない状況は変わりませんでした。
実現したいことは、
「
現在アクティブなコントロールであるTextBox[A]にて、
テキスト入力中にEnterキーを押すことで、
あらたなTextBox[B]を生成する。
この生成時に、
public Directory Addによって、
TextBox[A]はTextBox[B]の親として登録される。
そうして
登録された情報をもとにして、
public static void LinkGraphによって、
フォーム上のtextboxすべての親子間に赤い線を描画する。
」
というような動作をする
フォームアプリを作ることです。
###発生している問題の概要
TextBox[B]生成時点での
アクティブなコントロールをpublic Directory Addに引数として渡します。
そして、
全てのTextBoxの内(directory)から、アクティブなコントロールに一致するものを
TextBox[B]の親としてArrayListインスタンスsupnode内のsup要素とバインドさせます。
しかし、おそらくこのバインドに何かしらの問題があって、
描画時にsup.Top,sup.Leftの値が共に「0」になってしまっています。
###該当のソースコード
C#
1///Directory.cs//textboxから継承したクラス 2 public Directory Add(Directory sub, Directory supar, Control c)//subは新しく生成したtextbox,suparとcはアクティブなコントロール 3 { 4 int i = 0; 5 Directory sup = new Directory("sup", Form1.k); 6 foreach (Directory supe in directory)//directoryはstaticですべての新しく生成したtextboxを格納するArrayList 7 { 8 if (supe.Name == ((WindowsFormsApp1.Directory)c).Name) 9 { 10 break; 11 } 12 i++; 13 } 14 directory.Add(sub); 15 cop.Add(sub);//copはstaticで、directoryのバックアップのArrayList 16 cont = (Control)cop[i];//contはDirectory.csのグローバルなコントロールインスタンス 17 sup.DataBindings.Add(new Binding("Top", cont, "Top"));//contをソースにして、supのTopを変えたいのだけど、それができていない? 18 sup.DataBindings.Add(new Binding("Left", cont, "Left")); 19 sub.supnode.Add(sup);//supnodeは、subの親にあたるtextboxのArrayList 20 con.Add(cont);//conはcontのバックアップのためのArrayList。contがGCされてしまうせいで、Topがバインドできていないのではないかと思ったときに追加した。 21 return this; 22 }
C#
1///Directory.cs//textboxから継承したクラス 2 public static void LinkGraph() 3 { 4 Graphics f = Form1.ActiveForm.CreateGraphics(); 5 Graphics g = Form1.ActiveForm.CreateGraphics(); 6 7 // 背景色を更新 8 f.Clear(color: SystemColors.Control); 9 10 //penを作る 11 Pen redPen = new Pen(Color.Red, 10); 12 foreach (Directory sub in directory) 13 { 14 foreach (Directory sup in sub.supnode)//フォーム上にあるすべてのtextboxの親子関係を取得して、描画しているはず。 15 { 16 //始点と終点 17 Point Start_point = new Point(sub.Left + sub.Width / 2, sub.Top + sub.Height / 2); 18 Point End_point = new Point(sup.Left + sup.Width / 2, sup.Top + sup.Height / 2); 19 //描画 20 g.DrawLine(redPen, Start_point, End_point); 21 } 22 } 23 //penを解放 24 redPen.Dispose(); 25 }
###補足情報(言語/FW/ツール等のバージョンなど)
環境は、
visualstudio2017 C# windowsフォームアプリケーション
です。
C言語は自作でいくつかプログラムを書いたことがありますが、
データ構造あたりまでの学習しか進んでいません。
C#は初心者です。
作りながら学ぼうとしているので、頓珍漢なことばかりして
読みづらくしてしまっていると思います。
ぜひ
知恵をお貸しいただきたいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/26 02:53 編集
2017/12/26 02:53
2017/12/26 02:54
2017/12/26 03:15 編集
2017/12/26 03:15
2017/12/26 03:18
2017/12/26 03:33
2017/12/26 03:37
2017/12/26 03:38
2017/12/26 03:47
2017/12/26 03:53
2017/12/26 03:56
2017/12/26 04:03
2017/12/26 04:06
2017/12/26 04:08
2017/12/26 04:23
2017/12/26 04:49
2017/12/26 23:21 編集
2017/12/26 23:21 編集
2017/12/26 23:21 編集
2017/12/26 23:22 編集
2017/12/26 04:58
2017/12/26 05:01
2017/12/26 07:49
2017/12/26 08:02 編集
2017/12/26 08:02
2017/12/26 08:18 編集
2017/12/26 08:18
2017/12/26 08:20
2017/12/26 08:30
2017/12/26 08:33
2017/12/26 08:35
2017/12/26 08:37
2017/12/26 09:02 編集