フォームの初期化生成・表示・非表示・破棄は人によりけりになりますが
今回は参照サイトにのっとってインターフェイスのRun()内で生成・表示とプラグインフォームクローズで破棄したいと思います
1)VC#でプロジェクト>新しい項目の追加
名前は今回はそのまま「Form.cs」にしときます
※参照設定にSystem.DrawingとSystem.Windows.Formが追加されます
※フォームにコードを書く場合は
「Form.cs[デザイン]」を表示させて
・VC#で表示>コード
・表示されているフォームで右クリック>コードの表示
VC#で表示>ソリューション エクスプローラを開く
(「ソリューション エクスプローラを開く」が「その他のウインドウ」の中にある場合があります)
の中の「Form.cs」を選んで右クリック>コードの表示
3)フォームの変数を作る
インターフェイスのトップにフォームの変数を作る
4)フォームの生成と表示
このままだといくらでもフォームが生成・表示されてしまうので
フォームがnullの時だけ生成・表示するようにする
このままだとフォームがnullにならないので
フォームクローズイベントでnullにする
「form.FormClosing+=」まで書いてTabを押すと続きを書いてくれる
そのままTabを押すとイベントを生成してくれる
フォームをnullにする
これでフォームを1つだけ起動して閉じるを繰り返しできるようになります
5)このままだとプラグインフォームがNCVフォームの裏に隠れてしまうので
表示する前に親子関係を設定する
※NCVのフォームは「host.MainForm」
6)このままだとプラグインフォーム表示時にNCVが
最前面になっていると裏に隠れてしまうのでNCVのTopMostの値をもらう
7)ビルド!(今作ったものをdllファイルとして書き出す)
VC#でデバック>ソリューションのビルド
先ほど保存したところに「ClassLibrary1.dll」が新しくできています
Projects\ClassLibrary1\ClassLibrary1\bin\Release\ClassLibrary1.dll
8)NCVで確認!
「ClassLibrary1.dll」をNCVのpluginsフォルダに入れてNCVを起動
プラグインの「キリ番ゲッター」を押してフォームが表示して
もう一度プラグインの「キリ番ゲッター」を押してフォームが表示されないことを確認
右上の「×」を押してフォームを閉じる
もう一回プラグインの「キリ番ゲッター」を押してフォームが表示されれば成功!
今回は参照サイトにのっとってインターフェイスのRun()内で生成・表示とプラグインフォームクローズで破棄したいと思います
1)VC#でプロジェクト>新しい項目の追加
名前は今回はそのまま「Form.cs」にしときます
※参照設定にSystem.DrawingとSystem.Windows.Formが追加されます
※フォームにコードを書く場合は
「Form.cs[デザイン]」を表示させて
・VC#で表示>コード
・表示されているフォームで右クリック>コードの表示
VC#で表示>ソリューション エクスプローラを開く
(「ソリューション エクスプローラを開く」が「その他のウインドウ」の中にある場合があります)
の中の「Form.cs」を選んで右クリック>コードの表示
3)フォームの変数を作る
インターフェイスのトップにフォームの変数を作る
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibrary1 { public class Class1 : Plugin.IPlugin { //ホストをもらう変数 Plugin.IPluginHost host = null; //フォームの変数 Form1 form = null; /// <summary> /// プラグインのホスト /// </summary> public Plugin.IPluginHost Host { get { return this.host; } set { this.host = value; } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4)フォームの生成と表示
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { //フォームの生成 form = new Form1(); //フォームの表示 form.Show(); } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
このままだといくらでもフォームが生成・表示されてしまうので
フォームがnullの時だけ生成・表示するようにする
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //フォームの表示 form.Show(); } }
このままだとフォームがnullにならないので
フォームクローズイベントでnullにする
「form.FormClosing+=」まで書いてTabを押すと続きを書いてくれる
そのままTabを押すとイベントを生成してくれる
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); } } void form_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e) { throw new NotImplementedException(); }
フォームをnullにする
これでフォームを1つだけ起動して閉じるを繰り返しできるようになります
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); } } /// <summary> /// プラグインフォームを閉じたときに呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void form_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e) { form = null; }
5)このままだとプラグインフォームがNCVフォームの裏に隠れてしまうので
表示する前に親子関係を設定する
※NCVのフォームは「host.MainForm」
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //オーナー設定 form.Owner = host.MainForm; //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); } }
6)このままだとプラグインフォーム表示時にNCVが
最前面になっていると裏に隠れてしまうのでNCVのTopMostの値をもらう
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //オーナー設定 form.Owner = host.MainForm; //TopMostを受け取る form.TopMost = host.MainForm.TopMost; //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); } }
7)ビルド!(今作ったものをdllファイルとして書き出す)
VC#でデバック>ソリューションのビルド
先ほど保存したところに「ClassLibrary1.dll」が新しくできています
Projects\ClassLibrary1\ClassLibrary1\bin\Release\ClassLibrary1.dll
8)NCVで確認!
「ClassLibrary1.dll」をNCVのpluginsフォルダに入れてNCVを起動
プラグインの「キリ番ゲッター」を押してフォームが表示して
もう一度プラグインの「キリ番ゲッター」を押してフォームが表示されないことを確認
右上の「×」を押してフォームを閉じる
もう一回プラグインの「キリ番ゲッター」を押してフォームが表示されれば成功!
タグ