タイトルだけでは良く分からない内容ですが、要は、↓↓こういうことです。


空っぽのテキストボックス(左)と項目だけがあるテキストボックス(右)。
左のテキストボックスに、項目に表示させたいデータを複数行で投入すると、右側のテキストボックスが自動で項目名を読み取って、表示させる、というもの。
あらかじめ項目名を設定しておけば、ユーザー投入時にもある程度は融通が利きます。
何に使うのかは人それぞれ、なパーツですね。
全体の構成
※モダンコントロールだけで作成しています

全体的な構成は左図の通りです。
ユーザー投入画面と、表示画面と、左右に大きく2分割。
左の「TextInputCanvas」は
Modeプロパティを「’TextInputCanvas.Mode’.Multiline」にして、複数行の投入ができるようにしておきます。
右側は、1行ずつ情報を入れられるように水平コンテナ「01_Container」を挿入しておきます。
その中には項目となる「Label01」と、項目表示させる「View01」を挿入しておきます。
表示させたい項目の数だけ、この水平コンテナと中のテキストボックスを複製しておきます。
画面右側の構成
画面左側はテキストインプットしかないので割愛(*- -)(*_ _)

タスクID と記載のテキストラベル。
挿入 > ディスプレイ > テキスト
プロパティ「Text」には、ユーザーにインプットさせる項目名を設定。同じにしないと動きません。
ここでは ”タスクID” としています。
それ以外は特に設定しなくても問題なし。

T0001 を表示させるテキストラベル挿入。
挿入 > ディスプレイ > テキスト
単に表示させるだけなので、プロパティ「Text」に以下を設定するだけで済みます。
With(
{ src: Substitute(TextInputCanvas.Value, Char(13), "") },
With(
{
hit: LookUp(
Split(src, Char(10)),
StartsWith( Trim(Value),Label01_1.Text),
Value
)
},
Trim(
Coalesce(
If( CountRows( Split(hit, ":" ) ) > 1, Last( Split(hit, ":" ) ).Value ),
If( CountRows( Split(hit, ":" ) ) > 1, Last( Split(hit, ":" ) ).Value ),
""
)
)
)
)※with変数は入れ子ににしないとエラーになるようでした。
Copilotさん用いた解説 (`・∀・)ノ
Substitute(TextInputCanvas.Value, Char(13), "")↑↑ 指定したテキスト(TextInputCanvas)にある Char(13) を、すべて「””」に置換えます(今回は削除と同義)
入力内容によって変わってくるし、もしかしたら今回は意味ないかも?とも思いますが、どうでしょう。
ひとまずこれで成功したのでおまじない的な感じで入れておきます。
LookUp(
Split(src, Char(10)),
StartsWith( Trim(Value), Label01_1.Text ),
Value
)文字列 src を LF(改行:Char(10))で行ごとに分割し、
各行の前後空白を Trim したテキストが Label01_1.Text で始まる最初の行を 検索(LookUp) し、
見つかったその 行の文字列(Value) を取り出して、hit というフィールドに格納する、という処理です。
Split(src, Char(10))変数「src」を、Char(10) で1区切りとして分割し、単一列のテーブルにします。
StartsWith(Trim(Value),Label01_1.Text)各レコード(=各行文字列)に対して、以下の処理を実施してます。
Trim(Value):前後の空白を削除した文字列を作る
StartsWith(…, Label01_1.Text):その文字列が Label01_1.Text で始まるかを判定
LookUpの検索条件として使ってます。
LookUp( <テーブル>, <条件>, <戻り値列> )Splitで得たテーブルから、条件を満たす最初の1レコードを検索。
第3引数のValueは、見つかったレコードから返す列(フィールド)を指定。
つまり行文字列そのものを返そうとしている意図です。
一致が1件もない場合はBlank()を返します。
