3

ここで私は本当に愚かかもしれませんが、私の脳は空白になっています.

スライダー バー (Int32 値を使用) がありますが、それを使用して音楽の曲 (mm.ss) の位置を選択したいと考えています。

また、スライダーが表示している値をその上のラベルに出力して、スライダーが何に設定されているかを簡単に確認できるようにします。

誰にも提案はありますか?

int 値を 10 進数に変換してから 60 で割ることを考えました。

ちなみにC#でやっています。

4

4 に答える 4

6

値は何intを表していますか?曲の秒数の場合は、次を使用する必要があります。

TimeSpan time = TimeSpan.FromSeconds(seconds);
string text = time.ToString(@"mm\.ss");

を使用するのdecimalは非常に悪い考えです。秒数の形式は、分数の小数と同じではありません。たとえば、分数の小数としての10.50分は10分30秒であり、10分50秒ではありません。これは、私が知る限り、あなたが望むものです。

TimeSpan.NETで期間を表す自然な方法です...これが、分と秒での書式設定をサポートするタイプである理由です。

于 2012-06-07T16:01:11.510 に答える
1

それを 10 進数に変換すると、希望どおりに表示されません。たとえば、4 分半は 4:30 ではなく 4:50 と表示されます。

時間を分と秒に分割し、それらをフォーマットします。

int minutes = time / 60;
int seconds = time % 60;
string formatted = minutes.ToString() + ":" + seconds.ToString("00");
于 2012-06-07T16:02:02.467 に答える
0

編集:質問の範囲を誤解しましたが、参考になる場合に備えて残します。

  1. トラックの全長を秒単位で保存します。
  2. スライダーの位置を、可能な最大スライダー値の分数として計算します。
  3. トラックの長さ (秒単位) に 2) で得られた小数値を掛けます。これにより、トラックの開始からのオフセットが秒単位で与えられます。
  4. 3) の値を表示用にフォーマットします。

プロセスを説明するための不自然な例を次に示します。

int maxSliderValue = 100;
int sliderValue = 18;
int trackLengthInSeconds = 248;

float sliderFraction = ((float)sliderValue)/((float)maxSliderValue);
int offsetInSeconds = Convert.ToInt32(Math.Floor(trackLengthInSeconds * sliderFraction));
TimeSpan offset = TimeSpan.FromSeconds(offsetInSeconds);
string displayValue = offset.ToString(@"mm\.ss");
于 2012-06-07T23:16:19.660 に答える
0

曲の長さを内部的に秒単位で表す必要があります (これは int に保存できます)。実際に表示するにはsong_length / 60、分を取得します (これは整数除算と呼ばれ、結果を返し、分数を破棄します。たとえば100/60 = 1)。

その後、song_length % 60(%はモジュロ演算子) で秒を取得できます。

編集: c# タグが表示されませんでした。Jon Skeet の答えは、c# の方が適切です。

于 2012-06-07T16:02:28.870 に答える