• 締切済み

Delphiの変数の使い回し。

初心者が言い訳にならない事は分かっていますが、教えてください。 書籍を1冊買ったのですが、あまりピンとこなくて。 Button1Clickでテキストボックスの値と今の時間を足した結果を表示させています。 これはクリックするたびに、その作業が行われるのですが、この値の一番最初の値をキープしたまま、別の所で使いたいのですが、方法が分かりません。 if文で変数の中身があったら、古いデータのまま、とかもできるとは思うのですが、HPや書籍には関数や変数の説明はしてあったのですが、こういった実践的な説明が載っているHPがみつからなくって。 よろしくお願いします。

noname#16046
noname#16046

みんなの回答

  • dekopa-
  • ベストアンサー率42% (161/378)
回答No.3

publicでBoolean、TDateTimeの2つの値を保持。Booleanはコンストラクタでfalseに初期化しておき、代入時にtrueへ。TDateTimeはfalseの時だけ代入する。 とやれば、form1(デフォルトなら)を参照出来る位置で古い値を保持出来ます。 更に別の方法。上記変数をprivateに変え、privateでTDateTime型のsetメソッドとgetメソッドを用意し、publicなTDateTime型プロパティを定義します。 getメソッド内で上記の「falseならtrueにした上で代入」と定義し、setメソッドはそのまま返せば、最初の値だけ代入可能で、後は参照だけできるプロパティができます。 プロパティのメリットは「Booleanで代入の可否を判定する」というロジックが外部から見えない事です。さらに代入部分が1カ所になるので修正も楽です。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

イベントの外にフォーム変数とかで変数を作っておきます。 初期値(初期化)でマイナス(とかNULL)にしておいて if で値を調べて、マイナスだったら値をクリックしたタイミングで値を設定してそうでなかったら設定しません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

今Delphi を使っていないので、見当違いだったらすみません。 時間のデータということなので、マイナスは無いと考えられるのであれば、 初期値としてマイナス(未設定の意味)を設定しておくとか、 あるいは、そういう、時間を直接扱うような変数ではなくて、 文字列形式で保存するようにしておけば、 未設定の場合"" を設定するとか方法は色々あると思います。

noname#16046
質問者

補足

初期値をマイナスにしても、クリックするたびに、Now(と加工)により現在の時間+αが変数に入ります。 クリックするたびに、中の変数は変えたくないのです。 一番最初にクリックしたのが、例えばNowにより変数の値が06/03/12 09:32:50だったとしたら、次ぎにクリックした時は、06/03/12 09:33:15に変わってしまいます。 イベント駆動型のプログラムなので、特殊な変数化させる事、もしくは単純な仕組みで、値を変わらないようにできる仕組みがあるのかな?と素人は思ったのです。 あ、FormCreateの際に値をキープすれば、イベントに巻き込まれない形になるのか。 それと定数の値を変数にしたりできるのかな?

関連するQ&A

  • 変数の値について

    変数の値について教えてください。 VB2010 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim A As Single A = 2.0 MsgBox(A) End Sub 上記のプロシジャを実行するとメッセージボックスに2と表示され 2.0と表示しません。 2.0と表示させるには、どのようにすればよいなでしょうか。

  • プロシージャをまたいて変数を扱いたい!

    こんばんは! プロシージャ間での変数の取り扱いについて読んでいてよく分からないので教えて頂きたいです。 現在、ユーザーフォームにて下記のコードを記述していますが、テキストボックス1に表示するiの値を初めは50として、正解ならiに1を加算、不正解ならi から1を減算して、テキストボックス1の内容を更新するようにしたいのですが、どのように記述すればよろしいでしょうか。 ----------------------------------------------- private sub userform_initialize() Textbox1 = int(i) end sub ----------------------------------------------- private sub commandbutton1_click() If 条件式 then "正解" else "不正解" end if call userform_initialize() end sub ------------------------------------------------- commandbutton2 以降省略

  • tagの値

    ボタン1を押すと変数に1を ボタン2を押すと変数に2を・・・ という具合にしたいのですが、いろいろしてみましたが、分かりません。分かる方教えてくだい。 (tagには値を入れてあります。) Button1_Click、Button2.Click~ Label1.Text = Tag や Button1_Click、Button2.Click~ Label1.Text = Me.Tag だと、なぜかフォームのtagの値が入ってしまいます。 Button1_Click~ Label1.Text = Button1.Tag Button2.Click~ Label1.Text = Button2.Tag だとソースが長くなってしまいます。 ちなみにVB.NETです。

  • 変数とループを使ったマクロについて

    恐縮ですが、ご教示をお願い致します。 comboboxの値を空白のtextboxに貼り付けるものです。 本を片手にマクロを作成していたのですが、上手くいかず困っております。 作成したマクロ Private Sub CommandButton100_Click() '入力値のチェック If ComboBox1 = "" Or ComboBox2 = "" Then GoTo 998 '空白ボックスを検索しデータ入力 If TextBox11 = "" And TextBox12 = "" Then TextBox11 = ComboBox1 TextBox12 = ComboBox2 GoTo 999 End If If TextBox21 = "" And TextBox22 = "" Then TextBox21 = ComboBox1 TextBox22 = ComboBox2 GoTo 999 End If If TextBox31 = "" And TextBox32 = "" Then TextBox31 = ComboBox1 TextBox32 = ComboBox2 GoTo 999 End If ↓ ↓  以下50個あります。 ↓ If TextBox501 = "" And TextBox502 = "" Then TextBox501 = ComboBox1 TextBox502 = ComboBox2 GoTo 999 End If 998 MsgBox "入力値に誤りがあります 999 End Sub とてつもなく長くなってしまいました。 変数をループを使って色々やってみたのですが、どうにもならず。。。 簡単に変数及びループを使用して纏める事は出来る物なのでしょうか? よろしくお願いいたします。

  • 変数の宣言?

    以下のように変数の練習をしていたのですが、document.aaa.y.valueを右辺に持ってこないやり方っていうのはあるのでしょうか? また、ifの中身についてなのですが、一応これでも動くんですけど文法的にはどうなのでしょう?お願いします <html> <head> <title>変数の練習</title> <script language="JavaScript"> <!-- function test() { var x= document.aaa.y.value; document.aaa.y.value=x*1+1; if (document.aaa.y.value == "10") { document.aaa.y.value=0; } } //--> </script> </head> <body> <form name="aaa"> カウント:<input name = "y" value=0> <input type="button" value ="+1" onClick = "test()" > </form> </body> </html>

  • JavaScriptの値を、cgiに渡す方法を教えてください。

    JavaScriptの値を、cgiに渡す方法を教えてください。 jsファイルの変数に、テキストボックスの入力値が入っています。 それを、cgiに渡して、その変数の値を、ファイルに 書込みたいと考えています。 __test.html_________ <head><script src="keep.js"></script></head> <form name="f1" action="keep.js"> <input type="text" name="a_text"> <input type="button" value="クリック" onclick="keep()"> </form> _________________________ ___keep.js_______________ function keep() { var a_text = document.f1.a_text.value; ■この変数「a_text」をcgiファイルに渡したいです。 } __________________________ __●.cgi_______________ ■なんだかの方法で、上記keep.jsの変数、a_textを取得して、 この●.cgiでファイルをopenして、a_textの値を 書込みたいです。 ______________ よろしく、お願いします。

  • Access2000でTextBox変数の代入

    Access2000でTextBox変数を作成し、条件に応じて フォーム上に配置した2つのテキストボックスをその変数に代入したいのですが、うまくいきません。 Public tBox as TextBox If i = 1 Then Set tBox = テキスト1 ElseIf i = 2 Then Set tBox = テキスト2 End if ※ テキスト1、テキスト2はフォーム上に配置した テキストボックスの名称 このコードを実行すると、テキスト1は テキスト1.Textと解釈され、Textプロパティに何も設定 されていない場合、tBoxにはNULLが代入されます。 Textプロパティの値ではなく、テキストボックスオブジェクトそのものを変数に代入するにはどうすればよいのでしょうか。 ご教授お願いします。 環境は OS:Windows2000 Professional   Access2000 です。

  • EXCELでの変数によるMacro自動実行について

    すいませんが教えてください・・・・・・ EXCELシートにツールボックスより、コマンドボタンを2つ配置しました。 (AUTOMATICはPublic変数で標準モジュールで定義しています Dim AUTOMATIC As Boolean ) ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() AUTOMATIC = True End Sub CommandButton_2 : Private Sub CommandButton2_Click() AUTOMATIC = False End Sub ------------------------------------------------------------------ あとはEXCELを起動中に、AUTOMATICが Trueでセル(例えばA2のセル)の 値が100のときには Macroを起動したいのですが、どこにどう記述したら いいか教えて欲しいのです。 ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() if Cells(2,1) = 100 then 'A2はCells(2,1) Macro実行 end if End Sub とAUTOMATICを使用せずに記述しても、毎回CommandButton_1をクリックしな ければMacroが起動することができないので煮詰まってしまいました。 (一度CommandButton_1をクリックしておくとあとはA2セルを監視するだけ でMacroを起動させたい) すいませんがわかる方、教えていただけないでしょうか よろしくお願いします。

  • ExcelVBA ユーザーフォーム間の変数について

    UserForm1のコントロールボタンbtn1又はbtn2をクリックするとUserForm2を開く。 UserForm1にはテキストボックスtxtN1、txtN2がある。 UserForm2のテキストボックスtxtN3に入力された値をbtnDecideをクリックすると、 UserForm1に自動入力するようにする。 その際btn1をクリックしてUserForm2を開いた場合はtxtN1に、btn2をクリックして開いた場合は txtN2に自動入力されるようにする。 以下のようにコードを組んでみました。 UserForm1のコード Public Number as integer Private Sub btn1_Click() Number = 1 UserForm2.Show End Sub Private Sub btn2_Click() Number = 2 UserForm2.Show End Sub UserForm2のコード Public Number as integer Private Sub btnDecide_Click() If Number = 1 Then UserForm1.txtN1 = txtN3.Text else:Number=2 UserForm1.txtN2= txtN3.Text End If Unload Me End Sub 以上になります。 どうもpublic 変数NumberがUserForm2を開いた段階でリセットされているようなのです。 何かいい方法はありますでしょうか。 教えていただける方がいましたらよろしくお願い致します。

  • C# form

    どうしても解らないので,ご質問させて頂きます. 例えば,下記のようにform11で       if (_Button.Name == "button29") { but = 29; } if (_Button.Name == "button30") { but = 30; } として、butに何らかの値をいれて,この入れた値をそのままform2でも 使用したいのですが,どのようにすれば良いでしょうか? ご教示よろしくお願いいたします

専門家に質問してみよう