Laden...

Forenbeiträge von Varrius Ingesamt 26 Beiträge

17.01.2011 - 17:51 Uhr

Hallo zusammen,

ich bin gerade dabei ein kleines Tool zu schreiben, das auf eine Serverapplikation zugreifen soll, allerdings gibt es diese in verschiedenen Versionen hier bei uns in der Umgebung. Aus diesem Grund habe ich eine Solution mit mehreren Proxy-Projekten und einem Proxy-Factory-Projekt erstellt. Hier mal eine kleine Visualisierung:

Tool.sln

  • ProxyV9.csproj
    Ref: ServerV9.Client.dll (GAC)
    Ref: ServerV9.Server.dll (local)
  • ProxyV10.csproj
    Ref: ServerV10.Client.dll (GAC)
    Ref: ServerV10.Server.dll (local)
  • ProxyFactory.csproj
    Ref: ProxyV9.dll (project)
    Ref: ProxyV10.dll (project)

Das ganze wird zwar kompiliert, kommt aber zu Runtimefehlern, da die lokalen Referenzen nur in einer Version vorhanden sind. Hier mal 2 Ansätze die ich versucht hatte, die aber nicht so wirklich funktionierten, vielleicht hab ich aber auch was falsch gemacht:

  1. Die Ergebnisse und lokale Referenzen der Proxy-Projekte mit ilmerge.exe zu einer Dll mergen.
    -> Bin nicht sicher warum es nicht funktioniert hat, möglicherweise auch ein zeitliches Problem, da das ilmerge erst nach dem Builden aller Projekte ausgeführt worden ist.
  2. Die lokalen Assemblies mit gacutil installieren, allerdings konnte ich diese dann trotzdem nicht als .Net-Referenz im Projekt hinzufügen. Muss man hier mehr machen, als nur "gacutil /i ServerV10.Server.dll" ?

Bin für Ideen oder Hinweise dankbar. Ich halte dies zwar nicht für ein seltenes Problem, nur leider hab ich keine Lösung im Netz bzw. hier im Forum gefunden 🙁
Vielen Dank schonmal,

Michael

31.10.2008 - 14:30 Uhr

Hallo,

ich plane auch das Zertifikat 536 abzulegen, aber habe auf die schnelle keine Vorbereitungsbücher für .Net 3.5 gefunden. Gibt es die noch nicht und fall nicht, kann wer Alternativen empfehlen? Würde schon gern auch die neuen Technologien verwenden und nicht noch das "alte" 2.0er Zeug.
Danke für eure Hilfe,

Varrius

08.11.2007 - 06:49 Uhr

Vielen Danke für die schnelle Hilfe 🙂
Wenn ich noch Probleme dabei habe, meld ich mich nochmal.
Gruß,

Varrius

07.11.2007 - 22:05 Uhr

Hallo,

ich hatte schon gesucht, aber leider nichts gefunden.
Ich möchte in ein ListView-Element per Strg+C bzw. Rechtsklick+Einfügen einen Text einfügen. Doch ich finde keine Eigenschaft die mir das erlaubt. Ist das überhaupt möglich oder muss ich einen Umweg machen?
Bei einer TextBox funktioniert das ja problemlos, aber mir fehlt dort die Möglichkeit den Spalten verschiedene Farben zuzuordnen 😉
Programmiere C# im .Net 1.1 Framework ( ist leider so).
Danke für eure Hilfe,

Varrius

30.08.2007 - 12:25 Uhr

Beim Server peeke ich nur, wobei das dem Client ja egal sein sollte, denn dort bleiben sie ebenfalls in der Sendequeue.
Zum auslesen am Server habe ich mir eine kleine Anwendung geschrieben, in der eine Liste der Messages angzeigt wird und man sich auch den kompletten Inhalt der Message anzeigen lassen kann.

Nach ein paar Tests haben wir rausbekommen, das sich der MSMQ-Service scheinbar ab und zu mal Disconnected und deswegen die Rückmeldung nicht empfangen werden kann. Bisher haben wir den Service nur per "..msmqadm start" aktiviert, allerdings haben wir per Hand festgestellt, wenn ein disconnecteter Service läuft, führt ein start nicht zum erneuten connecten. Ich versuche es jetzt erstmal den Service zu stoppen und dann zu starten, damit wieder eine Verbindung aufgebaut wird.

Wenn das Gerät zum Beispiel in den StandBy-Modus geht, wird sich wohl auch der MSMQ-Service disconnecten und bleibt das auch. Hierzu muss ich noch ein paar Tests durchführen.

30.08.2007 - 09:54 Uhr

Hallo,

ich habe eine mobile Anwendung in der ich XML-Meldungen per MSMQ an einen Server sende. Dazu benutze ich:


                MessageQueue messageQueue = new MessageQueue (queueName);
	messageQueue.Send (message, MessageQueueTransactionType.Single);
	messageQueue.Close ();

Die Messages kommen auch richtig beim Server an, nur wenn ich mir die MSMQ auf dem Gerät angucke sind die Messages noch enthalten und wurden nicht entfernt. Meine Vermutung ist jetzt eigentlich das das Problem nicht im Programm, sondern in der Einstellung der MSMQ bzw. von WM5 liegt.
Hat jemand eine Ahnung oder Idee, warum diese Meldungen auf dem Gerät nicht aus der MSMQ entfernt werden?
Vielen Dank,

Varrius

29.08.2007 - 09:09 Uhr

Hallo,

ich soll eine Anwendung anpassen, welche für eine Auflösung von 320x240 entwickelt wurde. Diese soll mit einer Auflösung von 640x480 arbeiten, was eigentlich nicht so schwer ist, denn eigentlich gibt es nur 1 Form die nicht so ganz mitspielen will. Das soll heißen die gesamte Anwendung skaliert sich entsprechend der Auflösung, nur diese eine spezielle Form wird so dargestellt, als ob es sich um eine 320x240 Auflösung handeln würde. Dadurch sind einige Buttons nicht mehr erreichbar, wodurch wichtige Funktionen nicht mehr ausgeführt werden können.
Bei der Form handelt es sich um eine selbst erstellte Klasse die von Form erbt.
Die Form verwendet eigentlich den AutoScaleMode wie die anderen Forms des Programms, deswegen kann ich dieses Verhalten nicht ganz nachvollziehen. Hier die Definition:


            this.AutoScaleDimensions = new System.Drawing.SizeF (96F, 96F);
			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
            this.ClientSize = new System.Drawing.Size(214,179);
			this.ControlBox = false;
			this.Controls.Add (this.tabControl);
			this.Controls.Add (this.startOrAbortButton);
			this.Controls.Add (this.hideButton);
			this.MinimizeBox = false;
			this.Activated += new System.EventHandler (this.OnActivated);
			this.tabControl.ResumeLayout (false);
			this.tabPage1.ResumeLayout (false);
			this.tabPage3.ResumeLayout (false);
			this.ResumeLayout (false);

Gibt es irgendeinen Grund warum sich das Programm so verhält?
Ich hatte auch schon probiert mit Screen.PrimaryScreen.Bounds.Heigth die Auflösung auszulesen und entsprechend die ClientSize zu ändern, doch dies hat keine Veränderung gebracht.
Falls es wichtig ist, ich verwende VS 2005, CF 2.0 und WM5 (auf dem Gerät).
Vielen Dank,

Varrius

02.07.2007 - 13:11 Uhr

Hi,

Original von unconnected
ka. ob das im CF auch geht, aber versuch mal:

  
deinFenster.WindowState = FormWindowState.Minimized;  
  

Das CF kennt nur die FormWindowState.Maximized und FormWindowState.Normal.

Original von sbertl000
Auf Windows Mobile wird das Fenster aber minimiert, wenn man auf das X klickt. Ein Ok rechts oben würde das Fenster schließen. Das kann man natürlich umstellen 😁

sbertl

Das stimmt, aber ich will auch das Fenster nur minimieren und nicht schließen, deswegen macht es nicht viel Sinn für mich

Form.MinimizeBox = false

zu setzen, da dadurch aus dem X ein Ok wird.

Original von herbivore
Hallo Varrius,

Gibt es denn ein Event das ausgelöst wird wenn der Benutzer auf das X drückt?
Form.FormClosing/Form.FormClosed

herbivore

Wie sbertl000 geschrieben hat, treten diese Events auf wenn man auf Ok drückt, also die Anwendung beendet werden soll. Das X ist im Gegensatz zum normalen Windows ein Minimieren und kein Beenden. Da die Anwendung aber im Hintergrund weiterlaufen soll, brauche ich etwas anderes, wenn es überhaupt möglich ist.

Gibt es vielleicht eine Möglichkeit alle Events in einem Handler abzufangen, so das ich per Debug rausfinden kann, welches Event durch das X ausgelöst wird?

Danke schonmal für eure Ideen,

Michael

02.07.2007 - 08:44 Uhr

Hallo Herbivore,

hatte keine Zeit und melde mich erst jetzt. Soweit ich Process.Startinfo verstanden habe, kann man damit andere Anwendungen starten, also brauch ich meine normale Anwendung und eine mit Process.Startinfo die meine normale aufruft. Ausserdem scheint es die Eigenschaft CreateNoWindow im CF nicht zu geben, zumindest wird sie mir nicht angeboten.
Gibt es denn ein Event das ausgelöst wird wenn der Benutzer auf das X drückt? Oder kann das nur intern von WM verarbeitet/ verwendet werden?
Gruß,

Michael

28.06.2007 - 16:53 Uhr

Hallo allesamt,

ich soll eine Anwendung im CF erstellen, die nach dem Starten nicht sichtbar ist, sondern minimiert gestartet wurde.
Meine Idee war es die Anwendung normal zu starten und dann zu minimieren, allerdings habe ich kenie Möglichkeit gefunden den Klick auf den Button zu simulieren. (Also keine Event dazu gefunden.) Kennt jemand eine Methode dies umzusetzen?
Oder gibt es vielleicht eine andere Möglichkeit eine Anwendung im Hintergrund zu starten?

Der Benutzer soll später durch Klick auf die .exe oder über den Task-Manager in die Oberfläche gelangen können.

Danke,

Michael

Edit: Ich verwende CF 2.0 auf WM 5.0

15.03.2007 - 11:47 Uhr

Danke für den Link, wenn ich das hier :

There is no version checking for assemblies without strong names, nor does the runtime check in the global assembly cache for assemblies without strong names.

richtig verstanden hab, kann es schonmal nicht funktionieren, die Assembly im GAC einzutragen.

Um welche Dateien handelt es sich eigentlich bei den Konfigurationsdateien genau und muss man alle bearbeiten? Denn die Einstellungen an jedem Rechner zu bearbeiten, auf dem die Anwendung laufen soll, ist vielleicht doch ein wenig zuvie des Guten 😉
application configuration file -->app.config?
the publisher policy file
computer's administrator configuration file

Ich habe irgendwo gelesen, das die Anwendung auch in Windows/system32 nach Assemblies sucht und dort ja nur eine Version vorhanden sein kann. Stimmt das bzw. spricht etwas dagegen oder gibt es einen anderen Weg?

15.03.2007 - 10:33 Uhr

Hallo,

wir haben hier das Problem, das eine selbstgeschriebene Anwendung auf eine selbstgeschriebene Assembly (dll) verweist. Das funktioniert auch problemlos, doch soll die Assembly von mehreren Programmen verwendet werden und somit öffentlich sein muss. Das Problem besteht nun darin, das die Anwendung nach der Version 1.0.0.0 sucht, aber eigentlich Version 1.0.x.x verwenden kann. Gibt es eine Möglichkeit einen Bereich für Versionsnummern anzugeben oder im Notffall die Versionsnummer komplett zu ignorieren?
Zur Zeit erfolgt eine FileNotFoundException, wenn nicht die richtige Version vorhanden ist.
Danke

Varrius

PS: Verwende VS2003

11.01.2007 - 11:18 Uhr

Gibt es denn wirklich keine bessere Lösung?
Ich habe mitlerweile das Problem, das ich mehrere DataSets übertragen muss und dadurch die Wartezeit doch sehr hoch ist.

03.01.2007 - 16:29 Uhr

Hallo Leute,

nach vielem Lesen und Probieren komme ich einfach nicht weiter. Ich hab aus einer Excel Datei Daten ausgelesen und in ein DataSet gepackt. Nun möchte ich aber dieses DataSet in eine Access Datenbank übertragen.
Dazu habe ich eine Funktion geschrieben, welche den Tabellennamen und das DataSet als Parameter erhält.
Da ich keine Ahnung hatte wie man von einem DataSet die Daten direkt in eine Datenbank schreibt, habe ich ein DataSet erstellt und mein DataSet hineinkopiert.
Der Code sieht wie folgt aus:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB.mdb");
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + table + "]", conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
OleDbCommandBuilder ocb = new OleDbCommandBuilder(da);
conn.Open();
da.Fill(ds, table);
ds = data;
da.Update(ds);
conn.Close();

Der Code wird fehlerfrei durchlaufen, aber es wird nichts in die Datenbank geschrieben.
Für Anregungen und Tipps bin ich sehr dankbar 🙂
MFG

Varrius

Edit:
Habe den Code folgendermaßen geändert/umgeschrieben, so das es funktioniert. Allerdings ist es recht langsam 🙁 (ca. 40Sekunden für 1300 Datensätze mit 14 Spalten)


string baseString = "INSERT INTO `" + table + "` VALUES (";
string queryString;
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB.mdb");
OleDbCommand command;
for (int i = 0; i < data.Tables[0].Rows.Count; i++)
{
    queryString = baseString;
    for (int x = 0; x < data.Tables[0].Rows[i].ItemArray.Length; x++)
    {
        queryString += "\"" + data.Tables[0].Rows[i].ItemArray[x] + "\",";
    }
    queryString = queryString.Substring(0, queryString.Length - 1);
    queryString += ")";
    command = new OleDbCommand(queryString, connection);
    connection.Open();
    try
    {
       command.ExecuteScalar();
    }
    catch
    {
        return false;
    }
    connection.Close();
    }
return true;

Edit2:
Habe in einem VB Forum eine andere Möglichkeit gefunden, mit der ich schonmal auf 5 Sekunden runter gekommen bin. Aber ich denke da lässt sich noch mehr verbessern, bin also weiterhin für Ideen zu haben 🙂


OleDbConnection cnxn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB.mdb");
OleDbCommand Cmd = new OleDbCommand();
string sql = "INSERT INTO "+table+" VALUES (";
for (int x = 0; x < data.Tables[0].Rows[0].ItemArray.Length; x++)
  {
     sql += "?,";
  }
  sql = sql.Substring(0, sql.Length - 1);
  sql += ")";
  OleDbParameter[] p = new OleDbParameter[data.Tables[0].Rows[0].ItemArray.Length];
   for (int x = 0; x < p.Length; x++)
    {
      p[x] = new OleDbParameter();
    }
    Cmd.Connection = cnxn;
    Cmd.CommandType = CommandType.Text;
    Cmd.CommandText = sql;
    Cmd.Parameters.AddRange(p);
    cnxn.Open();
    foreach (DataRow r in data.Tables[0].Rows)
    {
       for (int x = 0; x < r.ItemArray.Length; x++)
       {
           p[x].Value = r[x];
       }
       try
       {
           Cmd.ExecuteNonQuery();
       }
       catch
       {
          return false;
       }
     }
cnxn.Close();
return true;

25.04.2006 - 11:17 Uhr

@sheitman
ich hab Access 2003, sollte also laut dem Link nicht daran liegen

@evilTK
hier is der einzige Aufruf von ExecuteReader:

public void openConnectionCreateReader()
		{
			// Öffnen einer Verbindung und Erstellen des Readers
			dbCommand.Connection.Open();
			dbReader = dbCommand.ExecuteReader();
		}

wann darf ich die Verbindung schließen? vor dem Return geht es ja nicht, da es dann nicht ausgelesen werden kann.

also denke ich


Form1.database = CSMAnzeigen.SMAnzeigen(spiel);
//hier wurde die Verbindung geöffnet
while(Form1.database.dbReader.Read())
{
...
}
Form1.database.dbReader.Close();

danach wird die Verbindung nicht mehr verwendet bzw. erhält Form1.database bei nächsten Zugriff auf die Datenbank eine neue Verbindung zugewiesen. (stimmt das so, wenn ja hab ich einiges zu tun 🙁 )

25.04.2006 - 10:25 Uhr

ihr seid zu schnell mit antworten, da kommt man ja garnicht hinterher 😉
bitte das edit oben beachten

wann wird der dbReader geöffnet? durch ein Read() oder schon vorher

Form1.database ist meine allroundvariable im MDI-Parent, die für jeden Zugriff auf die Datenbank verwendet wird, da dieser bei Initialisierung den ODBC-Namen braucht und das nicht jedesmal beigefügt werden soll.

25.04.2006 - 10:08 Uhr

hatte den Fehler bisher noch nie in der Debugversion, was aber scheinbar daran lag, das es viel mehr switche in kurzer Zeit benötigt 😉

hab es aber hinbekommen und nun folgenden Fehler erhalten (abgetippt):
System.Data.Odbc.OdbcException: ERROR[08004][Microsoft][OBDC Microsoft Access Driver] Zu viele Client-Tasks.
ERROR [IM006][Microsoft][ODBC Driver Manager] Fehler bei SQLSetConnextAttr-Aufruf für Treiber
at System.Data.Odbc.OdbcConnection.Open()
at LudothekNet.CDB.openConnectionCreateReader() in d:....\cdb.cs:line 47
at LudothekNet.CSMAnzeigen.SMAnzeigen(String idSpiel) in D:....\CSMAnzeigen.cs:line 151

mir ist nun nicht bewusst, ob das ein Access oder mein Problem ist 😉
falls ihr den Quelltext von einer Funktion benötigt für nen Ansatz, einfach sagen

edit:
Form1.database = CSMAnzeigen.SMAnzeigen(spiel);
while(Form1.database.dbReader.Read())
erzeugt eine Null Reference dadurch

static public CDB SMAnzeigen(string idSpiel)
		{
			CDB verbindung = new CDB();
			verbindung.setStatement("select * from Spielmittel where IDSpiel = '"+idSpiel+"'");
			try
			{
				verbindung.openConnectionCreateReader();
			}
			catch (Exception e)
			{
				System.Windows.Forms.MessageBox.Show(e.ToString());
				verbindung.closeConnectionAfterReader();
				Console.WriteLine("alleAuflisten - net geklappt :( ");
				return null;
			}	
			return verbindung;
		}

die Dateien für den Zugriff auf die Datenbank sind leider nicht von mir, deswegen hab ich mir da auch nicht die grossen Gedanken gemacht ob sie richtig sind. allerdings sieht es so aus, als ob bei erfolgreicher Anfrage die Verbindung nicht getrennt wird, sondern nur beim Fehler. Seh ich das richtig oder versteh ich das Falsch?

25.04.2006 - 09:48 Uhr

@ Sascha
was bringt es mir den Fehler zu catchen, wenn ich ihn nicht debuggen kann?
ausserdem wüsste ich nicht, an welcher Stelle ich was catchen soll, da die Felder nur ausgeselesen werden, wenn dbReader etwas enthält.

@deti
ich habe nur einen Thread laufen und auch immer nur eine View aktiv, die eine Verbindung zur Datenbank aufbaut und auch beendet.
ich weiss allerdings nicht, wie lange Access braucht, um eine Verbindung zu trennen, vielleicht wird die neue Anfrage zu schnell nach dem Beenden der Verbindung aufgerufen.

hab mir nochmal ein wenig Zeit genommen und getestet, ob der Fehler auftritt, wenn ich zwischen den switchs ein wenig länger warte. der Fehler ist eigentlich nicht aufgetreten, nur manchmal gab es kurze Pausen (Sanduhr), aber es funktionierte. kann es sein, das Access nur eine bestimmte Anzahl an Verbindungen zulässt und eine gewisse Zeit benötigt diese zu beenden?

edit:
Fehler tritt doch irgendwann auf, diesmal:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
   at LudothekNet.SpielmittelForm.ComboEbene2Laden()
   at LudothekNet.SpielmittelForm.SMFormLaden()
   at LudothekNet.Form1.switchForm(Int32 aktiv, Int32 neueForm)
25.04.2006 - 09:12 Uhr

Hallo,

ich habe eine Anwendung in C# geschrieben, welche eine Datenbank (Access) verwalten soll und verschiedene Oberflächen bereitstellt (MDI-Childs, wobei eins gezeigt, der Rest versteckt wird).
Das Programm läuft, wenn als Debug compiliert, problemlos ab, die Release Version erzeugt allerdings nach einer zufälligen Anzahl von switchViews. Scheinbar tritt der Fehler nur bei Views auf, die auf die Datenbank zugreifen und nach einer zufälligen Anzahl von switchen, wobei schnell nacheinander ausgeführte switchs eher zum Fehler führen.
Ich vermute mal, dass Access irgendwie keine Antwort auf ein Anfrage gibt, wodurch folgende Fehlermeldung erscheint:

Eine unbehandelte Ausnahme ist in einer Komponente Ihrer Anwendung aufgetreten. Klicken Sie auf "Weiter", um den Fehler zu ignorieren und den Vorgang fortzusetzen. Wenn Sie auf "Abbrechen" klicken, wird die Anwendung sofort beendet.

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Es gibt allerdings nur den Weiter und Beenden Button. Unter Details waren folgende Meldungen zu finden:

Eine unbehandelte Ausnahme ist in einer Komponente Ihrer Anwendung aufgetreten. Klicken Sie auf "Weiter", um den Fehler zu ignorieren und den Vorgang fortzusetzen. Wenn Sie auf "Abrrechen" klicken, wird die Anwendung sofort beendet.

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Informationen über das Aufrufen von JIT-Debuggen
finden Sie am Ende dieser Meldung, anstatt in diesem Dialogfeld.

\************** Ausnametext **************
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
   at LudothekNet.KundenForm.VerleihListeLaden()
   at LudothekNet.KundenForm.KundeAnzeigen()
   at LudothekNet.KundenForm.KundenFormLaden()
   at LudothekNet.Form1.switchForm(Int32 aktiv, Int32 neueForm)
   at LudothekNet.VerleihForm.Button_Kunden_Verleih_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


\************** Geladene Assemblys **************
mscorlib
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
LudothekNet
    Assembly-Version: 1.0.2306.13429
    Win32-Version: 1.0.2306.13429
    CodeBase: file:///D:/Projekte/Ludothek/LudothekNet/bin/Release/LudothekNet.exe
----------------------------------------
System.Windows.Forms
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Data
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system.data/1.0.5000.0__b77a5c561934e089/system.data.dll
----------------------------------------
System.Drawing
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
mscorlib.resources
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.573
    CodeBase: file:///c:/windows/assembly/gac/mscorlib.resources/1.0.5000.0_de_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.resources
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.573
    CodeBase: file:///c:/windows/assembly/gac/system.resources/1.0.5000.0_de_b77a5c561934e089/system.resources.dll
----------------------------------------
System.Windows.Forms.resources
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.573
    CodeBase: file:///c:/windows/assembly/gac/system.windows.forms.resources/1.0.5000.0_de_b77a5c561934e089/system.windows.forms.resources.dll
----------------------------------------

\************** JIT-Debuggen **************
Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
Konfigurationsdatei der Anwendung oder des Computers
(machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

Zum Beispiel:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
Ausnahmen an den JIT-Debugger gesendet, der auf dem
Computer registriert ist, und nicht von diesem Dialogfeld behandelt.

Der Jit Debugger ist in der maschine.config aktiviert, leider wird er nicht ausgeführt. Und hier noch die Funktion, die den Fehler erzeugt (bei mehrere Versuchen tritt der Fehler in verschiedenen Funktionen auf):

private void VerleihListeLaden()
		{
			string id, ausleihe, rueck, verlaengerung;
			System.Windows.Forms.ListViewItem listViewItem;
			this.VerleihListe.Items.Clear();
			Form1.database = CVerleih.AuflistenNachKunde(Form1.kunde);
			//es werden die Daten von Form1.kunde geladen
			while (Form1.database.dbReader.Read())
			{
				id = Form1.database.dbReader.GetString(2);
				ausleihe = Form1.database.dbReader.GetDate(3).ToShortDateString().ToString();
				rueck = Form1.database.dbReader.GetDate(4).ToShortDateString().ToString();
				verlaengerung = Form1.database.dbReader.GetString(5);
				listViewItem = new System.Windows.Forms.ListViewItem(new string[] 
								{
									id, 
									ausleihe,
									rueck},
					-1);
				this.VerleihListe.Items.AddRange(new System.Windows.Forms.ListViewItem[] {listViewItem});
			}
		}

Vielleicht hat jemand eine Idee, wie dieser Fehler zustande kommt oder gar wie man ihn beseitigt.
Vielen Dank für eure Hilfe (und das Lesen 😉 )

Varrius

08.02.2006 - 18:33 Uhr

Hi,

bin noch recht neu in der C# Ecke und arbeite das erste Mal mit einem ListView Element 😉
Das ListView Element besteht aus 3 Spalten und soll die Daten aus einer Datenbank anzeigen, dabei traten folgenden Probleme auf:

  1. Ich würde dem Benutzer gern das Sortieren der Datensätze ermöglichen, am besten durch klicken auf den ColumnHeader. Die SubItems einer Zeile sind schon zusammengefasst.

  2. Da ich die Daten aus einer Datenbank auslese, würde gern dynamisch viele ListViewItems haben, damit ich nicht zuviele bzw. zuwenige Items habe.
    Zur Zeit hab ich 10 Items die ich mit:
    this.KundenListe.Items.AddRange(new System.Windows.Forms.ListViewItem[] { ...})
    einfüge.

  3. Der Benutzer soll per Mouseklick einen Datensatz auswählen können, damit dieser dann angezeigt werden kann.
    Dies versuche ich zur Zeit mit:


private void KundenListe_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			int merke = this.KundenListe.SelectedIndices[0];
		MessageBox.Show(this.KundenListe.Items[merke].SubItems[0].Text);
		}

Das funktioniert allerdings nur beim ersten Auswählen, bei den darauffolgenden kommt folgender Fehler:
System.ArgumentOutOfRangeException: Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.
Parametername: index
at System.Windows.Forms.SelectedIndexCollection.get_Item(Int32 index)
dies kann ich aber durch "Weiter" ignorieren und es läuft danach.

  1. Was ich aus this.KundenListe.Items[merke].SubItems[0].Text auslese, würde ich gern als Integer haben, allerdings habe ich keine Funktion zum umwandeln gefunden. In C++ gibt es ja die atoi bzw. itoa Funktionen, gibt es sowas auch für C#, damit ich Strings ins Integer und zurück wandeln kann?

Vielen Dank für eure Hilfe,
Varrius

08.02.2006 - 18:15 Uhr

ok, nun hat sich aber ein neuer Fehler eingeschlichen 😉
KID_Edit ist eine TextBox, wobei folgendes Problemlos klappt, wenn das Feld gefüllt ist:
KID_Edit.Text = reader.GetString(0);

für den Fall, dass das Feld leer ist, habe ich nun folgendes Konstrukt gebastelt:
if (reader.IsDBNull(0)) KID_Edit.Text = "";
else KID_Edit.Text = reader.GetString(0);

bekomme ich folgende Fehlermeldung:
System.InvalidCastException: Die angegebene Umwandlung ist ungültig.
at System.Data.Odbc.OdbcDataReader.GetString(Int32 i)

06.02.2006 - 17:00 Uhr

Hallo,

da ich ein ähnliches Problem hab, pack ich mal meine Frage hier rein 😉

ich will auch mit reader.GetString(0) den Inhalt aus einem Feld holen, allerdings bekomme ich eine "System.InvalidCastException: Die angegebene Umwandlung ist ungültig." Fehlermeldung, wenn das Feld leer ist.
Da ich aber viele Spalten habe, will ich nicht jedes mal ne Try-Catch-Anweisung schreiben, gibt es vielleicht eine Abfrage ob das Feld leer ist, damit ich dann die GetString nicht auf dieses Feld anwende?
Vielen Dank,

Varrius

13.01.2006 - 10:22 Uhr

hallo,

auch wenn der Thread schon ein wenig älter ist, beinhaltet er genau mein Thema 😉
Ich will ein MDI schreiben und darin eine Form, welche immer auf Maximieren eingestellt sein soll.
Habe das wie folgt eingebunden:


start.MdiParent=this;
start.MaximizeBox = false;
start.MinimizeBox = false; 
start.ControlBox=false;

Leider ist nach dem Start der Minimieren und Maximieren Button vorhanden, aber der Schliessen Button ist inaktiv und Minimieren zeigt auch keine Wirkung, nur Maximieren/Wiederherstellen funktioniert einmal. Danach sind Maximieren und Minimieren verschwunden, leider konnte einmal das Fenster verkkleinert werden.

13.01.2006 - 08:25 Uhr

Da es in C# scheinbar keine SDI mit mehreren Views gibt bzw. bisher niemand sowas gemacht hat, werd ich wohl eine MDI mit mehreren Forms machen.
Wenn es nun die Möglichkeit gibt ein MDI-Child zu zwingen im maximierten Zustand zu bleiben, dann kann man durch form.Show() immer das Form anzeigen lassen, welches gerade benötigt wird.

Kennt jemand eine Möglichkeit die Child zu maximieren und das minimieren zu verhindern? Oder gibt es noch eine andere Möglichkeit dies umzusetzen?

12.01.2006 - 12:25 Uhr

Hallo,

ich hoffe das ich mich hier ins richtige Forum verlaufen habe, da ich neu hier bin 😉

Ich würde gern eine Anwendung schreiben, mit der man mehrere Dialoge in einem Fenster anzeigen und benutzen kann. Es soll also immer nur ein Dialog aktiv sein und auch nur ein Fenster (kein Wechsel zwischen den Dialogen über die Taskleiste). Es soll aber per Druck auf einen Button zwischen den Dialogen gewechselt werden können.
Leider ist meine Erfahrung in C# nahezu NULL. Ich habe dieses Problem mit C++ bereits in einer SDI mit mehreren Views gelöst, leider benötige ich dies in C#, da ich weitere Klassen implementieren muss, die in C# programmiert wurden.
Hier: MDI-/SDI-Anwendung à la MFC
wurde schonmal darauf eingegangen, allerdings nicht sehr ausführlich.
Ich arbeite mit VS 2003, aber weis nicht genau welche Art von Projekt ich erstellen soll, um dies am besten umsetzen zu können. (ich würde eine C# -> Windows-Anwendung benutzen)
Ich habe recht fundierte Kenntnisse in C++ und Java und verstehe das meiste was ich in C# Code sehe auch inhaltlich.
Vielen Dank für eure Hilfe,

Varrius