Autor Beitrag
katti
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 21.08.07 16:20 
Hallo!
Ich würde gerne ein sprachgesteuertes Email-Programm mit Hilfe von C#, .NET und SAPI 5.1 erstellen und hab da ein paar Probleme:

Es soll ne Übersichtsseite geben, auf der alle erhaltenen Emails (erstmal als Tabellendummy) aufgelistet werden mit Absender, Betreff usw.
In dieser Tabelle soll navigiert werden, mit Sprachbefehlen will ich also zwischen den einzelnen Tabellenzeilen hin- und herspringen (hoch und runter) und die aktuell selektierte Zeile soll als Sprache ausgegeben werden und später in einem neuen Fenster die weiteren Details der Mail angezeigt werden.

STATUS: Oberfläche is fertig, Tabelle hab ich als DataGrid und ne DataTable als Source

PROBLEM 1: Wie kann ich die aktuell selektierte Zeile abrufen bzw. den Inhalt der Tabelle an dieser Stelle? Also so, dass per Sprachausgabe beispielsweise gesagt wird: "selektierte mail von John mit Betreff news vom 15.08."
PROBLEM 2: Wie müssen die Sprachbefehle implementiert werden, damit also die Markierung eins nach unten rutscht, wenn ich "down" sage?

Eignet sich dieses DataGrid dazu überhaupt?
Bin noch nicht so fit mit SAPI und .NET, würde mich über Hilfe von euch freuen!!
Danke schonmal.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 21.08.07 21:22 
Das DataGrid ist tot, es lebe das DataGridView. Und das ist nicht nur ein Spruch, das DGV gibt dir viele zusätzliche Möglichkeiten beim Anzeigen und Formatieren von Daten und Zellen. Für einen Mailc-Client nicht unnötig, denke ich mal.
Da du eine DataTable verwendest, liegen deine Mails wohl in einer Datenbank. In diesem Falle würde ich dir aber direkt ein typisiertes DataSet empfehlen - einfach nützlich, die Dinger.

Zu I:
Alle aktuell selektierten Zeilen erhälst du per SelectedRows. Kann der User nur eine gleichzeitig anwählen, nimmst du eben immer die erste - sofern natürlich SelectedRows überhaupt ein Item enthält. Von dieser DataGridViewRow holst du dir nun direkt per Cells die Daten oder per DataBoundItem das gebundene Objekt. Bei einer (typisierten oder untypisierten) DataTable dürfte das eine DataRowView sein. Über deren Row-Property kommst du dann schließlich und endlich an die eigentlichen Daten.

Zu II:
Du musst oben erwähnte selektierte Zeile in DGVs Rows-Eigenschaft suchen, setzt bei dieser IsSelected auf false und machst das Gegenteil bei der nächsten Zeile. Oder aber du simulierst einfach die entsprechende Pfeiltaste :wink: .
katti Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 22.08.07 14:51 
mh, dann versuch ichs mal mit dem dataGridView. Wenns nich hinhaut, kommt sicher schnell noch ne Frage ;-)
Als DataSource hab ich erstmal nur eine ganz simple DataTable ohne DataSet, in der nur so zum Testen 3 Zeilen innerhalb des Programmcodes reingeschrieben werden. So reicht mir das auch im Moment.

Aber nochma zu 2.: Wie erkennt das Programm denn, was ich sage? Die Implementierung von dem SpeechRecognizer erschließt sich mir aus der Hilfe vom SAPI nich wirklich.
katti Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 24.08.07 08:21 
ok, ich habs gepackt und kann mir die selektierte Zeile ausgeben lassen. Habs verpeilt, dass es ja noch den Aufruf row1.Cells[0].Value.ToString(); gibt ;-), dann bekomm ich auch das richtige zurück.
Und als DataGridView hatte ichs auch schon, also doch nich wie zuvor geschrieben als dataGrid.

Ich find das aber irgendwie umständlich, naja egal, es tut das, was es soll.

Das Programm reagiert jetz auch, wenn ich mit ihm rede ;-), aber wie simuliere ich denn das KeyDown-Event, also wie rufe ich das auf? Ich hab zwar das Ereignis gefunden, aber das kann man nur irgendwas zuweisen. Weiß jemand, wie das geht? Oder muss ich das doch so machen, wie Khabarakh das beschrieben hat? Also mit dem isSelected auf False setzen usw.

Danke!!!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 24.08.07 10:27 
user profile iconkatti hat folgendes geschrieben:
Ich find das aber irgendwie umständlich, [...]
Was denn genau? Denn ich kann mich daran erinnern, das irgendwann auch schon einmal gedacht zu haben ^^ .
Zitat:
aber wie simuliere ich denn das KeyDown-Event, also wie rufe ich das auf?
Das bringt dir nichts, denn das DGV setzt nicht auf dieses Event auf. Suche bei Google C# SIMULATE KEYSTROKE
katti Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 25.08.07 17:55 
user profile iconKhabarakh hat folgendes geschrieben:
Was denn genau? Denn ich kann mich daran erinnern, das irgendwann auch schon einmal gedacht zu haben ^^ .

Naja, normalerweise dachte ich eben, dass man sich einfach nur die selektierte Zeile aufruft und davon irgendwelche Komponenten. Aber man muss halt erst dieses selectedRow-Ding erstellen, davon den ersten Eintrag und dann davon die Komponenten.
Außerdem find ich umständlich, dass ich mir die Tabelle baue und dann die Datenquelle erstelle, und das in vielen komischen Fenstern. Is ja eigentlich nich sooo schwierig, aber ich hätts mir einfacher vorgestellt. ;-)

Zu dem keystroke hab ich das hier gefunden. muss dann ma ausprobieren, ob das geht. ich hoffs doch ma ;-)
ausblenden Quelltext
1:
SendKeys.Send("{ENTER}");