ヴァルマリノフは、あなたの質問に良い答えを与えているようです。
あなたの質問に直接答えることはできないが、何か間違いを避けるのに役立ついくつかのポイントを追加したいだけです。
は、あなたは、リストボックスのItemIndex
ランダム、有効な値に設定するために使用するいくつかのコード
self.ListBox1.ItemIndex := Random(ListBox1.Items.Count)
を持っています。これに関するトラブルを求めているものがいくつかあります:
1. Random
online help for the Random
functionがランダムがランダムに返し、Delphiコードで
を言うを使用するために間違った方法は、範囲内の数値0 < = X <範囲。範囲が指定されていない場合、結果は実数型乱数のListBoxの場合
0 <= X < 1.
は、有効なItemIndexの値の範囲は0..Items.Count - 1
ある範囲内にあります。しかしRandom
は小数部を返すことができますので、あなたが望むものを書くためのより良い方法がある:
そのように呼ばれ
ListBox1.ItemIndex := Trunc(Random(ListBox1.Items.Count));
、Random
はListBox1.Items.Count
以下の値、およびTrunc
破棄小数部への呼び出しを返します。
2. self
の不要な使用。
あなたのコードには、self
修飾子を付けて自由に振りかざします。そのようなself
を使用しなければならないのは、通常、悪いか粗雑なコーディングの兆候です。あなたのTForm1.AddALL
で
、最初の行にself
は、あなたが参照しているListBox1
のインスタンスがあなたのTForm1
上TListBox
コンポーネントである1、というよりも範囲とすることができるいくつかの他のListBox1
変数であり、コンパイラ(例えばに指示します行がコンパイルされると、ListBox1
というグローバル変数)。しかし、その問題を回避する方法は、最初に他のListBox1
をスコープに入れないようにすることです。
self.
のすべてのインスタンスを削除することをお勧めします。データセットRecordNumber
を設定
3.避け最後に、TClientDataSet
はあなたがRecordNumber
の値を指定することができたという事実に頼るのが習慣に取得しない、それはめったに良いアイデアといくつかのデータセットではありませんタイプはそれをサポートします。
あなたはランダムなレコードに移動したい場合は、
Dataset.First;
DataSet.MoveBy(Random(X));
は私がベースの、有効な、ランダム、レコードに移動するために、引数がX
Random
にどうあるべきか動作するようにあなたにそれを残して、より良い使用オンラインヘルプがRandom
について何を言いますか?
そして、どのように 'AddALL()'が何をしているのか、読者はどのように考えていますか? – MartynA