Laden...
M
Maddy myCSharp.de - Member
Anwendungsentwickler Thüringen Dabei seit 14.07.2006 103 Beiträge
Benutzerbeschreibung

Forenbeiträge von Maddy Ingesamt 103 Beiträge

07.03.2011 - 14:47 Uhr

Hi.

Wir stehen kurz davor mit unserem Entwicklerteam (~10 Mann) von VSS 6 ⚠ zu TFS 2010 zu wechseln. Bis jetzt nutzen wir keinerlei Branching- und Mergingtechniken, alles wird einfach aus- und eingecheckt. Wiederverwendbarer Code ist in mehreren .dll-Projekten gesammelt, welche direkt in den jeweiligen Projektmappen verlinkt sind (die .dll-Projekte liegen nur einmal im VSS & auf dem lokalen Rechner). Dadurch können die Änderungen an den dll's leicht vorgenommen werden. (aber andere Programme leider auch leicht 'gebrochen'...)
Mit dem Wechsel zu TFS wollen wir natürlich (endlich) auch in den Genuss des Branching kommen. Nachdem ich mir einige MSDN-Webcasts zum Thema angeschaut habe stellt sich mir eine Frage:
Wie kann sichergestellt werden, dass in den Projekten immer die funktionierenden Versionen der .dll-Projekte liegen (quasi die Main-Branch (um erstmal beim einfachen Dev <-- Main --> Release-Modell zu bleiben))?

Eine Idee wäre: Jeder Entwickler hat seine eigene Dev-Branch. Änderungen kommen per FI von der Main und Bugfixes/Features werden per RI zurück in die Main gespielt. Die .dll-Projekte liegen nicht mehr im Projektmappenordner des Hauptprojektes sondern in einem Eigenen. Die Build-Ausgabe wird auf einen zentralen Ordner kopiert damit das Hauptprojekt immer auf den 'frischen' code zugreifen kann.
Das erscheint mir aber nicht ...sagen wir mal...optimal.
Wie wäre es am sinnvollsten? Wie läuft das bei euch?

Viele Grüße.

15.02.2011 - 08:40 Uhr

Hilfe: 🛈 und 📗

...und noch ein Tip: 'Müssen' hilft nicht, 'Wollen' bringt dich weiter. 8)

02.11.2010 - 13:33 Uhr

Weiß jemand, wo man im VisualStudio (2008) definieren kann, wie die automatisch erzeugten Event-Methoden benannt werden?
Statt btnApply_Click() hätte ich z.B. gern OnBtnApply_Click(), dass verträgt sich besser mit dem Codestyle-Enforcer.

THX

28.10.2010 - 16:23 Uhr

verwendetes Datenbanksystem: <ADO.NET>

Hallo,

ich habe eine DataTable an welche verschiedene Controls in voneinander unabhängigen Formularen gebunden sind. Jedes dieser Controls kann unterschiedliche Spalten der DataTable bearbeiten.
Gibt es eine Möglichkeit, die Änderungen eines bestimmten Controls (sprich: einer bestimmten Spalte im DataTable) zurückzusetzen? Mit DataTable.RejectChanges() kann ich ja nur die gesamten Änderungen verwerfen.

Grüße.

15.07.2010 - 14:37 Uhr

Ok dann hatte ich das verwechselt. 🤔
Sorry.

15.07.2010 - 14:24 Uhr

Mal was ganz anderes: War es nicht so, dass mit den Express-Versionen nix produktives im Sinne von Geldverdienen gemacht werden darf?

06.07.2010 - 11:15 Uhr

Es liegt wohl daran dass du die zusätzlich eingefügte Zeile ausgewählt hast:

row = gestellungstypA.NewRow();
row[0] = ""; // =SelectedValue
gestellungstypA.Rows.Add(row);

06.07.2010 - 11:04 Uhr

Wenn du einen _ValueMember _zuweist, greifst du am besten über die Property SelectedValue zu. Dort erhältst du dann den Wert der Spalte gestellungstypA.Columns[0] der ausgewählten Zeile.

02.10.2009 - 11:24 Uhr

Asche auf mein Haupt (oder meine Finger^^)

02.10.2009 - 10:19 Uhr

Also TFS erscheint mir auch etwas zuviel des Guten 🤔

Ich habe vor 1 1/2 jahren unseren VSS komplett an einem Abend auf
SVN umgezogen, und habe dabei die gesammte history mitgenommen. _Das _klingt sehr verlockend 😁
Ich mach micht also mal mit SVN & Co. vertraut und dank euch für die Tips 👍

mfg Maddy

01.10.2009 - 16:38 Uhr

darüber wurde schon einige male diskutiert.

Wo?

01.10.2009 - 15:52 Uhr

Hi!
Wir sind ein Entwicklerteam von ca. 10 Mann und setzen seit geraumer Zeit VSS 6 aus dem letzen Jahrtausend ein ⚠. Da wir in letzter Zeit immer mal Probleme haben und mir auch die Integration ins TeamCity nur halbherzig erscheint würde ich gern mal 'was neueres' probieren.
Also meine Frage: was nutzt ihr und wie seid ihr damit zufrieden? Wichtig ist vor allem, dass die bisherigen Sources in das neue System migriert werden können, also auch alle Versionen einer Quelltextdatei erhalten bleiben. Außerdem sollte es ins VisualStudio integriert werden können.

mfg Maddy

29.09.2009 - 16:14 Uhr

Ok ich hab's gelöst:
Das Problem war tatsächlich die Scannerklasse von Unitech. Die hab ich mir mal mit dem .Net-Reflector angeschaut. Die (Unitech) haben das 'Herunterfahren' der Scannerhardware an das Closed-Event eines Formulars gebunden (ein Verweis auf das Form muss man beim Erstellen der Klasse übergeben). Da ich dieses Form aus verschiedenen Gründen aber gar nicht erst öffne wurde auch dieses Event nicht ausgelöst.
Also hab ich mir eine Klasse gebastelt, von _Form _abgeleitet, bei der ich mit OnClosed(EventArgs) das Event von Hand auslösen kann;)

//Helferklasse
class DummyForm : System.Windows.Forms.Form
{
	public void OnClosed()
	{
		base.OnClosed(EventArgs.Empty);
	}
}
		
//Barcode-Klasse		
class UnitechScanner
{
	DummyForm m_DummyForm = null;
	USIClass m_Scanner = null;
	
	public UnitechScanner()
	{
		m_DummyForm = new DummyForm();
		m_Scanner = new USIClass(m_DummyForm);
	}
	
	public void Dispose()
	{
		if (m_Scanner != null)
		{
			[...]
			m_Scanner.EnableScanner(false);
			
			//veranlasst die Scannerklasse zum (tatsaechlichen) Deaktivieren des Scanners
			m_DummyForm.OnClosed();
			m_DummyForm.Dispose();
			m_DummyForm = null;
			
			m_Scanner = null;
		}
	}
	
	[...]
}

mfg Maddy

29.09.2009 - 14:42 Uhr

Hmm, IDisposable ist nicht implementiert, eine Scanner.Disable gibt es, diese wird auch brav aufgerufen. Ich hab geschaut, irgendwelche Eventhandler sind auch nicht mehr registriert, mehr fällt mir nicht ein. Im Threadfenster des Debuggers steht wie gesagt nichts.
Ich hab den Scannerzugriff in eine .dll gekapselt. Die Instanz der Hauptklasse dieser dll verwende ich aber mit einem using-block, also müsste von dieser Seite aus doch auch alles aufgeräumt werden, oder?
*ratlos*

29.09.2009 - 13:12 Uhr

Also es handelt sich um eine recht übersichtliche PocketPC-Anwendung, Timer, Callbacks oder extra Threads werden da nicht verwendet. Ich nutze allerdings über eine Externe Hersteller-.dll (.NET) Funktionen eines eingebauten Barcodescanners von Unitech. Dort werden scheinbar nicht alle Resourcen freigegeben (es schiebt sich leicht auf die Anderen ^^).
Gibt es eine Möglichkeit, alle von der Anwendung erzeugten Threads abzubrechen? Ist zwar eigentlich eine blöde Lösung, aber besser als nach jedem Programmaufruf ein Reset zu verlangen :-|

28.09.2009 - 17:29 Uhr

Danke!
Aber leider wird in diesem Fenster nur der Hauptthread angezeigt (also scheint keiner weiter zu laufen). Wenn ich nach dem vermeindlichen Beenden des Programms im Debugger auf 'Pause' drücke, erscheint dort gar kein Eintrag mehr - und er springt auch nicht an irgendeine Zeile vom Quelltext (was er sonst immer tut)...
Wenn ich das Beenden selbst debugge, geht er aus der Main-Methode raus aber läuft dann weiter. Wonach könnte ich noch suchen?

28.09.2009 - 11:36 Uhr

Gibt's dafür eine Liste oder ein Fenster bei dem man die laufenden Threads aufgelistet bekommt?

28.09.2009 - 09:14 Uhr

Hi.
Ich habe ein Pocket PC-Programm, bei dem, wenn ich das Hauptformular schließe, der Debugger weiterläuft (Forms gehen alle zu). Also scheint irgendwo noch ein Objekt nicht richtig disposed zu werden.
Gibt es eine Funktion im VisualStudio oder ein Tool, mit dem man sehen kann welche Objekte zu einem bestimmten Zeitpunkt existieren?

Maddy

28.07.2009 - 09:46 Uhr

Vorschlag: Benutze einen der korrekten Wege, um die Datenstruktur abzuholen, nämlich DbDataReader.GetSchemaTable oder DbSqlConnection.GetSchema und eine der Varianten von Parameters.Add.

...oder nimm einen DbDataAdapter/FbDataAdapter

28.07.2009 - 07:43 Uhr

Hallo chriscolm,

wie füllst du denn die DataTable? Möglicherweise stehen die Werte schon falsch in der DT.
Funktioniert DataTableReader.GetDouble() für die Spalte?

03.07.2009 - 11:17 Uhr

@gnc:

Du meinst sicher (letzte Zeile):

base.OnKeyDown(e);
25.06.2009 - 13:07 Uhr

Hallo multitrust,

du kannst in deiner Query den String der beiden Spalten verketten und diese 'entstandene Spalte' dann in deinem Steuerelement anzeigen:

SELECT FirstName || ' ' || LastName AS FullName FROM [...]
11.05.2009 - 08:46 Uhr

Für alle, die genauso gern lesen wie ich gibt es eine
Webcast-Serie auf MSDN, die auch die wichtigsten Patterns abhaldelt 8)

21.04.2009 - 13:57 Uhr

OK danke euch, da hab ich erstmal was zum lesen;) Glaub ich werde mir das Kopf-bis-Fuß-Buch anschauen.

mfg Maddy

21.04.2009 - 11:32 Uhr

Hi,
ich glaube der Titel sagt schon alles - es wird hier oft von der Verwendung aller möglichen Patterns gesprochen, ohne dass genau erwähnt wird wozu das jeweilige Pattern ist 🤔. Gibt es irgendwo eine art Liste, wo die wichtigsten Patterns aufgelistet und erklärt sind? Irgendwo müst ihr das Wissen ja her haben 😉
mfg Maddy

18.12.2008 - 08:12 Uhr

Hallo Vril,

zu 1: Es sieht so aus als ob du dein Programm nicht in c:\Programme installierst sondern direkt ins Startmenü. Das ist natürlich falsch, ins Startmenü gehören nur Verküpfungen. Die kannst du in deinem Setup-Projekt erstellen indem du dort unter 'Dateisystem' mit der rechten MT auf deine Projektausgabe klickst und dort 'Verknüpfung erstellen zu...' wählst.

zu 2:Setupprojekt --> Projekteigenschaften --> Erforderliche Komponenten --> entspechendes Paket auswählen und unten Installationsort auswählen.

mfg Maddy

09.12.2008 - 10:55 Uhr

Ich habs:

txtName.DataBindings[0].BindingManagerBase.EndCurrentEdit();

mfg Maddy

09.12.2008 - 10:17 Uhr

Hallo.
Also EndEdit() gibt es leider für keines der Controls, bei denen ich geschaut habe: TextBox, DataView, DataSet, DataTable.
Ich hab aber eine Methode textBox.DataBindings[0].WriteValue() gefunden, die laut MSDN auch genau das tut:

Liest den aktuellen Wert der Steuerelementeigenschaft und schreibt ihn in die Datenquelle.

Aber das funzt auch nicht.
Funktionieren tut es, wenn ich den Wert in der ComboBox ändere, sodass die Textboxen andere Werte anzeigen und dann wieder zurückänder. Dann gibt dataSet.HasChanges() TRUE zurück und GetChanges() gibt mir auch die entprechende Zeile zurück.
Vllt. liegt es am Binding?
So füll ich die Controls:

DataView dView = new DataView();
dView.Table = dSet.Tables[0]; //DataSet ist gefuellt
txtName.DataBindings.Add("Text", dView, "Name"); //die Textbox
cboOrte.DataSource = dSet.Tables[0]; //die ComboBox
cboOrte.DisplayMember = "Name";
cboOrte.ValueMember = "OrtId";

//in cboOrte_SelectedIndexChanged:
dView.RowFilter = "OrtId = " + cboOrte.SelectedValue.ToString();

Wenn ich die Daten in einem DataGrid bearbeite funktionert es auch.
Ist die generelle Vorgehensweise so richtig oder mach ich prinzipiell was falsch?

mfg Maddy

08.12.2008 - 17:19 Uhr

verwendetes Datenbanksystem: <egal>
Hallo.
Ich habe ein Problem beim Aktualisieren der Werte aus einer gebundenen Textbox in die entsprechende Tabelle:

Die Tabelle im Dataset hat die Spalten OrtId, Name, Plz usw.
Über der DataTable liegt ein DataView.
Die Tabelle ist per DataSource an eine ComboBox gebunden, DisplayMember = "Name" und ValueMember = "OrtId" .
Außerdem gibt es für die übrigen Spalten TextBoxen. Diese sind per DataBinding an ein DataView gebunden.
Wenn jetzt ein Eintrag in der ComboBox ausgewählt wird, wird im SelectedItemChanged-Event der RowFilter der DataView auf "OrtId = [wert]" gesetzt um den inhalt der entsprechenden Zeile in den TextBoxen anzuzeigen.
Bis hierhin geht alles.
Wenn jetzt die Werte in den TextBoxen geändert werden, und danach DataSet.HasChanges() aufgerufen wird, wird FALSE zurückgegeben. (sollte eigentlich TRUE sein).
Gibt es irgendwo eine versteckte Methode, die aufgerufen werden muss um die Werte in das Dataset zu 'übernehmen'? Bei z.B. DataGridViews stehen die Werte gleich im DataSet. Oder hab ich irgendwo einen Designfehler?

mfg Maddy

24.09.2008 - 23:24 Uhr

Hallo chrische5,

AFAIK müssen die Parameter genauso heißen, wie die Platzhalter. Also:

insertCommand.Parameters.Add("?p2", MySqlDbType.VarChar, 200, textBoxHeadline.Text);

PS1: Verwende 'dateTimePicker1.Value' statt 'dateTimePicker1.ToString()', sonst kracht es auch.

PS2: Bitte verwende 'var' nur dort, wo es (aus Designgründen) nicht anders geht, da es die Lesbarkeit deines Codes unnötig erschwert.

mfg Maddy

10.08.2008 - 00:33 Uhr

OK Danke. Hatte gehofft, es gibt eine 'Abkürzung' =)
mfg
Maddy

10.08.2008 - 00:14 Uhr

Hallo Gemeinde.
Ich stehe hier vor einem kleinen Designproblem; Muss leider etwas ausholen um es zu erläutern...

Ich habe mir ein kleines, einfaches Query-Tool für eine Datenbank gebastelt. Um in Programmen mit Datenbankverbindung ggf. schnell ein Werkzeug zur Verfügung zu haben ohne alles neu programmieren zu müssen, hab ich das Tool in eine .dll gepackt.

Die Klasse DbQueryTool nutzt eine Klasse IDbDatabase, in der die datenbankspezifischen Sachen (Connectionstring etc.) gespeichert sind. Beim erstellen der DbQueryTool-Klasse muss eine Instanz von IDbDatabase übergeben werden.
Das Query-Tool liegt in einem eigenständigem Projekt.

Das Programm, in dem ich das Query-Tool aufrufen will nutzt ebenfalls die IDbDatabase-Klasse.

Die beiden Klassen sind logischerweise identisch, da sie in ein und derselben .cs-Datei stehen.

Wenn ich der DbQueryTool-Klasse beim Erstellen in meinem Programm nun eine Instanz des IDbDatabase-Objektes übergebe meldet der Compiler, dass er 'IDbDatabase[Programmpfad QueryTool-Projekt]' nicht in 'IDbDatabase[Programmpfad Programm-Projekt]' konvertieren kann.
Für mich nachvollziehbar, da der ja nicht weiß, dass diese beiden Klassen identisch sind.

Nun (endlich) zu meiner Frage:
Kann man der Klasse an irgendeiner Stelle eine Art Fingerprint verpassen, an dem der Compiler erkennt, dass es sich um die selbe Klasse handelt?
Oder bleibt mir nur der Umweg über eine weitere .dll in der das IDbDatabase-Objekt gekapselt ist?

Schönes Wochenende,
Maddy

28.07.2008 - 09:38 Uhr

Hallo,
danke soweit für eure Hilfe. Dann such ich mal weiter =)

25.07.2008 - 10:28 Uhr

//in Klasse 'Y', die für jede Datei erstellt und initialisiert wird
string strFilePath = @"c:\test.txt"; //exemplarisch
using (FileStream fs = new FileStream(strFilePath, FileMode.Open))
{
     using(StreamReader sReader = new StreamReader(fs))
     {
           srting strLine = sReader.ReadLine();
     }
}

Die einzelnen Instanzen von 'Y' werden nacheinander erstellt und initialisiert - der Zugriff auf die Dateien passiert also nicht gleichzeitig.

25.07.2008 - 10:02 Uhr

Hallo Gemeinde,
auf die Gefahr hin, dass dieses Thema zum x-ten mal abgehandelt wird, die Suche hat mich diesmal nicht weiter gebracht...:

Ich hab eine Klasse 'X', in deren Init-Methode eine List<Y> mit Instanzen von anderen Klassen'Y' gefüllt wird. Diese wiederum werden vorher darin erstellt und lesen jeweils mit einem StreamReader Infos aus verschiedenen Dateien aus .
Soweit so gut, wenn ich die Init()-Methode im Anwendungsthread ausführe funzt alles wunderbar. Da das aber u.U. recht lange dauern kann, hab ich das ganze in einen BackgroudWorker verlagert. In der Methode des DoWork-Events wird die Klasse X erstellt und die Init()-Methode aufgerufen.

Jetzt passiert es regelmäßig, dass beim Einlesen der Dateien irgendwelcher Byte-Salat aus den StreamReader kommt, der gar nicht in den Dateien steht.
Woran liegt das, wie kann ich das beheben?

11.06.2008 - 15:22 Uhr

Hallo.
Du könntest in einer Schleife für alle ChildControls das PreviewKeyDown-Event auf einen zentralen Handler registrieren und dort dann ggf. Tastatureingaben abfangen. Das gleiche prinzip könnte auch für das MouseDown-Event funktionieren.

05.06.2008 - 08:26 Uhr

Setz in deinem ConnectionString den Paramter 'New' mal auf 'TRUE', dann wird die Datenbankdatei erstellt wenn sie nicht da ist. Wenn das geglückt ist, kannst du ja noch deine Tabelle anlegen und dann weiter testen.

23.04.2008 - 15:21 Uhr

Hallo Titos Cassata,

solche (oder ähnliche) Probleme hab ich auch regelmäßig mit WinMoblie. Entweder es handelt sich da um ein Bug oder ein sehr seltsames Feature 🤔
In den meisten Fällen hilft einfach 'Rumprobieren': *Die aufrufende Form vor dem Anzeigen deines Popups mit Hide() verstecken und danach erst das Popup anzeigen. *Das Popup mit Windowstate.Normal (oder so) anzeigen (.Show()) und erst danach auf Maximized setzen. *Mit BringToFront() 'hervorholen'.

Mir ist aufgefallen, dass das Problem gehäuft auftritt, wenn 'viel' im Constructor des Problemfensters passiert. Wenn möglich erstelle das Fenster, zeige es an und führe dann erst den übrigen Code aus - das hilft auch manchmal...

01.04.2008 - 14:30 Uhr

Hmm, kann es sein, dass du an deinem COM-Anschluss Pin2 & Pin3 verbunden hast (Kurzschluss) - damit kommt das Gesendete sofort wieder rein.

/edit:
Versuch mal 'VER?' per HyperTerminal zu senden - damit kannst du evtl. Fehler ausschließen

01.04.2008 - 13:46 Uhr

das ding ist spätestens morgen wieder weg!

Dessen bin ich mir 100%ig sicher 😁

01.04.2008 - 13:34 Uhr

Hallo weismat,

die Appender bei log4net haben eine Eigenschaft ImmediateFlush - wenn du diese auf FALSE setzt, wird nicht sofort geschrieben.
Allerdings kann ich keine Aussage treffen, was die Performance angeht 🤔

Maddy

01.04.2008 - 07:54 Uhr

Hallo.
Hab fix ein kleines Plugin für den IE gebaut, welches die Buchstaben des captcha-Feldes ausliest und mit der Website Duden.de abgleicht und dann das gefundene Wort in die Zwischenablage kopiert. So braucht ihr es nur noch einfügen und könnt fleißig suchen😉
Die Datei stell ich in Kürze hoch.

12.03.2008 - 14:17 Uhr

Hi.
Soweit ich weiß kannst du in der Main() - Methode das 'Application.ThreatException' - Event registrieren, das wird dann ausgeführet wenn eine Exception geworfen wird.

30.01.2008 - 12:58 Uhr

Hi.
Versuch mal

gridView.RefreshEdit();
23.01.2008 - 09:10 Uhr

aber bei SQlite kann man ja nicht speichern, bzw wenn das programm beendet wird, sind doch auch die DAten weg oder?

Wenn du bei SQLite die Verbindung zu Datenbankdatei hergestellt hast, verhält ist der wie bei jeder anderen Datenbank auch. Die Daten selbst werden in der Datenbankdatei abgelegt.

Gegen Xml spricht, dass immer die ganze Datei gelesen und gespeichert werden muss.

Mit SQlite bist du außerdem flexibler, falls doch mal eine Spalte oder Tabelle dazukommt. Außerdem hast du hier bessere Such-/editiermöglichkeiten deiner Daten.

23.01.2008 - 08:22 Uhr

hallo Grimmbizkit,
vielleicht brauchst du gar keine Datenbank - bei einer Tabelle mit nur 5 Spalten reicht eventuell auch eine einfache DataTable. Speichern/laden kannst du dann per xml.

DataTable.ReadXml(...) //lesen
DataTable.WriteXml(...) //schreiben

Hängt von der Anzahl der Datensätze ab. Falls es 'viele' sind würd ich es mit SQLite versuchen - dort hast du nur eine einzige Datenbankdatei und brauchst keinen Server zu installieren.