過去の桐井戸端BBS (桐ver.9)
19943 コマンドボタンを押したら選択されている行を削除するようにしたい katsuyoshi 2003/04/15-03:00
お世話になっています。
フォームに 行削除のコマンドボタンを作成して選択行を削除する場合
行セレクトで行を選択して削除ボタンを押して削除することになると思いますが
削除対象レコードのどの項目にフォーカスがいても
そのフォーカスのあるレコードをコマンドボタンで削除としたいのですが方法を教えてください。
たぶんコマンドボタンのイベントかと思うのですが。
よろしくお願いします。
19946 Re:コマンドボタンでの行削除の記述 ONnoji 2003/04/15-12:37
記事番号19943へのコメント
katsuyoshiさん、こんにちは。

行セレクタをクリックで選んで、その行を削除するだけならば、
次のようなコマンドボタンを用意して実行すればいいと思います。

   機能名      機能パラメータリスト
[1]行削除_指定行  確認する
[2]なし
[3]なし
[4]なし

外していたらすいません。
19948 Re:イベントでの行削除の記述を教えてください 悲しげ 2003/04/15-14:05
記事番号19943へのコメント
どもっ、katsuyoshiさん

>フォームに 行削除のコマンドボタンを作成して
>選択行を削除する場合
>行セレクトで行を選択して削除ボタンを押して削除することに

「選択行」と云えば、当該1行だけの場合と、Ctrl+またはShift+行セレクタクリックによる複数行の場合の両方を含意しそうですが、
後段の記述から推すに、どうやら1行だけのようですね。
でも、ついでだから、複数行である場合への対応も含めて、次のようなやり方も挙げておきます。
行セレクタを「左」クリックして(1行または複数行を)指定後、
そのまま今度はマウス「右」クリックし「行削除(D)」。
「行セレクタのクリック→コマンド牡丹への移動」と云う操作に比べて、
マウス移動距離も少ないし、何より組み方が簡単と云うか、
牡丹やkevを介する必要がないと云う。複数行対応には、
これをお勧めしておきます。

※右クリックで出るメニューを制限したい場合は、フォーム定義の「編集対象表」タブ、
「許可作業」牡丹から該当のチェックを外します。

19949 Re:イベントでの行削除の記述を教えてください 悲しげ 2003/04/15-14:07
記事番号19948へのコメント
ついでに云えば、行セレクタをクリックした時点では、
訂正中でも必ず表示モードになります。
19950 Re:イベントでの行削除の記述を教えてください 悲しげ 2003/04/15-14:10
記事番号19949へのコメント
一度に書けばいいものを(^^;)

行追加・行挿入中では、そもそも行セレクタをクリックできません。
セレクトすべき行が、その存在を未だ確立していないからでしょうね。
19956 説明不足でした。 katsuyoshi 2003/04/15-20:39
記事番号19948へのコメント
悲しげさん、ONnojiさんありがとうございました。
悲しげさんにまた怒られそうですが質問の説明が
うまくできなかったようです。

>「選択行」と云えば、当該1行だけの場合と、Ctrl+またはShift+
>行セレクタクリックによる複数行の場合の両方を含意しそうですが、
>後段の記述から推すに、どうやら1行だけのようですね。
>でも、ついでだから、複数行である場合への対応も含めて、次のよ
>うなやり方も挙げておきます。
>行セレクタを「左」クリックして(1行または複数行を)指定後、
>そのまま今度はマウス「右」クリックし「行削除(D)」。
>「行セレクタのクリック→コマンド牡丹への移動」と云う操作に比
>べて、マウス移動距離も少ないし、何より組み方が簡単と云うか、
>牡丹やkevを介する必要がないと云う。複数行対応には、これ
>をお勧めしておきます。
>
>※右クリックで出るメニューを制限したい場合は、フォーム定義
>の「編集対象表」タブ、「許可作業」牡丹から該当のチェックを
>外します。
>
行セレクタをクリックして行削除は自分で使う場合は問題ないのですが
他の人に使わせる場合行セレクトとはから説明しなければなりません。
そうではなく、その1行のどのオブジェクトにフォーカスがあっても
行削除ボタンをクリックしたらその行が選択され削除されるようにしたいのですが。
お願いします。

19957 Re:イベントでの行削除の記述を教えてください 通りすがり 2003/04/15-21:12
記事番号19943へのコメント
単純に1行のみを削除するなら、次のイベントをコマンドボタンにしこんだら?

手続き定義開始 cmd_del()
 変数宣言 自動, 整数{&OK}
 メソッド呼び出し @フォーム.更新モード設定(0)
 確認 "行番号 = " + #STR(#行番号) + " を削除します。" , &OK
 if ( &OK = 1)
   行削除
 end
手続き定義終了

1行だけ削除するのだから、いちいち絞り込まなくてもいいと思います。

(行セレクタを使っての削除の方が、複数行選べるし、誤って削除されなくていいとは思いますが・・・・)
19958 Re:イベントでの行削除の記述を教えてください 通りすがり 2003/04/15-21:16
記事番号19957へのコメント
終端行での処理を忘れていました。

手続き定義開始 cmd_del()
 変数宣言 自動, 整数{&OK}
 メソッド呼び出し @フォーム.更新モード設定(0)
 if ( .not #終端行)
   確認 "行番号 = " + #STR(#行番号) + " を削除します。" , &OK
   条件 ( &OK = 1) 行削除
 end
手続き定義終了


19959 Re:説明不足でした。 悲しげ 2003/04/15-21:49
記事番号19956へのコメント
katsuyoshiさん wrote

>悲しげさんにまた怒られそうですが

いえいえ、趣旨は判っていましたが、複数行対応と云うことも含めて、
行セレクタ利用の方もなかなか便利ですよ、と云いたかっただけです。

あと「他の人に使わせる」と云うことで2点ほど。
ひとつは、行セレクタのことくらいは積極的に説明して覚えてもらった方が断然いいと思ったこと。(^^;)
もうひとつ、うっかり[Del]キーを押された時の対策を取っておいた方がいいと思います。

で、私ならこうするかな、と云うことで、

1)まずフォーム定義の編集対象表タブ/許可作業牡丹で行削除のチェックを外しておく。
(敢えて外さないと云う選択肢もあるが)

2)「キーダウン」イベントで
 var 自動,長整数{&更も}
 method @フォーム.更新モード取得(&更も)
 if(&更も=0 .and &仮想キーコード=46) /*[Del]キー*/
  &処理中止=1
  手続き実行 行削除()

3)あとは別掲の通りすがりさんの手続き定義でいいと思います。
でも、ついでに書いてしまえば(^^;)

手続き定義開始 行削除()
 var 自動,長整数{&確認}
 if(#EOF)
  確認 "終端行では実行不可!"
 else
  確認 "行番号 = " + #STR(#行番号) + " を削除します。",&確認
  条件(&確認<>1) return
  確認 "本当に削除してしまいますよ?",&確認
  条件(&確認=1) 行削除
 end
手続き定義終了

なお、この手続き定義は「キーダウン」イベントとコマンドボタンからと共用で呼び出すことができます。
その際のコマンドボタンの機能等は

1 実行条件  .not #EOF    (実行条件は「その他」内にあります)
2 表示    確定する
3 手続き実行 行削除
19960 行セレクタ選択反転と現在処理対象行 悲しげ 2003/04/15-22:06
記事番号19959へのコメント
ちなみに、#19943で

>行セレクトで行を選択して削除ボタンを押して削除することに
>・・・・
>削除対象レコードのどの項目にフォーカスがいても

のように述べられてますが、厳密に云うと、行セレクタで選択した行と
現在の処理対象行はイコールではありません。試してみるとお気づきになると思いますが、
例えば2行目の行セレクタを選択反転させたまま、
レコードポインタを3行目に移すことも可能です。
この状態で、マウス右クリックメニューからの行削除で削除されるのは
2行目で、別掲で(私も含めて幾人かが)挙げたやり方だと3行目が削除されます。
この点は承知しておいた方が、あとでレレレのおっさんにならずにすみます。
この訳は、行セレクタは、現在処理対象行に限らず、
複数行にも対応できることから来ているような気がします。

19961 Re:苦労するだけではないでしょうか? ONnoji 2003/04/15-22:47
記事番号19956へのコメント
katsuyoshiさん
>行セレクタをクリックして行削除は自分で使う場合は問題ないのですが
>他の人に使わせる場合行セレクトとはから説明しなければなりません。

行セレクタを選んでから、[削除]ボタンを実行するというのは普通ですよね。
使う人には、このような作法(?)を覚えてもらった方が、
長い目で見たら、将来的には良いのではないでしょうか?

>そうではなく、その1行のどのオブジェクトにフォーカスがあっても
>行削除ボタンをクリックしたらその行が選択され削除されるように
>したいのですが。

使う人がDOSに慣れていて、Windowsに慣れていないからと言って、
それを丁寧にフォローしていたならば、
いつまでたってもkatsuyoshiさん苦労するだけではないでしょうか?

思ったことをそのまま書いてしまいましたが・・・(^^ゞ

katsuyoshiさん、つまらないことを書いてすいません。(^0_0^)

19963 Re:行セレクタ選択反転と現在処理対象行 悲しげ 2003/04/15-23:54
記事番号19960へのコメント
ちょっと補足訂正です。(^^;)

>のように述べられてますが、厳密に云うと、行セレクタで選択した行と
>現在の処理対象行はイコールではありません。試してみるとお気づきに
>なると思いますが、例えば2行目の行セレクタを選択反転させたまま、
>レコードポインタを3行目に移すことも可能です。
>この状態で、マウス右クリックメニューからの行削除で削除されるのは
>2行目で、別掲で(私も含めて幾人かが)挙げたやり方だと3行目が削
>除されます。

この状態で2行目が削除されるのは、マウス右クリックメニューからの
行削除の他に、ONnojiさんの#19946もそうでした。牡丹の機能として、
「行削除_指定行」を使う場合は、行セレクタを反転選択させておかないと、
そもそも使用不可表示になりますね。
3行目が削除されるのは、牡丹から手続き実行でkevを使った通りすがりさん+私のやつです。
20002 そういえばそうですよね katsuyoshi 2003/04/17-12:43
記事番号19961へのコメント
ONnojiさんありがとうございました。
>行セレクタを選んでから、[削除]ボタンを実行するというのは普通ですよね。
>使う人には、このような作法(?)を覚えてもらった方が、
>長い目で見たら、将来的には良いのではないでしょうか?
>
>使う人がDOSに慣れていて、Windowsに慣れていないからと言って、
>それを丁寧にフォローしていたならば、
>いつまでたってもkatsuyoshiさん苦労するだけではないでしょうか?
>
>思ったことをそのまま書いてしまいましたが・・・(^^ゞ
>
>katsuyoshiさん、つまらないことを書いてすいません。(^0_0^)
>
確かにそうかもしれません。
我が職場には桐を使っている人がいないためにそんなことを考えました。
そういえばEXCELも同様な方法で行削除しますので慣れてもらうことにしたいと思います。
お騒がせしました。
今後とも宜しくお願いします。
遅くなり申し訳ありませんでした。


20003 やさしさの押し売りかな? katsuyoshi 2003/04/17-12:53
記事番号19963へのコメント
悲しげさん いつもいつもお世話になっています。
ONnojiさん、通りすがりさんもほぼ同じことをアドバイスして頂きました。
行削除の基本は行セレクタで選択して削除ボタンが無難のような気がしてきました。
桐を使ったことのない人にちょっと優しさを押し売りしようとしていたみたいです。
EXCELもそうですよね。
複雑にして後から悔やんでも後の祭り。
できるだけシンプルに行きたいと思います。
お騒がせして申し訳ありませんでした。
まだまだ悩みは続いています。
何とか頑張りますので今後ともご指導下さい。
遅くなり申し訳ありませんでした。

20004 ありがとうございました。 katsuyoshi 2003/04/17-12:59
記事番号19958へのコメント
通りすがりさんありがとうございました。
悲しげさん、ONnojiさんと3人の方々のご指導がほぼ同じでした。
使う人に優しさの押し売りをしようとしていたみたいです。
行セレクタで選択して削除ボタンで削除で行きたいと思います。
今回通りすがりさんからご指導頂いたことは次の機会に利用させて頂きたいと思います。
貴重な時間をさいて頂きありがとうございました。
いま挑戦しているシステムはまだまだ完成しません。
今後ともご指導よろしくお願いします。
ありがとうございました。

戻る