|
分類:[C#]
失礼します。motuと申します。 今、visual C# 2008にて、 WindowsMediaPlayerに字幕を付けるといったプログラムを作成しているのですが、 デバッグの段階でエラーが発生してしまいます。
そのプログラムが以下です。
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: private void checkBox1_CheckedChanged(object sender, EventArgs e) { int i; i=0; //checkbox1にcheckが入ると字幕表示 if (this.checkBox1.Checked == true) { //WMPファイルである、axWindowsmediaPlayer1の再生時間を取得、timeにいれる。 double time = axWindowsMediaPlayer1.currentMedia.duration; //timeに値がある限り while (time > -1) { time = axWindowsMediaPlayer1.currentMedia.duration; //字幕データであるdataGridView1([0,i]には時間、[1,i]にはその時間の字幕データ)に対し、適切なtimeの位置を探し出す。 if (Convert.ToDouble(dataGridView1[0, i].Value) < time && Convert.ToDouble(dataGridView1[0, i + 1].Value) > time) {//そのとき、字幕boxのtextBox2に字幕を表示 textBox2.Text = Convert.ToString(dataGridView1[1, i].Value); } if (Convert.ToInt32(dataGridView1[0, i].Value) > -1) {//もし、字幕データの末尾までいけば、再び頭から検索。 i = 0; } } } } :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: エラーは if (Convert.ToDouble(dataGridView1[0, i].Value) < time && Convert.ToDouble(dataGridView1[0, i + 1].Value) > time) の文に対し、
ArgumentOutOfRangeExceptionはハンドルされませんでした。 インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名:index
と、でてきます。
Cは扱っていましたが、C#の経験が浅く、無茶苦茶ともいえる文を書いているかもしれませんが、 どなたかエラーの解決方法か、さらによい字幕作成のアルゴリズムがあればご教授願えないでしょうか;;
|