Q2:@p3 列を追加する(String, Class)の起動メソッドの設定画面の一番左のNO 0と1。
Ap48 行が選択されたことの情報は、どのようにしてサブルーチンのボタン有効化の処理を呼び出すのでしょうか。
Bp56 intの情報はここでは、どのように指定しているのでしょうか。
Cp61 テーブルを設定する(PFObjectTable)のPFObjectTableは何を意味しているのでしょうか。
Dp62 Bですが、引数に0と1があるのは何故なのでしょうか。
Q2-1:
活用編p3
列を追加する(String, Class)の起動メソッドの設定画面の一番左にNO 0と1が示してありそれぞれの型がStringとClassと記してあります。このNOは行のインデックスを指しているのでしょうか?Stringは、0インデックスである1行目に適用し、Classは、1インデックスである2行目に適用するという意味でしょうか?そうすると3行目以降はどの型に設定されるのでしょうか?
p48
行が選択されたことの情報は、どのようにしてサブルーチンのボタン有効化の処理を呼び出すのでしょうか?選択されたとき、データ選択イベントは自動的に起動するのでしょうか?
p56
>「特定行を削除する(int)」の引数は「行インデックス=行位置」で何番目の行を削除するか指定するものになります。
との回答を頂きました。intの情報はここでは、どのように指定しているのでしょうか?
p56ではその情報を設定しているところは無いように見受けられます。
p61
テーブルを設定する(PFObjectTable)のPFObjectTableは何を意味しているのでしょうか?
p62
Bですが、引数に0と1があるのは何故なのでしょうか?また、両引数とも同じメソッド/値 となっている理由もお教え頂けると有難いです。
A2-1:
「起動メソッド情報設定」画面の見方ですが、一番左端の「NO」の項は単に引数設定欄に一段毎に番号が振ってあるだけで、それ以上の意味はありません。
引数があるメソッドを選ぶと、下側に欄が出てきます。
引数が1つのものは一段、2つのものは2段・・・になっています。
出てくる順番はメソッドの括弧の中に書いてある順番どおりです。
例えば(String,int)という引数を持つメソッドがあるとすると一段目はString設定のための欄、2段目はint設定のための欄です。
チュートリアルで<引数0>、<引数1>とあるのは、引数の0番目、引数の1番目を指しています。
> p48行が選択されたことの情報は、どのようにしてサブルーチンのボタン有効化の処理を呼び出すのでしょうか?
> 選択されたとき、データ選択イベントは自動的に起動するのでしょうか?
実行画面上で[テーブル]が選択されると[テーブル]からデータ選択イベントが発生することになっています。P37で[テーブル]の選択方法も「行選択」に変更してありますので、「行が選択されるとデータ選択イベントが発生する」ということで結構です。
P56の接続確認の表をご覧頂くと、<引数>は
取得方法:メソッド戻り値
コンポーネント:テーブル となっています。
これは[テーブル(ID:2)]から何かの情報(データ)を得て、それを引数として利用するという意味です。
それでは、どんな情報を得るのかということですが
メソッド/値:getSelectedRow
としてあるので、「(テーブルの)選択されている行の位置(=インデックス)を得る」ということになります。
「選択されている行の位置」はint型で得られますので、メソッド「特定行を削除する(int)」の引数として利用できるということになります。
> テーブルを設定する(PFObjectTable)のPFObjectTableは何を意味しているのでしょうか?
「PFObjectTable」はMZPlatformにおける表形式のデータ型とお考え下さい。
> p62 Bですが、引数に0と1があるのは何故なのでしょうか?
>また、両引数とも同じメソッド/値となっている理由もお教え頂けると有難いです
引数の番号については上に書いた通りです。
この、メソッド「setRowSelectionInterval(int,int)」は、現在のバージョンでは「選択行を指定する(int,int)」という日本語別名が与えられています。
チュートリアルの記述が古く、申し訳ございません。
「Interval」という言葉が入っていますが、このメソッドでは選択行の「範囲」を指定することができます。
例えば、0番目の引数の方に「1」を、1番目の引数に「3」を設定した場合には、実行すると[テーブル]の1番目の行から3番目の行の計3行が選択された状態になります。
P62では複数の行を選択する必要はなく、一行だけを選択状態にしたいので、0番目の引数、1番目の引数とも同じ数が入ります。従って<引数0>、<引数1>とも同じ設定になります。
引数の設定内容の見方は、上でP56について書いたのと同じです。
「テーブル格納変数から行の選択位置を取得」し、それを引数として利用しているということになります。
Q2-2:
活用編のP62のBで選択行の位置を取得し選択状態に設定する際の引数が、2つ設定されています。この場合は何故引数が2つ必要なのでしょうか?
A2-2:
P62Bの処理の目的は「テーブルの、ある一つの行を選択状態にする」ということなのですが、ここで用いるメソッド「setRowSelectionInterval(int,int)(選択行を指定する)」の<引数0>と<引数1>は行の範囲を意味しています。
「○行目から△行目まで」選択状態にするということです。
この引数は必ず二つ必要で、勝手に引数の数を減らしたりということはできません。
そこで、二つの引数には同じ値を設定し、1行だけを選択したようにします。
(例)<引数0>と<引数1>にそれぞれ「1」を設定
1行目から1行目までを選択状態にする
チュートリアルでは、<引数0>と<引数1>は「取得方法:メソッド戻り値」として[テーブル格納変数]から得た「行の選択位置」の値が設定されていますが、2つとも同じ内容ですので、ある一行だけが選択された状態になります。
Q2-3:
活用編p61-62
AとBがあります。これらの順番は逆ではないのでしょうか?Bで選択された行を指定し、Aでその行のインデックスを減らす。なぜ、テキストでは逆になっているのでしょうか?
Bで引数0と引数1のメソッド/値が同じなのは、ある1行を選択するためだとお伺い致しました。複数行の場合、初めの行と終わりの行はどのようにして設定するのでしょうか?
A2-3:
接続確認の表を見て頂くと、AとBでは「接続先コンポーネント」が違うかと思います。
A[テーブル格納変数]「指定行位置インデックスを1つ減らす(int)」
B[テーブル]「setRowSelectionInterval(int,int)(選択行を指定する)」
です。
このP61−62の流れは
まず[テーブル]は一行が選択状態になっています。
@[テーブル]のデータを[テーブル格納変数]に設定します。
テーブルデータ全体を[テーブル格納変数]に設定するので、[テーブル]上の選択行位置の情報も一緒に[テーブル格納変数]に入ります。
A[テーブル格納変数]内で選択行の位置を「1」少なくします。
元の[テーブル]の選択行より一つ上の行が[テーブル格納変数]内で選択されたことになります。
B[テーブル]を選択状態にします。
この時選択する行の位置は[テーブル格納変数]を基準にします。
つまり、元の選択行より一つ上の行が選択状態になります。
もちろん他にも考えられる処理の方法は色々あるのですが、[テーブル]に「選択位置インデックスを1減らす」といったメソッドがないことと、データの操作はなるべく「変数」に入れて行うという方針で、チュートリアルではこのような例をご紹介しています。
> Bで引数0と引数1のメソッド/値が同じなのは、ある1行を選択するためだとお伺い致しました。複数行の場合、初めの行と終わりの行はどのようにして設定するのでしょうか?
<引数0>に選択開始行、<引数1>に選択終了行を示す値を入れて頂ければ結構です。
例)
<引数0>: 取得方法:固定値、メソッド/値:1
<引数1>: 取得方法:固定値、メソッド/値:3
1行目から3行目までを選択状態にする
Q2-4:
下記の回答を得ましたが、選択行が上に移動する場合、その他の行のインデックスも変わりますが、その操作はMZの方で自動的におこなってくれるという認識で良いのでしょうか?各行の並び方の順番は、変わらずに、この選択行だけが上下すると考えて宜しいのでしょうか?
> A[テーブル格納変数]内で選択行の位置を「1」少なくします。
A2-4:
> 選択行が上に移動する場合、その他の行のインデックスも変わりますが、その操作はMZの方で自動的におこなってくれるという認識で良いのでしょうか?
[テーブル格納変数]内で処理が行われているとお考え頂いて結構です。
「指定行位置インデックスを1つ減らす(int)」を実行すると、指定行以外にも一つ上の(一つ位置インデックスの小さい)行が影響を受けますが、[テーブル格納変数]内で処理が行われて順番が入れ替わります。
なお「指定行位置インデックスを1つ減らす(int)」を実行すると、[テーブル格納変数]内のデータは変更になりますから、[テーブル格納変数]から「データ更新イベント」が発生します。
チュートリアルP63の2番目の接続確認の表にあるように、
[テーブル格納変数]→「データ更新イベント」発生→
→[テーブル]「(テーブル格納変数内の)テーブルデータを設定する」
としてあるので、
「指定行位置インデックスを1つ減らす(int)」が実行され、[テーブル格納変数]内
のテーブルデータが変わると、[テーブル]にも変更があったデータが設定されます。従って、「↑」ボタンを押すと、[テーブル]の指定行の位置が変わることになります。
前回の回答で訂正がございます。
> @[テーブル]のデータを[テーブル格納変数]に設定します。
> テーブルデータ全体を[テーブル格納変数]に設定するので、[テーブル]上の選択行位置の情報も一緒に[テーブル格納変数]に入ります。
と書きましたが、選択位置は「指定行位置インデックスを1つ減らす(int)」の引数として[テーブル]から取得していました。大変申し訳ございません。
Q2-5:
活用編p61-62
p61のAとp62のBの具体的な流れについてご説明して頂きましたが、よくわからないことがあります。
Aでテーブルのデータをテーブル格納変数に記録させてあります。この変数には、特定行が選択されている情報も格納されているのでしょうか?もし、その情報が格納されている場合、Bは不要になります。テーブル格納変数には、テーブルのどのような情報までが記録されるのでしょうか?
A2-5:
> Aでテーブルのデータをテーブル格納変数に記録させてあります。この変数には、特定行が選択されている情報も格納されているのでしょうか?
前回の回答で、「選択行位置の情報も一緒に[テーブル格納変数]に入ります。」と回答してしまいましたが、誤りでした。申し訳ございません。
現在のバージョンでは[テーブル格納変数]にはアプリケーションビルダーで起動直後、[テーブル]の選択位置とは関係なく、既定で「0」が選択位置の値として設定されています。
[テーブル格納変数]は設定されたテーブルデータとは関係なく、独自に選択位置を保持していますので、P62Bの処理が必要になります。
[テーブル格納変数]に[テーブル]からデータを設定した場合、基本的にテーブル書式のような実行画面上の設定は保持されないとお考え頂いて結構です。
[テーブル格納変数]も選択位置の情報は保持していますが、メソッドで改めて選択位置を指定する必要があります。
指定しない場合は、既定値で選択位置は「0」です。
メソッド:「指定行位置インデックスを1つ減らす(int)」では、『指定行位置を指定して、それを1減らす』ということを一度に行っているのと同じ形になります。
Q2-6:
Aの「メソッド/値」では「選択行の位置を取得する」となっています。これは、「テーブル」から「テーブル格納変数」に選択状態に関する情報が流れると解釈します。しかし、昨日のお答えでは、テーブル格納変数には、選択状態などのテーブルの書式についての情報は移動しないと伺いました。どちらが正しいのでしょうか?Bでは、テーブル格納変数内で更新された選択状態に関する情報がテーブルに移動すると考えて宜しいのでしょうか?
A2-6:
[テーブル]の選択状態が移動しているわけではなく、改めて[テーブル格納変数]内での選択位置を数値で設定しているとお考え下さい。
メソッド「指定行位置インデックスを1つ減らす(int)」の引数は
取得方法:メソッド戻り値
コンポーネント:テーブル
メソッド/値:getSelectedRow(選択行の位置を取得する)
となっていますが
インデックスは「0」、「1」といった数値ですので、
引数に
取得方法:固定値
メソッド/値:1
などとした時と同じような状態です。
逆に[テーブル]の選択位置を指定している時も、選択状態が移動しているわけではなく、改めて選択位置を設定してます。
メソッド「setRowSelectionInterval(選択行を指定する)」の引数は2つとも
取得方法:メソッド戻り値
コンポーネント:テーブル格納変数
メソッド/値:行の選択位置を取得する
となっています。
これも行位置インデックスの数値を引数として使っていることになります。
[テーブル]も[テーブル格納変数]も独自にそれぞれ選択行位置インデックスを持っていますが、そのインデックスは数値として取得され、数値で設定されます。
Q2-7:
> メソッド「指定行位置インデックスを1つ減らす(int)」の引数は
> 取得方法:メソッド戻り値
> コンポーネント:テーブル
> メソッド/値:getSelectedRow(選択行の位置を取得する)
は、選択行の位置の情報をテーブル格納変数がテーブルから取得する、という意味なのではないのでしょうか?そうしますとテーブルからテーブル格納変数に選択行の位置の情報が移動したと考えることができると思いますが。
選択行がテーブル内で上下するとき、選択行の位置の情報はテーブルとテーブル格納変数の間でどのように受け渡しされるのでしょうか?
テーブルもテーブル格納変数も個別に選択行の情報を別々に保持しているなら、どのようにして選択行がテーブル内で上下するのでしょうか?
A2-7:
テーブルとテーブル格納変数は、選択行の情報を個別に保持しています。したがって、テーブルが持つテーブルデータをテーブル格納変数に設定しても、その時点で自動的にテーブルの選択行情報がテーブル格納変数に渡されることはありません。これは、テーブル格納変数が持つテーブルデータをテーブルに設定する場合も同様です。
選択行情報を渡したい場合、すなわち、テーブルで選択されている行をテーブル格納変数でも選択したい場合には、別途、何らかのメソッドを実行することによりテーブル格納変数の選択行を指定する必要があります。
今回のご質問の中で、テーブル格納変数の選択行指定を行っているメソッドは、「指定行の位置インデックスを一つ減らす(int)」メソッドです。このメソッドは、以下の動作を行います。
・引数で指定された行を1つ上へ移動する。
・移動した行を選択状態にする。
・移動後のテーブルデータを内包データとするデータ更新イベントを発生する。
例えば、「指定行の位置インデックスを1つ減らす(int)」メソッドの引数を
「3」として実行した場合には、
・第3行が1つ上に移動し(第2行になる)、
・第2行(移動後の行)が選択され、
・データ更新イベントが発生する
ことになります。
以上をもとに、「↑」ボタンをクリックした後の動作を順にたどると以下のようになります。
(1) 「↑」ボタンのアクションイベントに接続されているテーブル格納変数[ID:11]の「テーブルを設定する(PFObjectTable)」が実行される。テーブル格納変数[ID:11]にテーブル[ID:2]のテーブルデータを設定する。
(2) テーブル格納変数[ID:11]の「指定行の位置インデックスを一つ減らす(int)」メソッドが実行される。テーブル格納変数[ID:11]の行のうち、テーブル[ID:2]で選択されているものと同じ位置にある行を1つ上へ移動し、その行をテーブル格納変数[ID:11]の内部で選択状態にする。テーブル格納変数[ID:11]からデータ更新イベント(内包データは行移動後のテーブルデータ)が発生する。
(3) テーブル格納変数[ID:11]のデータ更新イベントに接続されているテーブル[ID:2]の「テーブルデータを設定する(PFObjectTable)」メソッドが実行される。引数のテーブルデータは、テーブル格納変数[ID:11]で行を移動した後の状態のものであり、テーブル[ID:2]のデータはこのデータで上書きされる。なお、テーブルコンポーネントは、「テーブルデータを設定する(PFObjectTable)」メソッドによってデータが上書きされた場合にはすべての選 択状態が解除される仕様となっているため、テーブル[ID:2]の行の選択状態はこの時点で解除される。
(4) 「↑」ボタンのアクションイベントに接続されているテーブル[ID:2]の「選択行を指定する(int)」メソッドが実行される。上述(2)で、テーブル格納変数 [ID:11]の内部で選択状態にされた行、すなわち、移動した行と同じ位置にある行がテーブル[ID:2]で選択される。
Q2-8:
私が質問したかったのは、「テーブル上である行が選択された場合、その行の位置の情報がテーブル格納変数に伝わって、テーブル格納変数内でその行のインデックスを増減させて、情報の加工をおこなっているのでしょうか?」です。回答では、選択された行の情報は、テーブルとテーブル格納変数とで別々に保持している、とあります。そのテーブル格納変数にある選択された行の情報は、元々どこから来ているのでしょうか?
下記の回答で
> ・引数で指定された行を1つ上へ移動する。
がテーブル格納変数内でおこなわれるということは、テーブル上の選択行の位置の情報がインデックスとしてテーブル格納変数に伝わっていることを意味しているのではないでしょうか?
A2-8:
> 私が質問したかったのは、「テーブル上である行が選択された場合、その行の位置の情報がテーブル格納変数に伝わって、テーブル格納変数内でその行のインデックスを増減させて、情報の加工をおこなっているのでしょうか?」です。
> 回答では、選択された行の情報は、テーブルとテーブル格納変数とで別々に保持している、とあります。そのテーブル格納変数にある選択された行の情報は、元々どこから来ているのでしょうか?
2009/10/21に差し上げた回答に、以下の記述がございます。
> 以上をもとに、「↑」ボタンをクリックした後の動作を順にたどると以下のようになります。
>
> (1) 「↑」ボタンのアクションイベントに接続されているテーブル格納変数[ID:11]の「テーブルを設定する(PFObjectTable)」が実行される。テーブル格納変数[ID:11]にテーブル[ID:2]のテーブルデータを設定する。
> (2) テーブル格納変数[ID:11]の「指定行の位置インデックスを一つ減らす
> (int)」メソッドが実行される。テーブル格納変数[ID:11]の行のうち、テーブル[ID:2]で選択されているものと同じ位置にある行を1つ上へ移動し、その行をテーブル格納変数[ID:11]の内部で選択状態にする。テーブル格納変数[ID:11]からデータ更新イベント(内包データは行移動後のテーブルデータ)が発生する。
この(2)に記されている、テーブル格納変数[ID:11]の「指定行の位置インデックスを一つ減らす(int)」メソッドの引数が、テーブル[ID:2]の「選択行の位置を取得する()」メソッドの戻り値になっています。
すなわち、テーブル上の選択行の位置の情報は、テーブル[ID:2]の「選択行の位置を取得する()」メソッドによって取得されます。そして、その値がテーブル格納変数[ID:11]の「指定行の位置インデックスを一つ減らす(int)」メソッドの引数に与えられることにより、テーブル[ID:2]で選択されているものと同じ位置にある行がテーブル格納変数[ID:11]で選択されることになります。
> 下記の回答で
>> ・引数で指定された行を1つ上へ移動する。
> がテーブル格納変数内でおこなわれるということは、テーブル上の選択行の位置の情報がインデックスとしてテーブル格納変数に伝わっていることを意味しているのではないでしょうか?
繰り返しとなりますが、テーブル上の選択行の位置の情報は、
・テーブル[ID:2]の選択行の位置を「選択行の位置を取得する()」メソッドで取得し、
・その位置情報を引数としてテーブル格納変数[ID:11]のの「指定行の位置インデックスを一つ減らす(int)」を実行する
ことによって伝えられているのであり、決して自動的に伝わっているのではありません。