Autor Beitrag
Gromminger
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 28.02.06 15:43 
Hallo zusammen.

Beschäftige mich erst seit einigen Tagen mit .Net und WinForms. Daher eine Anfängerfrage, die Ihr sicherlich mir leicht beantworten könnt?!

Ich habe eine Listbox mit mehreren Einträgen erzeugt. Wenn ich die den dritten Eintrag auswähle, so soll automatisch eine wave-Datei names 003.wav gestartet werden.

Wie ich eine wave-Datei abspielen lasse, habe ich bereits mittels DirectX gelöst.

Bitte um Eure Hilfe.

Danke.

Gromminger
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 28.02.06 16:04 
Und was ist jetzt die Frage? :gruebel:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Gromminger Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 28.02.06 16:09 
meine Frage lautet:

wie löse ich es,
dass beim Anclicken eines bestimmten Eintrages die zugehörige wave-Datei abgespielt wird?!

dh konkret, wass muss ich unter

ausblenden C#-Quelltext
1:
2:
3:
4:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
...
}


programmieren?

Danke und Gruss,

Gromminger

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 28.02.06 16:13 
Hallo!

Bitte fasse folgendes als gut gemeinten Rat auf: Du machst den Fehler, den viele Neulinge in Foren machen. Du machst Dir nicht klar, dass die Leute im Forum nichts über Dein Programm wissen und Dinge nicht wissen, die Dir inzwischen selbstverständlich erscheinen. Versuche immer, dein Posting noch einmal so lesen, als wüsstest Du nichts über Dein eigenes Programm und überlege dann, ob Du es auch so verstehen würdest!

In diesem Fall: Man kann Dir die Frage nich beantworten, wenn man nicht weiß, was in der Listbox drin steht. Hast Du da die Titel drin stehen, die Dateinamen, etc. Außerdem: Sind die Einträge in der Listbox irgendwie mit den Dateinamen verknüpft? All solche Sachen muss man wissen, um Dir helfen zu können.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Gromminger Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 28.02.06 16:18 
>In diesem Fall: Man kann Dir die Frage nich beantworten, wenn man nicht weiß, was in der Listbox drin steht.

Ich habe den Inhalt eines Dokumentes zeilenweise ausgelesen
und zeilenweise in die Listbox importiert.
Eine Zeile hat zB folgende Gestalt "0007 - Officier NRBC: recu"

Dazu gehörig ist eine Wave-Datei 007.wav, die auf der HDD abgelegt ist
und durch Clicken des entsprechendende Eintrages abgespielt werden soll.

Ist das konkret genug formuliert?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 28.02.06 16:25 
Okay, mit anderen Worten:

Du musst die Zahl auslesen, die vorne im gewählten Beitrag steht und ein ".wav" dran hängen, richtig?

Den ausgewählten Eintrag erhälst Du mit listBox1.SelectedItem und in Stringform mit listBox1.SelectedItem.ToString().

Die Position des ersten Leerzeichens in diesem String erhälst Du mit aString.IndexOf(" ").

Wenn Du die Position des Leerzeichens kennst, ist alles, was davor steht, Deine Zahl. Also mit aString.SubString(start, length) die Zahl auslesen.

Hoffe, das hilft Dir erst einmal weiter :-)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Gromminger Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 28.02.06 16:44 
Hi und danke für den Tip!

Habe folgendes ausprobiert:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListBox test = (ListBox)sender;
            string msg = test.Items[test.SelectedIndex].ToString();
            MessageBox.Show(" You selected index "
                + listBox1.SelectedIndex.ToString()
                + " Value is " + msg);
        }


Somit bekomme ich nun den Index sowie den Inhalt der einzelnen Zeile ausgegeben.
Wie würdest Du / würdet Ihr nun das Abspielen der einzelnen Waves realisieren?

Macht es Sinn, dies über eine IF-Anweisung zu lösen,
dh "wenn der Index = 0, dann spiele 001.wav" etc?

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 28.02.06 17:41 
Ich habe Dir oben ziemlich genau geschrieben, wie ich das machen würde.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Gromminger Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.03.06 16:47 
Hi.

Habs hinbekommen, wie Du beschrieben hast.

Wenn ich jetzt beispielsweise 3 Einträge zugleich auswählen will,so muss ich meine Listbox auf "Mulitsimple" umstellen. Wie kann ich es dann umsetzen, dass er die Einträge in der Reihenfolge ihres Indizes abspielt?

Danke und Gruss,

Gromminger
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 01.03.06 17:06 
Meinst Du den Index in der Listbox oder den Index, der auch im Dateinamen wiederzufinden ist? Falls erstes: Schau Dir mal listBox1.SelectedIndices an. Falls letzteres: Sind die Einträge in der Listbox sortiert?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Gromminger Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 02.03.06 15:15 
Hi.

Wenn ich mit listBox2.SelectedIndices arbeite,
so kann ich zwar mehrere Elemente der Listox auswählen,
es wird aber nur die zum ersten ausgewählten Element
zugehörige wave-Datei abgespielt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
foreach (int i in listBox2.SelectedIndices)
            {

                AudioLogEntry ale = (AudioLogEntry)(listBox2.Items[i]); 
                ourAudio = new Audio(ale.Path);
                /
                if (ourAudio != null)
                {
                    ourAudio.Play();
                }
            }


Was muss ich hier noch verändern?

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 02.03.06 15:57 
Hm. Auf Anhieb kann ich da keinen Fehler entdecken. Hast Du mal geschaut, ob die Schleife auch tatsächlich mehrmals durchlaufen wird?

//edit: Bitte nutze hier im Forum die C#-Tags, um Deinen Sourcecode damit einzuschließen. Dadurch wird das Syntaxhighlighting aktiviert und Leerzeichen bleiben erhalten.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Gromminger Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 02.03.06 16:26 
Hallo Leute.

Es funzt (geht bestimmt auch einfacher):

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
foreach (int i in listBox2.SelectedIndices)
            {

                if (ourAudio != null)
                {
                    while ((ourAudio.State == StateFlags.Running) && (ourAudio.CurrentPosition < ourAudio.Duration) )
                    {
                        System.Threading.Thread.Sleep(15);
                        System.Windows.Forms.Application.DoEvents();
                    }
                }
                AudioLogEntry ale = (AudioLogEntry)(listBox2.Items[i]); 
                ourAudio = new Audio(ale.Path);
                if (ourAudio != null)
                {
                    ourAudio.Play();
                }
            }

---

Nochmals vielen Dank.

Gromminger

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 02.03.06 16:54 
Hallo!

Ah, ich wusste nicht, dass die Play-Methode sofort zurückkehrt. Ich dachte, der spielt erst zu Ende.

Wenn ich das richtig sehe, wartest Du jetzt die ganze Zeit, bis das Lied zu Ende gespielt hat. Das finde ich wenig elegant. Besitzt ourAudio nicht irgendein Event, welches ausgelöst wird, wenn eine Datei zu Ende gespielt hat? Diesem könntest Du dann eine Methode zuweisen, welche dann jeweils die nächste Datei abspielt.

Grüße
Christian

P.S.: Ich möchte nochmals auf die C#-Tags hinweisen. Möchte die nicht jedes Mal für Dich setzen müssen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".