・フォーム親子関係のウィンドウでデリゲートを使って子から親へメッセージ送信する書き方 親側クラス public delegate void MyDelegete(string str); // これはどこかに書いておく。親中心の場合はここでOKだろう
public partial class Parent : Form { private void Button1_Click(object sender, EventArgs e) { child = new Child(); child.mDelegete += Write; FormThread.Start(child, this); } public void Write(string str) { this.textBox.Text = str; } }
|
子側クラス public partial class Child : Form { public event MyDelegete mDelegete; // event をつけた場合は他のクラスからの呼び出しができなくなる public Child() { InitializeComponent(); // ここでデリゲート呼び出しは無理、やったら固まる } private void button1_Click(object sender, EventArgs e) { mDelegete("子フォームからのメッセージ"); // ここでデリゲート呼び出し } } |
(無理やりな)フォームスレッド操作クラス(このコードは一応動くが、スレッド同期上の問題がある) using System; using System.Windows.Forms; using System.Threading;
namespace Program { class FormThread { static Form sForm;
public static void Start(Form form, Form parent) { Thread t = new Thread(new ThreadStart(FormThread.Do)); sForm = form;
parent.AddOwnedForm(form); // 親子関係を設定 t.Start(); }
private static void Do() { Application.Run(sForm); } } } |
Program.cs static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Parent()); Application.Exit(); // 一応、子フォームスレッドの片付け } } |
・テキストボックスで全て選択ショートカットできるようにするには ここ。 ・Formクラスのメンバ メンバ | 対応API・API定数 | FormWindowState WindowState // ウィンドウ状態(最大化最小化表示) | SW_MAXIMIZE,SW_MINIMIZE,SW_SHOW | FormBorderStyle FormBorderStyle // 境界線スタイル(サイズ変更の可否・ツールウィンドウか) | WS_EX_TOOLWINDOW,WS_DLGFRAME,WS_SIZEBOX | bool MaximizeBox // 最大化ボタンの表示設定。 | WS_MAXIMIZEBOX | bool MinimizeBox// 最小化ボタンの表示設定。 | WS_MINIMIZEBOX | bool IsMdiContainer // MDIコンテナか | CreateMDIWindow, WS_EX_MDICHILD | bool ShowInTaskbar // タスクバー表示 | | bool ShowIcon // アイコン表示 | | bool TopMost // 前面表示 | WS_EX_TOPMOST | bool AllowDrop // ドロップ | WS_EX_ACCEPTFILES |
リンク
|
|