「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:2
昨日:4
総数:2316
現在:8


テキストボックスへの入力

ページOpenOffice.org FAQの登録ページ
投稿者
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2008-08-28 23:48:11 (木)
OSWindows XP,2
依存するページfaq/4/684、976
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

faq/4/684や976を見ながら、"数量"か"単価"のテキストボックスから離れると合計金額を"合価"ボックスに入れるようなものを作ろうと思っています。
Delphi(昔々のVer5の頃ですが)なんかだと
 合価.Value = 数量.Value * 単価.Value
という形でいけたはずでしたが、「親クラスから・・・継承して・・・」と、なんかとんでもない手続きを踏まされるみたいで、まあ、タダで使わせてもらってるので今後の発展に期待したいところですが。
faq/3/199でクエリを使うというのがありましたが、考えているような、入力した時に計算させる、と言うような使い方ができるのかどうか、いまいちよく分からなかった。単価と個数を入力しておいて、クエリを実行してそれぞれ答えを入力させる、というイメージしかわかなかったので、昔ながらの慣れた方法を考えた次第です。(Accessはぜんぜん触ってこなかった)

とりあえず、テキストボックスの値を変数に代入するのはできましたが、そこから先が進まない。

1 Longで宣言した「変数=変数×変数」の計算が「許可されない値またはデータ型、データの種類が一致していません」でエラーになる。何が足りないのでしょう?

2 結果をテキストボックスに入れたいのですが、faq/4/684の方のように成功しません。

それと、ここから先は内容が変わるので別に質問を立てたほうがいいのでしょうか?
とりあえずは、

3 現バージョンでは、プロパティでIMEの切替ができないということですが、Basicで「フォーカスを得た時」IME:on、「フォーカスを失った時」IME:offというのはできないものでしょうか?

4 実際に作りたいものは、もう少し入力項目が多く、必須項目でないものもあるので、途中でナビゲーターの「新しいレコード」ボタンを押すこともあるのですが、その場合最後に入力した場所に留まったままになる。レコード更新の際のイベントに「品名.SetFocus(一番最初に入力する項目に移動)」として、新規レコードの際には常に最初の入力項目にフォーカスを移す、と言うことは可能なのでしょうか?

よろしくお願いします。


とりあえず3について

M.Kamataki (2008-08-29 10:23:33 (金))

faq/4/1216「テキスト入力欄のIME制御」で回答しました。

テキストと数値の区別

ike@九州 (2008-08-29 11:57:31 (金))

1 テキストボックスから取得した文字はテキストです。数値へ変換しなければ数値として使えません。val(テキスト変数) として数値化します

2 テキストボックスの内容をソース元のテーブルに保存する場合

テーブルの該当フィールドに oform.updateString(テーブルでのフィールド番号,テキスト) する事で結果、テキストボックスに表示されます。
しかもテーブルのデータ型に合わせて自動反映されるようです。
例 日付の文字列を updatestring すると、テーブルではシリアル値で反映されてます。

テーブルとは関係ないテキストボックスの場合であれば
faq/4/684 の通りの手順になります

4 タブ順序の適切な設定で最後のデータ入力後は最初の項目にフォーカスが移ります。
最初の新規入力時のみフォーカスを最初の項目に設定するのは良く分かりません(クリックしてます)

上記に3点ついては、faq/4/1208 の business_sample3.odb にて実現させています。新規レコードの追加で試して、どのイベントに割り当てているのか、及びコードの参考になると思います

添付の List.PNG 内の oForm、oForm1 は同じものを取得しています
(どちらかで良いという事です)

Re:とりあえず3について

にゃんこ3匹 (2008-08-30 13:12:06 (土))

すでにあったのですね。見つけられませんでした。
これで1歩前進です。
ありがとうございました。

Re:テキストと数値の区別

にゃんこ3匹 (2008-08-30 13:35:57 (土))

1 テキストボックスから取得した文字はテキストです。数値へ変換しなければ数値として使えません。val(テキスト変数) として数値化します

「もしや」という想いはありましたが、整数宣言しているしぃ、変数には代入しているしぃ、また何かオブジェクトでも触らなくちゃいけないのかなぁ?と足踏みしていました。Delphi(Pascal)では変数に代入した時点でエラーになるので、もう少し早く気がつけたのですが・・・。

2 テキストボックスの内容をソース元のテーブルに保存する場合
昨日は色々試行錯誤しても失敗でしたが、今成功しました。何が違ったんだろう?
本番用ので再チャレンジしてみます。

上記に3点ついては、faq/4/1208 の business_sample3.odb にて実現させています。
「2」がようやく成功した(みたい)ので、これから取り掛かります。また、結果をUPします。

こんなに早くここまで進むとは、みなさまありがとうございます。
これからもよろしくお願いします。

OOo Basic での変数宣言

はにゃ? (2008-08-30 16:16:59 (土))

>「もしや」という想いはありましたが、整数宣言しているしぃ

OOo Basic で陥りがちな問題です。Dim で変数を宣言するときに次のようにしてありますが、このとき long になるのは iGouka だけです。

Dim iSuryou, iTanka, iGouka as long

三つとも long 型の変数として宣言するには次のようにそれぞれで指定します。

Dim iSuryou As Long, iTanka As Long, iGouka As Long

これに関しては OOo のヘルプの Dim の項目に記載があります。

ありがとうございました

にゃんこ3匹 (2008-09-04 21:14:21 (木))

回答はすぐにいただいときながら、返事が遅くなりましてすみません。

テキストボックスの値を取り出して計算して別のテキストボックスに入れるのは、一度はテストデータベースで成功したのですが、別の物で同じことをしても、途中経過をMsgboxで確かめている分には正しい答えになっていたのに、テキストボックスに入れたとたん「1」になる。何か入れ間違いをしたのかと目を皿のようにしてプログラムを調べたが違いが見つからない。変数の名前やテキストボックスの名前が違うくらい。そんなバカなと思いつつ、本番の方でやってみるとあっさり成功(まあ、当たり前といったら当たり前)。
で、プロパティやら何やら見てゆくと、どうも最初に試行錯誤して色々とプロパティシートを開いたり触ったりしているうちに、問題の結果を入れるテキストボックスの最大値が、あろうことか「1」になっていたのが判明。元の数値に直してやると当然、正しい答えが表示される。これで2日は無駄にしました。トホホ・・・。

IMEコントロールのほうもテストバージョンでは成功したが、他のデータベースで、「書式設定されたフィールド」のテキストボックスの「IME off」は成功するのに普通のテキストボックスの「IME on」が効かない。作者のコメントでBASEではコンテキストの取得が違うのでうまく動作しない、と言うのが見つかり(もう直っていますが)旧バージョンをダウンロードしてしまったのかと、拡張機能版の方をダウンして試してみようとイベントに結びついたマクロを入替えに行ったときになってようやく「?ん?」。なんと、「書式設定されたフィールド」のテキストボックスと普通のテキストボックスでは「フォーカスを得た時」の位置が違う(普通のテキストボックスは3行目、「書式設定〜」は1行目に「変更した時」と言うイベントが無いため2行目)。そのため、目では左の「フォーカスを得た時」の題字を見ていたが、右端のボタンは1つずれていた。マクロを選び終わった時に、左の題字と真ん中のテキストボックスとを確認してりゃ、その時点で分かったろうに、思い込みって怖いですね。ボタンを押し間違えてるなんて思いもしてませんでした。これで更に2日は無駄にしました。トホホホ・・・。

これで1・2に、おまけの3まであっさり解決していただきました。ありがとうございました。おまけの4については、FAQ/4/1208を紹介していただきましたが、やはりもう少し必要ですので改めて項を起こします。

いったん完了にします

M.Kamataki (2008-09-07 10:44:46 (日))

>おまけの4については、faq/4/1208を紹介していただきましたが、やはりもう少し必要ですので改めて項を起こします。

勘違いがあると思います。質問4については、当ページでも明確な回答はついていません。つまりどなたも質問4の回答として、faq/4/1208を紹介していません。

ただ、フォーム上の入力項目については、別質問とされるのであれば、当ページはいったん完了といたします。つまり、質問4以外は完了ということです。

最初の新規入力時のフォーカスを最初の項目に

ike@九州 (2008-09-08 12:12:17 (月))

フォームのイベントで "元に戻した後" にフォーカスを設定するマクロを割り当てる事で可能な事が分かりました。

フォーム名が "MainForm" で項目名が "txt日付" である場合

Sub focus_textbox
oDoc = ThisComponent
oDraw = oDoc.getDrawPage()
oForm = oDraw.getForms().getByName("MainForm")
oDocController = oDoc.getCurrentController() 
oTxtControl = oDocController.getControl(oForm.getByName("txt日付")) 
oTxtControl.setFocus()
End Sub

これで、「新しいレコード」ボタンを押した時にフォーカスを任意の場所に設定できます。

たびたびありがとうございました

にゃんこ3匹 (2008-09-09 23:08:14 (火))

>勘違いがあると思います。質問4については、当ページでも明確な回答はついていません。つまりどなたも質問4の回答として、faq/4/1208を紹介していません。
SetFocusの件だけでも解決して「ありがたや」ということからあのような書き方をしてしまいました。勇み足だったですね。
>最初の新規入力時のフォーカスを最初の項目に
で、「4」も解決しました。皆様本当にありがとうございました。
でも、次々に新たな問題が・・・。また新たな項でお世話になります。
よろしくお願いします。

お名前:
題名:


添付ファイル: file整数×整数Err.PNG 328件 [詳細] fileList.PNG 350件 [詳細] fileTESTデータベース.odb 441件 [詳細]