Laden...
Avatar #avatar-3411.png
DaSchroeter myCSharp.de - Member
Anwendungsentwickler Dabei seit 24.06.2004 215 Beiträge
Benutzerbeschreibung

Forenbeiträge von DaSchroeter Ingesamt 215 Beiträge

13.06.2006 - 13:07 Uhr

Schau mal bei CodeProject

13.06.2006 - 13:06 Uhr

Also eigentlich war das glaube ich so gedacht, dass Du 'net.exe' aufrufst (nicht 'cmd.exe').

Und dann musst Du den Prozess natürlich auch starten 😉

13.06.2006 - 13:03 Uhr

Keine Ahnung, ob es hilft, aber ich hatte schon öfter Probleme mit dem Encoding der RS232 Komponente.

Lass Dir mal die Rohdaten ausgeben, die vom ReadLine geliefert werden.

12.04.2006 - 09:17 Uhr

Erstell ein UserControl, das die Details eines Artikels anzeigt.
Davon dann für jeden Artikel eine Instanz und ins 'ViewFrame' packen 🙂

Analog kannst Du auch für die unterschiedlichen Artikelkategorien verschiedene 'DetailContainer' bauen.

29.03.2006 - 12:35 Uhr

Das liegt wohl daran, dass der Button den Focus hat und auch die Events bekommt.
Ich glaub Form hat ne Eigenschaft KeyPreview (sinngemäß), mit der Du die Events zum Formular umleiten kannst.

29.03.2006 - 12:32 Uhr

Warum selber machen, wenn das Gute ist umsonst:
http://www.eecs.wsu.edu/paint.net/

16.03.2006 - 11:27 Uhr

[klugscheiss]
'Es gibt kein annähernd so umfangreiches Tool um Wasserzeichen in Bildern einzufügen wie waterMark V2'

Und was ist 'Auto-Umbennung' ?
[/klugscheiss]

🙂

Im Ernst: Sieht gut aus, werd ich mal testen!

13.03.2006 - 13:29 Uhr

Ah...verstehe 🙂

Also zum automatischen Erkennen, ob eine Karte drin ist musst Du entweder die Schnittstellenbeschreibung konsultieren (Gibt es dafür Funktionen?) oder permanent auf eine evtl. vorhandene Karte prüfen.

Ich gehe mal von Letzerem aus:

  1. Nen Thread erstellen, der in Intervallen die Prüfung anstösst.
  2. Ein Callback Delegate anlegen, um bei erfolgreichem Auslesen Feedback zu bekommen
  3. In der Callback Routine den Druck anstoßen (und evtl. Erfolg abwarten).
  4. Aufforderung, die Karte zu entnehmen und warten, bis sie draußen ist.

So sollte das klappen 🙂
Dieser Worklow muss wahrscheinlich noch an die tatsächlichen Anforderungen angepasst werden, aber das musst Du schon selber machen 🙂
Vielleicht sollte während des Druckes noch geprüft werden, ob die Karte noch drin ist oder sowas. Das kannst Du dann auch über entsprechende Callbacks steuern.

greetz
DaSchroeter

13.03.2006 - 11:42 Uhr

Also ich würde vorschlagen, dass Du mal nach der genauen Bezeichnung des Lesegerätes suchst. Stichwort google oder auch beim Hersteller 🙂

Es müsste eigentlich eine Schnittstellenbeschreibung geben.
Ohne so eine Beschreibung: Pech gehabt 🙂

Dann müsstest Du ne Software nehmen, die kann was Du willst und den Datenverkehr mitloggen. Dann analysieren und versuchen nachzubauen.
-> Das ist aber ganz schön aufwendig und fehleranfällig 🙂

01.03.2006 - 07:11 Uhr

Solche Bücher sollte man den Autoren um die Ohren hauen... oder müsste das jetzt um die ööööhren hauen heissen 🙂

Auf jeden Fall verdienen die einen hinter die Löffel 🙂

01.03.2006 - 07:10 Uhr

@herbivore: Genau das hab ich neulich probiert -> reicht nicht!
Aber ich weiss nicht mehr, ob das mit dem 1.1 oder dem 2.0 Framework war 🙂

28.02.2006 - 13:46 Uhr

Wenn ich das richtig verstehe, dann willst Du ein MDI nutzen, ja?

In dem Fall werden die MDI-Children in einer 'MDI-Area' des MDI-Parent untergebracht.
Dieser Bereich ist all das, wo man 'direkt auf's Fenster schauen kann'.
Also die unverdeckte Client-Fläche.
Die PictureBox verdeckt Client-Fläche.

Du musst schon das Bild 'selbst' auf die ClientFläche pinseln.

greetz
DaSchroeter

28.02.2006 - 13:42 Uhr

Niemand verbietet dir das, ist ja dank Unicode möglich smile

Schon klar, aber mal ehrlich: Sowas macht man doch einfach nicht! 🙂

Das ist ja wie ins Taufbecken pinkeln! 🙂

28.02.2006 - 13:35 Uhr

Puuh...da krieg ich ja gleich das große Zittern!

Benutze bitte NIEMALS Umlaute im SourceCode!!!
Das sieht ja richtig ekelich aus 🙂

Zum Fehler:
Schau mal unter 'EventHandler' in der Dokumentation nach.
Das Teil ist auf jeden Fall nicht parameterlos definiert, so wie Deine Handlerfunktion.

Und genau das ist mit der Fehlermeldung gemeint 🙂

greetz
DaSchroeter

22.02.2006 - 15:12 Uhr

Willst Du diesen eingebauten Piepser verwenden?

Nee, eigentlich: MUSST Du den verwenden?

Spiel doch lieber Soundfiles ab!

22.02.2006 - 15:10 Uhr

Naja, man kann nicht alles wissen 🙂
Bin neu bei 2.0 (2.Woche) 🙂

22.02.2006 - 15:04 Uhr

Das Problem (wenn ich's denn richtig verstanden habe) ist, dass die 'neue' DLL ja Referenzen auf andere hat, in denen Du nix geändert hast.

Bei ReBuild Deines Projektes werden aber (unter Umständen) die Referenzen mitkompiliert, sodass diese auch 'neu' sind.

Wenn Du das abschaltest sollte Dein Problem gelöst sein.

Muss nicht stimmen, könnt ich mir aber denken 🙂

22.02.2006 - 14:59 Uhr

Da fehlt noch ein abschließender else-Zweig.
Sonst kann (strErr == "")==true sein, was Dir eine leere Meldung bescheren würde 🙂

Sonst sieht's gut aus!

22.02.2006 - 14:56 Uhr

Schau Dich mal im System.IO Namespace um.
Da gibt es die Klassen Directory, File und Path.
Vielleicht bieten die ja Funktionalität für sowas.

21.02.2006 - 07:18 Uhr

Monsen!

Ich kam zwar über 'ne Suchmaschine, kann mich aber ansonsten herbivore anschließen.

Auch wenn ich nicht sooo oft hier bin und schon doch noch manchmal 'ne Frage habe 🙂

Dies ist das einzige Forum, in dem ich mich verpflichtet fühle, auch ein paar Fragen zu beantworten, wenn ich welche stelle! (Lob! 🙂 )

greetz
DaSchroeter

02.02.2006 - 15:43 Uhr

Ich muss nochmal antworten 🙂

Gleiches Prinzip meine Adressendatenbank ist mitlerweile einige MB groß.
Wenn ich jetzt auf euch höre ist dass Dumm,
wieso hat man dann Datenbanken.

Nein, dass ist NICHT das gleiche Prinzip!
In deiner Adressdatenbank sind INSGESAMT ein paar MB.
Das ist natürlich in Ordnung.

ABER: Diese MB teilen sich in gaanz, gaanz viele Datensätze und -felder auf!

Du hast hier davon geredet, 50MB und mehr in ein DatenFELD zu speichern!

Wenn Du den Unterschied nicht kennst, dann solltest du dringend nochmal was zur Datenbanktheorie lesen!

Mann könte doch auch einfach alles in Textfiles,jedes Bild lokal, jedes Flash lokal abspeichern.Wieso macht man soetwas dann doch in eine Datenbank???

Genau das macht man bei grossen Daten!
Die Datenbank ist zur Organisation/zum Zugriff auf Daten im Allgemeinen gedacht.
Das wird auch geleistet, wenn die Daten aus der eigentlichen DB ausgelagert und nur 'Referenzen' hinterlegt werden.
Die Datenbank wird ja schließlich auch 'als Datei' (nicht wörtlich nehmen) gespeichert!

greetz
DaSchroeter

02.02.2006 - 12:37 Uhr

Schon mal SQLite Benutzt?

Ja klar, aber ich hab schlechte Erfahrungen damit gemacht.

Frag jetzt nicht welche, das hab ich grad nicht auf'm Schirm 🙂

01.02.2006 - 20:05 Uhr

@herbivore: thnx buddy 🙂

01.02.2006 - 18:42 Uhr

Es kommt als erstes mal auf die SQL Version an.
Dann welche SQL Version man verwendet!!!!

Vielleicht habe ich nicht MYSQL!!!!!

Genau deshalb hab ich klargestellt, dass dieses Update-Statement auf EINER MySQL Datenbank funktionierte.
Eigentlich klar, dass Du das bei Dir noch testen musst, aber GRUNDSÄTZLICH wird es dieses Feature mit hoher Wahrscheinlichkeit auf JEDER vernünftigen, SQL-fähigen Datenbank geben!
Eventuell ist die Syntax etwas anders oder die Funktion CONCAT heisst anders.
Oder Du musst mit einer Stored Procedure arbeiten oder oder oder...

Es ging mir darum, dass ich das Verfahren, wie grundsätzlich ein (TEXT) Datenfeld erweitert werden kann sehr schnell herausgefunden habe.
Diese Information hattest Du also auch zur Verfügung.
Siehe Google: 'SQL String Funktionen'

greetz
DaSchroeter

P.S.: Um das nochmal klarzustellen: 50MB gehören NICHT in ein Datenbankfeld!

01.02.2006 - 08:37 Uhr

Ach Du Sch*****!

Den Kram musste ich auch mal machen.
Wenn Du Infos brauchst hilft nur: Kauf Dir das Buch.

Es gibt nix dazu im Internet.
Und außerdem ist es wirklich totaler Mist! 🙂

greetz
DaSchroeter

P.S.: Wenn Du doch was findest wär ne PM cool 🙂

31.01.2006 - 18:38 Uhr

Also:
Es hat mich ca. 5 Minuten Recherche bei www.mysql.com gekostet, um folgende Info zu bekommen:
"update test set text = concat(text, ' welt') where id=1"
Das funktioniert!

Für Dich heisst das:
Deine Datei zeilenweise einlesen und FÜR JEDE ZEILE SOFORT dieses Statement ausführen.
Natürlich bei der ersten zeile ein 'insert'.

-> Keine Probs mit string-Addition == OutOfMemory
-> Fortschrittsbalken möglich
-> Sofort nachvollziehbarer Fehler, wenn die DB nicht mehr mitmacht.

Ach ja: In meinem Test war das Feld 'text' ein LONGTEXT auf einer MySQL Datenbank.

Ob es sinnvoll ist solche riesigen Daten in EINEM Datenfeld abzulegen, lasse ich mal unkommentiert.

Dass das gesamte Thema hier überflüssig wäre, wenn Du ordentlich recherchiert hättest auch 🙂

greetz
DaSchroeter

31.01.2006 - 16:57 Uhr

Es gibt mit Sicherheit was um auch Textfelder ähnlich zu bearbeiten!

Hast Du unter mysql.com geschaut?

-> Wie sieht's eigentlich mit den max. Größen aus? Kritisch für Dich?

31.01.2006 - 11:53 Uhr

Dazu gibt es sehr unterschiedliche Auffassungen 🙂

Ich persönlich bevorzuge Dateien. Aber dafür habe ich mir
natürlich einen 'Wrapper' geschrieben 🙂

Dieses 'Sequentiell alles durchsuchen' stimmt also nur, wenn Du Zeilenweise
(z.B. als CSV) speicherst. Es gibt ja durchaus Alternativen!

Du kannst beim Speichern in ein File im Prinzip machen was Du willst!
Also auch Indizes.

Meine Ansicht:
Ich schreib lieber einen spezialisierten Datenwrapper als eine Datenbankengine
zu installieren (oder auch zu fordern). Der ist meist auch wesentlcih schneller 🙂

Das gilt natürlich nur in einem vernünftigen Rahmen 🙂
Also für alles, wo das Datenvolumen die 50MB überschreitet würde
ich auch ne DB verwenden 🙂

greetz
DaSchroeter

31.01.2006 - 11:03 Uhr

Genau dafür gibt es die Hilfe mit kommentierten Beispielen 🙂

31.01.2006 - 10:11 Uhr

Hast Du das hier schon mal probiert?


UPDATE `tabelle` SET text=text+'neue zeile' WHERE i='0815'

Edit:
Du solltest WIRKLICH nochmal darüber nachdenken, ob es nötig ist, 50MB in ein BLOB zu packen.
Stell Dir doch nur mal vor, jemand nimmt über ein Netzwerk zugriff auf die DB.
Dann kommen bei jeder Abfrage 50MB über die Leitung!
Das ist wirklich nicht Sinn der Sache!
Und nun mal weitergesponnen: 100 Datensätze zu 50MB...das KANN nicht so sein nicht sollen!
Die Frage ist also: Sind diese 50MB wirklich dynamische Daten?

Edit2:
Hast Du dir das hier mal angeschaut? Das bezieht sich auf MySQL, aber für Deine DB solltest Du auch mal nachschauen:
TINYBLOB, TINYTEXT L+1 bytes, where L < 28
BLOB, TEXT L+2 bytes, where L < 2
16
MEDIUMBLOB, MEDIUMTEXT L+3 bytes, where L < 224
LONGBLOB, LONGTEXT L+4 bytes, where L < 2
32

(Sind die maximalen Größen 🙂 )

27.01.2006 - 13:54 Uhr

Grundsätzlich finde ich es nicht so gut, dass du die gesamte Datei buffern willst.

Warum geht nicht zeilenweise Lesen und sofort Verarbeiten?

Du sparst Die dadurch String-Additionen, die ordentlich Speicher verbrauchen.

string res = str1 + str2;
Dies ergibt intern:
25MB (str1)
+25MB (str2)
+50MB (reserviert für str1+str2)
+50MB (reserviert für Zuweisung)
= 150MB

Das gleiche passiert bei jeder eingelesenen Zeile!
Und der Garbage-Collector schmeisst ja nicht sofort weg, sodass der Speicherbedarf hier ziemlich an die Decke geht (ich glaub sogar exponentiell)!

Das ist schon gewaltig und vor allem überflüssig, wenn Du den Buffer nachher eh zeilenweise abarbeitest.

greetz
DaSchroeter

27.01.2006 - 10:58 Uhr

Na klar


string line;
int i = 0;
Hashtable lines = new Hashtable;

// Datei einlesen:
while( (line = sr.ReadLine()) != null ) {
                        
       progressBar1.Value = (int)sr.BaseStream.Position;

       lines[i++] = line;

       Application.DoEvents();

}
sr.Close();

// Dann für Abarbeitung:
i = 0;
while( (line = lines[i++] as string) != null ){
       // Mach was mit line
}

27.01.2006 - 08:36 Uhr

@.unreal: Ich denke das kann nur NiceMen beurteilen.

27.01.2006 - 08:13 Uhr

@herbivore: Nee, kostet nix 🙂 Aber In manchen Fällen macht es den Code überflüssigerweise kompliziert. Kommt eben drauf an 🙂

@NiceMen:

Also ich weiss ECHT nicht wo das Problem liegt.
Ob Du nun Byte-, Block- oder Zeilenweise liest:
Die Umbrüche bleiben!

Wenn ich die StreamReader.ReadToEnd() verwende,
dann bekomme ich zwar alle Zeichen, aber ich bekomme das ding einfach nicht zum
Laufen mit größeren Dateien.

Ähnliches habe ich auch schonmal gehabt. Weiss aber den Zusammenhang nicht mehr, also kann ich hier leider nicht helfen 🙁

Vielleicht mit Datei Größe Teilen.Was denkt Ihr?

Ginge 🙂

Aber hier nochmal ne Frage:
Arbeitest Du zeilenweise mit den Daten?
Wenn ja: Alle Zeilen in eine ArrayList oder Hashtable.
Nur nicht strings verketten! Das ist ECHT ein Performance-Killer.

greetz
DaSchroeter

26.01.2006 - 14:33 Uhr

Die Reader-Logik ist doch unabhängig vom Fenster. Du wartest erst auf einen Kartenrauswurf, wenn die Karte schon drin steckt, usw.!

Das hätte ich vielleicht schonmal erwähnen sollen:

Es geht hier darum, ein Backend zu schaffen, dass ich in ca. 2Mio verschiedene Demo-Programme einbauen soll.
Das sind sehr verschiedene Anwendungsfälle!
Weiterhin geht es um Transponderkarten, also nix mit Karte einschieben und so, sonder vorhalten, oder auch vorbeiziehen, oder, oder, und, und 🙂

Ich habe also NULL festgelegten Workflow und muss die Demos schnell
fertig bekommen.

Das ist sehr dreckig, ich weiss, aber die 'der Chef <-> der Kunde <-> der Verkauf' Relation lässt leider nix anderes zu 🙂

das ist keine relevante Beurteilungsgröße für Softwarearchitekturen

Das ist mir klar, aber meinem Chef egal 🙂

Hast Du noch nie den Satz 'Ist doch nur ne Demo!' gehört, wenn Du
mit Deinem Chef über Entwicklungszeiten gesprochen hast? 🙂

greetz
DaSchroeter

26.01.2006 - 14:08 Uhr

Wäre möglich, adressiert aber immer noch nicht das Problem, dass in den Callbacks fachlicher Code steckt, der da nix zu suchen hat: Die "Zustandsmaschine" des CardReaders wird nämlich über die Callbacks definiert. Stattdessen sollte nur die Reaktion auf einen Zustandswechsel in den Callbacks/Events stattfinden.

Nein.
Es soll gerade der Zustandswechsel herbeigeführt werden!

Das 'Problem' besteht darin, dass ein COM-Port verwendet wird, der nur einmal geöffnet werden soll (da auch 'Listening' stattfindet).
Nun wird aber im Programm mit der einzigen Reader-Instanz auf unterschiedliche Weise umgegangen.
Je nachdem, welcher Dialog/welches Fenster gerade aktiv ist.

Es müsste also bei Event-Verwendung in ewta Folgendes stattfinden, wenn einem Dialog der Reader 'übergeben' wird:


_reader.OnCardDetected -= new .....;
_reader.OnCardRemoved -= new ...
Dialog x = new Dialog(_reader);
// Dialog modal zeigen
_reader.OnCardDetected += new .....;
_reader.OnCardRemoved += new ...

Hier müssten im Dialog auch noch Events zugewiesen werden.

Bei Callback-Verwendung kann ich den Reader intern so gestalten, dass Folgendes geht:


Dialog x = new Dialog(_reader);
// Dialog modal zeigen
_reader.Listen(new ....);
// oder
_reader.ChekForCard(new ....);

Hier würde im Dialog ein Listen-Aufruf stattfinden.

Ich spare also eine Menge Code.

greetz
DaSchroeter

26.01.2006 - 13:31 Uhr

Also 🙂

  1. Ich nutze bewusst Callbacks, damit ich die bequem übergeben kann.
    Ich muss dann nicht vor/nach jedem Aufruf die Events ändern.
  2. Ich hab's mittlerweile gelöst 🙂
  • Ich übergebe dem Reader im Contructor das Formular.
public Reader(Form parent){ ... _parentWindow = parent; .... }
  • Dazu muss ich dann halt System.Windows.Forms einbinden.
  • Dann ist der Delegate-Aufruf per Invoke möglich.
_parentWindow.Invoke(<delegate>,new object[]{<parms>});

greetz
DaSchroeter

26.01.2006 - 11:45 Uhr

Ich würde gerne eine Programm schreiben, das mir erlaubt in einem gerade unter Windows aktiven Fenster die Adresse der aufgeschlagenen Internetseite komplett auszulesen und in einem Textfeld auszugeben.

Wenn ich das richtig verstehe, dann willst Du das für alle Browser hinkriegen, gelle?
Also IE, FireFox, Opera, ...

Ich denke dazu muss auf jeden Fall ne Spezialbehandlung für jeden Browser her.
C# ginge dafür wohl, ich hab das damit aber noch nicht gemacht.
Mit Delphi und C++ aber schonmal 🙂

Stichworte:

  • EnumProcesses
  • EnumWindows
  • FindWindow

Und allgemein in der Win32 API Dokumentation suchen.

Aber wie gesagt: Vielleicht bringt .NET auch was Passendes mit 🙂

greetz
DaSchroeter

26.01.2006 - 11:40 Uhr

Also wenn Dein Code gekapselt in einem modalen Dialog läuft, wo der Nutzer eh nur 'Abbruch' klicken kann, dann halte ich nen extra Thread auch für über trieben.

Ich würde dann in die While nur eine Abort-Bedingung einbauen, die über einen Button gesteuert wird.


void bla(...){
      //.....
      abort = false;
      while( !abort && (sr.BaseStream.Position != sr.BaseStream.Length)) {
            // .....
      }
      // ....
}

void button1_Click(...){
      abort = true;
}

26.01.2006 - 11:30 Uhr

Ich verwende den Threading.Timer aus Solution-Technischen Gründen:
Mehrere Projekte, nicht alle haben Referenzen auf Windows.Forms.

Außderdem ist der Threading.Timer genauer und besser steuerbar.

EDIT: Um ein Invoke auszuführen bräuchte ich in der Klasse Reader eine Refezenz auf Form1, richtig? Das geht schonmal gar nicht, weil ich sonst Cross-Referenzes bekomme 🙁

26.01.2006 - 11:20 Uhr

Moin!

Hab ein Problem, von dem ich zwar glaube, dass es auf Invoke + Co. hinausläuft, aber ich bin mit den hier angegebenen Lösungen nicht weiter gekommen.

Ich starte per Button-Click einen Timer (in einer anderen Klasse), der ein Delegate aufruft, in dem wiederum ein Timer gestartet wird, der wieder ein Delegate aufruft, in dem dann wiederum der erste Timer gestartet wird.

Das passiert natürlich nur unter bestimmten Voraussetzungen und nicht einfach so wie hier im Beispielcode 🙂

Das Problem ist, dass sich die GUI komplett aufhängt 🙁
Wenn die Timer beendet werden (durch ein externes Event -> genauer: bestimmte Daten auf COM2), dann läuft die GUI weiter.

Code in Form1.cs


private void CardDetected(uint serialNumber){
	// Ausgaben, Controlaktualisierungen, ...
	_reader.CheckForCard(new CheckForCardDelegate(CardRemoved));
}

private void CardRemoved(){
	// Ausgaben, Controlaktualisierungen, ...
	_reader.Listen(new CardDetectedDelegate(CardDetected));
}

private void button2_Click(object sender, System.EventArgs e) {
	_reader.Listen(new CardDetectedDelegate(CardDetected));
}

Code in Reader.cs


public class Reader {

	private Timer _listenTimer;
	private Timer _checkTimer;

	private void Listener(object state){
	
		_listenTimer.Dispose();
		_listenTimer = null;

		// Daten über COM2 verschicken, empfangen, auswerten
		// evtl. Delegate aufrufen
		// evtl. Timer nicht neu starten -> externe Abbruchbedingung
		CardDetectedDelegate cdd = state as CardDetectedDelegate;
		if( cdd != null ){
			cdd(123);
			// Timer wird nicht erneut gestartet
			return;
		}			
		// evtl. Timer nicht neu starten -> externe Abbruchbedingung
		_listenTimer = new Timer(new TimerCallback(Listener),state,1000,Timeout.Infinite);
	}

	public void Listen(CardDetectedDelegate callback){
		_listenTimer = new Timer(new TimerCallback(Listener),callback,500,Timeout.Infinite);
	}

	private void CardChecker(object state){
	
		_checkTimer.Dispose();
		_checkTimer = null;

		// Daten über COM2 verschicken, empfangen, auswerten
		// evtl. Delegate aufrufen
		CheckForCardDelegate cfcd = state as CheckForCardDelegate;
		if( cfcd != null ){
			cfcd();
			// Timer wird nicht erneut gestartet
			return;
		}			
		// hier evtl. Timer nicht neu starten -> externe Abbruchbedingung
		_checkTimer = new Timer(new TimerCallback(CardChecker),state,1000,Timeout.Infinite);
	}

	public void CheckForCard(CheckForCardDelegate callback){
		_checkTimer = new Timer(new TimerCallback(CardChecker),callback,500,Timeout.Infinite);
	}
}

24.01.2006 - 15:53 Uhr

Hab's nicht getestet, aber so in dieser Art sollte es gehen:


SELECT a.barcode FROM baseproduct a 
INNER JOIN persons b ON a.Owner=b.PersonId
WHERE b.Name LIKE '%@b%'

greetz
DaSchroeter

27.09.2005 - 16:08 Uhr

 private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    textBox3.Text = comboBox1.Text;
}

Mach mal so.

Vorher hast Du textBox3.Text einen Wert im Load-Event zugewiesen und dann nie wieder. Die unterschiedlichen Werte ergaben sich daraus, dass die SelectedIndexChanged schon vor dem Load EINMAL angelaufen waren.

Du musst den Wert jedesmal neu zuweisen.

14.09.2005 - 10:42 Uhr

Kannste das etwas mehr spezifizieren?

Hängt Dein Sensor an COMx?
Willste da auslesen? Oder is die Anbindung schon
gekapselt, und Du willst die Kapselung erweitern?

greetz

08.09.2005 - 23:57 Uhr

Ach...das ist zeitabhängig?

Das werd ich morgen mal checken...dachte das wäre Release und Build 🙂

08.09.2005 - 23:14 Uhr

Die wird doch schon dynamisch erhöht.

Application.Version

oder so ähnlich 🙂

Über die AssemblyInfo.cs steuerst Du das, indem Du für Release und Build * (Sternchen) eingibst.

Also z.B. 0.1.. -> Application.Version = 0.1.1034.5238

08.09.2005 - 23:10 Uhr

büddäschöhn 😁

08.09.2005 - 16:34 Uhr

Bei sowas musst Du auf jeden Fall jedes Element mit jedem anderen vergleichen.
Geht nicht anders, es sei denn, das Array wäe sortiert.

Frage:
Es geht um ein string[] ?

Dann:


public bool CheckDups(string[] ar){
    for(int i=0; i<ar.Length-1; i++){
        for(j=i+1; j<ar.Length; j++){
            if( ar[i] == ar[j] )
                return true;
        }
    }
    return false;
}

08.09.2005 - 15:18 Uhr

Moin nochmal,

Zu dem global Problemchen:

  • Nur Global Deklarieren (info[] Erfassung; )
  • Dann in Main Initialisieren (Erfassung = new info**; )

Zu den Fehlern:
Du hast vor den Methoden stehen 'public' und vor info 'private'.
Jedenfalls nehme ich das an 🙂

greetz

08.09.2005 - 13:03 Uhr

Moinsen!

Zunächst mal:
Bei jedem Aufruf von adr_ein wird Dein Erfassungs-Array neu erstellt.
Das soll ja wohl nicht so sein, also die Initialisierung nach aussen bitte:
info[] Erfassung = new info**;

Dann:
In Deiner For gehst Du von 0 bis i, wobei die Anzahl der Elemente des Arrays ist.
Also für i=3 wäre das:
0,1,2,3 ≤ das sind aber vier.
So muss es sein:


//Einlesen der Informationen
for(int b=0; b<i; b++)
{
    adr_ein(b); //<--- hier mekert er rum (ZEILE 49)
}
				
//Auslesen der Informationen
for(int b=0; b<i; b++)
{
    adr_zeig(b);
}

Schließlich:
Mir der Initialisierung des Arrays ist es nicht getan. Du musst auch die info-dinger
(als elemente) initialisieren.
Also in adr_ein:
Erfassung** = new info();

Grundsätzlich:
Erfassung muss bei diesem Ansatz in der Klasse, in der Deine adr_X Funktionen definiert sind global sein, sonst kennen sie die Variable gar nicht.

greetz