ここで私は本当に愚かかもしれませんが、私の脳は空白になっています.
スライダー バー (Int32 値を使用) がありますが、それを使用して音楽の曲 (mm.ss) の位置を選択したいと考えています。
また、スライダーが表示している値をその上のラベルに出力して、スライダーが何に設定されているかを簡単に確認できるようにします。
誰にも提案はありますか?
int 値を 10 進数に変換してから 60 で割ることを考えました。
ちなみにC#でやっています。
ここで私は本当に愚かかもしれませんが、私の脳は空白になっています.
スライダー バー (Int32 値を使用) がありますが、それを使用して音楽の曲 (mm.ss) の位置を選択したいと考えています。
また、スライダーが表示している値をその上のラベルに出力して、スライダーが何に設定されているかを簡単に確認できるようにします。
誰にも提案はありますか?
int 値を 10 進数に変換してから 60 で割ることを考えました。
ちなみにC#でやっています。
値は何int
を表していますか?曲の秒数の場合は、次を使用する必要があります。
TimeSpan time = TimeSpan.FromSeconds(seconds);
string text = time.ToString(@"mm\.ss");
を使用するのdecimal
は非常に悪い考えです。秒数の形式は、分数の小数と同じではありません。たとえば、分数の小数としての10.50分は10分30秒であり、10分50秒ではありません。これは、私が知る限り、あなたが望むものです。
TimeSpan
.NETで期間を表す自然な方法です...これが、分と秒での書式設定をサポートするタイプである理由です。
それを 10 進数に変換すると、希望どおりに表示されません。たとえば、4 分半は 4:30 ではなく 4:50 と表示されます。
時間を分と秒に分割し、それらをフォーマットします。
int minutes = time / 60;
int seconds = time % 60;
string formatted = minutes.ToString() + ":" + seconds.ToString("00");
編集:質問の範囲を誤解しましたが、参考になる場合に備えて残します。
プロセスを説明するための不自然な例を次に示します。
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");
曲の長さを内部的に秒単位で表す必要があります (これは int に保存できます)。実際に表示するにはsong_length / 60
、分を取得します (これは整数除算と呼ばれ、結果を返し、分数を破棄します。たとえば100/60 = 1
)。
その後、song_length % 60
(%
はモジュロ演算子) で秒を取得できます。
編集: c# タグが表示されませんでした。Jon Skeet の答えは、c# の方が適切です。