3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

プロデルから.NETのクラスライブラリを使う

Last updated at Posted at 2022-12-03

今回は、プロデルのネット型を使って.NET Frameworkのクラスを呼び出す方法を紹介します。

プロデルには様々な機能を日本語でプログラムするためのプロデル専用のライブラリがあらかじめ用意されています。一方でプロデルそのものは.NET環境で動作するため、.NETのクラスライブラリを一応直接利用することもできます。(複雑にはなりますが)

今回は、プロデルから.NET Frameworkの機能を利用してみます。なお今回紹介する方法は、プロデルで想定している本来の使い方からやや外れています。より作りこむには.NETの知識が必要となります。また、プロデルの制約などの理由で正しく動作しない機能もあります。

プロデル専用のライブラリでは実現できないことをどうしてもプロデルで実現したいというときにご活用ください。

ネット型

プロデルで.NETのクラスライブラリを利用するには、「ネット型」を使います。
プロデルでは、純粋な.NET(FCL)の型を「ネット型」と呼びます。ネット型を使うには、次のような書式で書きます。

プロデル
"【クラス名】"のネット型を作る
"【完全なクラス名】,【アセンブリ名】"のネット型を作る

クラス名には、名前空間を含むクラス名を指定します。プロデルではusingキーワードが使えないため、名前空間は省略できません。また完全修飾型名で指定することもできます。
【アセンブリ名】には、DLLファイルに宣言されたアセンブリ名を指定します。つまりVisual Studioのソリューションで参照するときのアセンブリの名前を指定します。GACに登録されたアセンブリでは、DLLファイルのパスを指定せず、アセンブリ名を指定すれば、参照できます。

使いたいクラスのアセンブリ名を調べるには、次のようなプログラムで確認できます。

C#
Console.WriteLine(typeof(Button).AssemblyQualifiedName);
//System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

コンソールに表示された名前は、先頭から2つ目のカンマまでがネット型に指定する完全なクラス名とアセンブリ名です。

プロデル
"System.Windows.Forms.Button, System.Windows.Forms"のネット型を作る

メソッド呼び出し

プロデルでメソッドを呼び出すには、次のような書式で書きます。

プロデル
【オブジェクト名】:【メソッド名】(引数)

C#やVB.NETでは「.」と書くべきところがプロデルでは「:」となります。「:」はプロデル上でレシーバオブジェクトを表す記号です。引数には、メソッドに渡す値を指定します。引数は省略することができ、また複数の引数を指定するときには「,」で区切ります。なお助詞は指定できません。

プロパティへのアクセス

プロデルからプロパティの値を取得したり設定したりするには、次のような書式で書きます。

プロデル
【オブジェクト名】の【メソッド名】

C#やVB.NETでは「.」と書くべきところがプロデルでは「の」となります。プロデルではプロパティが設定項目として扱われているため、設定項目と同じように扱われます。

列挙型の値

プロパティやメソッドの引数によっては列挙型の定数値を指定する場合があります。プロデルでは列挙型の定数名を文字列で指定します。

イベントハンドラの設定

オブジェクトのイベントを手順で受け取るには、次のような書式でイベントハンドラを指定します。

プロデル
【オブジェクト名】の【イベント名】時の手順は、【呼び出す手順】

プロデルでは、イベントがイベント手順と同じ機能ですので、イベント手順を設定する代入文で指定します。

イベントが発生した時の引数(一般に変数名e)は「この時」特殊変数に保存されます。「この時」特殊変数もネット型のオブジェクトですが多くの場合、そのまま操作できます。

値の型変換

文字列(string型)や整数(int型)、PointやSizeなどよく使われる構造体は、プロデルの型と対応付けられています。そのため、多くは文字列または配列で代入することで適切な型へ変換されます。

プログラム例

2つの例を掲載します。一つ目は、StringBuilderクラスのインスタンスを生成して操作するプログラムです。C#やVB.NETの文法ではなく、あくまでもプロデルの文法に則ってメソッドやプロパティを操作します。

動作環境:プロデル1.9.1163

文字列の連結.rdr
builderという"System.Text.StringBuilder"のネット型を作る
builder:Append(「こんにちは」)
builder:Append(「さようなら」)
「[builderのLength]:[builder:ToString()]」を表示する

二つ目に、Windowsフォームでボタンを配置するプログラムです。
フォームデザイナが使えないため、Visual Studio上のC#で書く場合とも勝手が違いますが、一応フォームを表示させることができます。なお、Size型やPoint型、フォーム関連の一部の列挙型は、プロデルの標準の型に自動的に変換される仕組みになっています。

また、プロデルデザイナ上でのプログラムは、UIとは別スレッドで実行されているため、明示的にUIスレッドで実行させる必要があります。(プロデルの種類では自動的にUIスレッドで実行されます)

Windowsフォーム.rdr
UIスレッドで『
	窓という"System.Windows.Forms.Form, System.Windows.Forms"のネット型を作る
	ボタンという"System.Windows.Forms.Button, System.Windows.Forms"のネット型を作る
	窓のTextは、「WinFormsのテスト」
	窓のFormBorderStyleは、「固定ツール」
	ボタンのLocationは、{30,30}
	ボタンのSizeは、{126,40}
	ボタンのTextは、「OK」
	ボタン:Show()
	窓のControls:Add(ボタン)
	窓:Show()
』を実行する
ボタンのClick時の手順は、クリックさせた
窓のClosed時の手順は、閉じられた
待機

クリックさせた手順
	「こんにちは」を表示する
終わり
閉じられた手順
	終了する
終わり
3
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?