Laden...
Avatar #avatar-3534.jpg
hummigbird1 myCSharp.de - Member
Software-Developer Dabei seit 10.06.2015 127 Beiträge
Benutzerbeschreibung

Forenbeiträge von hummigbird1 Ingesamt 127 Beiträge

28.06.2015 - 10:11 Uhr

Hmmm, man könnte das zwar sagen aber ich denke nicht das es technisch akkurat wäre.
Der Compiler findet alle Deklarationen bzw. alle benötigten Metainformationen in den Assemblies.
Die Namespaces erfüllen eher den Zweck der eindeutigen Identifikation in dem "globalen Raum" in dem sich das "kompilieren" abspielt. (Schon beim kompilieren unterscheidet sich .NET von C/C++ da ja nicht direkt in Maschinencode kompiliert wird sondern in Byte-Code.)

Im Prinzip werden immer weitere Assemblies eingebunden. Das einzige das von Haus aus einem Programm bekannt ist sind die Typen und Methoden die im Core von .NET definiert sind (mscorlib.dll)

Alle weiterführenden Assemblies müssen explizit eingebunden werden.
Visual Studio übernimmt das aber in der Regel beim anlegen eines neuen Projektes die Assemblies einzubinden (zu referenzieren) die du für die entsprechende Projektart auf jeden Fall benötigst (z.B. System, etc.)

Lege dir ein neues Konsoleprogramm in Visual Studio an und siehe dir mal die Verweise / Referenzen des neuen Projektes an. 😉
Kannst dann ja mal zum Spaß einfach alle Verweise entfernen und sehen wie sich das auf die kompilierbarkeit deines Progammes auswirkt. Vielleicht hilft das ja deinem Verständnis weiter.

28.06.2015 - 00:16 Uhr

Warum man keine Include Direktiven mehr benötigt ist relativ einfach gesagt:
Das liegt an der anderen Art mit der .NET Bibliotheken sucht und einbindet.
Das funktioniert anders als bei C/C++.
Stichworte hierzu sind Assembly Binding und Fusion.

Indirekt hast du auch in .NET so etwas ähnliches wie Include Direktiven und zwar über die Assembly Referenzen die du während der Programmierung angibst. Ist aber auch hier technisch nicht mit Include Direktiven gleich zu setzen.

Ich weiß nicht ob es korrekt ist zu sagen das man die Using Anweisung benötigt.
Sie nicht zu benutzen würde vermutlich furchtbaren Code produzieren und die Lesbarkeit drastisch verschlechtern, ganz zu schweigen davon das man beim Programmieren wahnsinnig werden würde.
Aber meinem Verständnis nach, könnte man auch die Using Anweisung weglassen, auch wenn ich das nicht empfehlen würde.

Der Namespace dient primär zur Gliederung einer Codebase und auch zur Vermeidung von Namenskonflikten. (Gleiche Methoden etc.)
Der Namespace ist nur für dich als Programmierer optional. Der Compiler fügt einen Standardnamespace hinzu wenn du keinen explizit definierst:
namespace (C# Reference)

Whether or not you explicitly declare a namespace in a C# source file, the compiler adds a default namespace. This unnamed namespace, sometimes referred to as the global namespace, is present in every file. Any identifier in the global namespace is available for use in a named namespace.

24.06.2015 - 17:51 Uhr

Solange die Signatur des Click Events für alle deine Objekte gleich ist, ist das kein Problem.
Die von Haus aus gelieferten Event Signaturen eines COntrols haben alle ein "Object sender" als ersten Parameter.
Control.Click Event

Dieser "sender" ist das Objekte das dieses Click Event ausgelöst hat und läßt sich auf Typen hin prüfen und entsprechend casten.

23.06.2015 - 22:45 Uhr

Ich verstehe deine Frage nicht ganz.
"Ein solches Programm"?
Ich dachte du willst dein eigenes Programm updaten.
Dann solltest du einfach ein weiteres kleines Programm schreiben das Mithilfe von Updatesystem.net dein Hauptprogramm updatet.

Oder bin ich da jetzt irgendwo gedanklich ganz falsch abgebogen?

Mein Verständnis deines ursprünglichen Posts:
Fakt: Du willst mit Updatesystem.net dein selbst geschriebenes .NET Programm updaten.
Annahme: Updatesystem.net ist eine 3rd Party Bibliothek die eine vorgefertigte Updatefunktionalität mitbringt die du nutzen möchtest.
Problem: Du bekommst bei deinen Versuchen (bei denen ich nicht weiß wie diese aussehen da kein Code oder detaillierte Beschreibung deines Versuchaufbaus bekannt ist) eine Fehlermeldung und möchtest daher Hilfestellung.

Ist dies soweit korrekt? Wenn ja, dann bleibe ich bei meiner spontanen Vermutung (mein Bauchgefühl) und damit steht auch meine Antwort oben in diesem Post.

23.06.2015 - 22:20 Uhr

Ich kenne dieses Updatesystem.net nicht
Aber mein Gefühl sagt mir spontan das du versuchst dein Programm durch sich selbst updaten zu lassen.
Wenn ich richtig liege würde ich sagen das dies nicht funktionieren wird.
Vermutlich brauchst du ein separates kleines Update Programm das dein Hauptprogramm updatet.
(Firefox macht das so ... Firefox selbst datet den Updater ab und der Updater datet das Hauptprogramm ab 😉 - Zungenbrecher)

22.06.2015 - 19:59 Uhr

Na wenn ich dir genau sagen könnte welchen Code dann würde ich dir vermutlich auch schon sagen können wo dein Problem liegt.
Mit anderen Worte, ich kann dir nicht genau sagen welchen Code.
Je mehr du bereitstellen kannst desto höher die Wahrscheinlichkeit das ich einen Einblick in das Problem bekomme und desto eher kann ich dir vielleicht helfen. (Am besten das ganze Projekt.)

Wie schon gesagt, vielleicht bin ich ja der einzige der nicht ganz versteht woher dein Problem kommt und andere können dir ohne Code helfen. (bzw. können dir direkt sagen welchen Code sie sehen müssen) 😉

Grundsätzlich kann ich auf jeden Fall aus deiner Beschreibung heraus nicht feststellen was da schief läuft und deswegen bräuchte ich Code und evtl. auch mal debuggen zu können falls du das nicht selbst schon gemacht hast (was ich hoffen will 😁 ).

21.06.2015 - 19:06 Uhr

Hallo excis,

wir setzen keinen expliziten Kenntnisstand voraus.
Einzig das Interesse und die Begeisterung für die .NET Platform (und/oder Powershell) sollten vorhanden sein.
Du bist Einsteiger, dann würde ich vorschlagen schau einfach vorbei und schau wie es dir gefällt und entscheide selbst.

Grüße
Mike

20.06.2015 - 10:33 Uhr

Naja, der XmlReader ist zum einlesen eines Xmls und der XmlWriter zum schreiben.
Das heißt mit dem Reader alleine kannst du das Xml nur einlesen du wirst auf jeden Fall auch noch einen Writer benötigen um eine Node einzufügen.

Gehen tut das schon:
Combining the XmlReader and XmlWriter classes for simple streaming transformations

Ich finde es einfach nicht ganz so elegant und eher etwas umständlich um ein Node in ein kleines Xml einzufügen.

19.06.2015 - 23:22 Uhr

Ich muß gestehen ich habe auch nicht sonderlich viel Erfahrung mit WPF und Xaml.

Aber vielleicht hilft dir ja das folgende Beispiel weiter dein Problem einzukreisen:
http://stackoverflow.com/questions/15900627/creating-storyboard-in-code-behind-in-wpf
Oder
https://msdn.microsoft.com/en-us/library/cc189069%28VS.95%29.aspx

19.06.2015 - 21:43 Uhr

Nein, das geht einfacher (und sicherer - Xml bitte niemals als reinen Text bearbeiten, das geht fast nie wirklich gut)
Ich glaube der einfachste Weg in ein fertiges Xml ein Element einzufügen ist die Verwendung der XmlDocument Klasse:
XmlDocument Class

Diese biete viele Bearbeitungsmethoden.
Es gibt sicherlich noch andere (XDocument zum Beispiel: XDocument Class)
finde aber das XmlDocument gerade für Einsteiger gut zu erlernen ist.

19.06.2015 - 18:30 Uhr

Weiß nicht ob es nur mir so geht, aber ein wenig Code wäre hilfreich um zu sehen was du genau wie machst bzw. machen möchtest ...

19.06.2015 - 18:26 Uhr

Hmm, dann habe ich das Problem also richtig verstanden.

Das von dir beschrieben Problem kenne ich eigentlich nur insoweit als das die Controls nicht zu dem Designer passen der gerade geöffnet ist.
Versuchst du vielleicht Windows Forms Controls in einer WPF Anwendung zu verwenden (oder umgekehrt), oder Web Forms oder so etwas in der Art...

Ich gehe davon aus das du genau die folgenden Schritte eingehalten hast:
https://msdn.microsoft.com/en-us/library/ff462023%28v=vs.95%29.aspx

Vielleicht hilft dir ja noch dieser Thread:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/490c9f52-f0c3-4fd3-9770-b8be9e0fd9d9/toolbox-missing-controls?forum=vssetup

18.06.2015 - 22:20 Uhr

Nein, Ja ...

Die Events ProgressChanged und RunWorkerCompleted laufen beide im UIThread und eben speziell dafür gedacht dort die Controls zu aktualisieren.

Naja ... auch die Antwort ist, wenn man dem folgenden glauben schenken mag, nur bedingt korrekt:
BackgroundWorker RunWorkerCompleted Event

Es ist also davon abhängig auf welchem Thread der Backgroundthread gestartet wird.

18.06.2015 - 20:21 Uhr

Suchst du denn nach einer reinen SQL Lösung für dein Problem?
Wenn ja, dann helfen dir vielleicht: Openrowset (Use your text / CSV files in your queries via OPENROWSET)

Oder die DTS (Data Transformation Services) vom SQL Server weiter:
Data Transformation Services

Nachtrag:
Vielleicht auch ein BulkCopy wenn es doch ein wenig C# sein darf:
Using C# And SqlBulkCopy To Import CSV Data Into SQL Server

18.06.2015 - 20:16 Uhr

Vermutlich funktioniert das "RunWorkerCompleted" Ereignis nicht weil du versuchst daraus eine MessageBox anzuzeigen.
Aus Hintergrundthreads darf man nicht direkt mit UI Elementen interagieren, das gibt in der Regel eine CrossThreadException.

In meiner Erfahrung ist das mit den CrossThreadExceptions so eine Sache. Manchmal werden diese zuverlässig angezeigt, oft ist es aber auch so dass das Programm eine sehr merkwürdige /undefinierte Verhaltensweise an den Tag legt.

Wenn du nach "CrossThread Exception" suchst, findest du vermutlich genug um das Problem zu korrigieren.

18.06.2015 - 20:08 Uhr

Ich muß gestehen ich verstehe das Problem nicht ganz.

Aber die DLLs wo die Controls enthalten sind mußt du doch sowieso dem Projekt hinzufügen in dem du die Controls verwenden willst. (Sonst kannst du deine Projekte sowieso nicht kompilieren weil er sich sonst über unbekannte Typen, die gewünschten Controls, beim Kompilieren beschwert)

Also füge doch die Referenz zu den DLLs deinem Projekt hinzu.

Wenn ich dich richtig verstehe löst das doch dein Problem.

18.06.2015 - 20:04 Uhr

Vielleicht mal den ganzen Code posten damit man den Kontext sieht und die Details versteht...

15.06.2015 - 21:35 Uhr

Stichwort UserControl

Gibt es in WPF (https://msdn.microsoft.com/en-us/library/system.windows.controls.usercontrol%28v=vs.110%29.aspx) und Windows Forms (https://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol%28v=vs.110%29.aspx)

Mit einem User Control lassen sich diverse Controls zu einem Benutzerdefinierten Steuerlement zusammenfassen und als ein Control verwenden / kapseln.

Beispiel / Walkthrough: https://msdn.microsoft.com/en-us/library/ms233813.aspx

14.06.2015 - 20:14 Uhr

Schau doch mal den Link hier an, da scheint jemand das gleiche Problem zu haben:
Email senden directSLL auf Port 465

Scheint bei denen letztendlich auch nur mit Port 587 zu gehen.
Warum das bei dir nicht geht ist mir nicht klar, aber bei dem Poster ging es ja zuerst auch nicht ...

14.06.2015 - 18:30 Uhr

Soweit ich weiß ist diese Fehlermeldung recht allgemein.
Die kommt, meines Wissens nach, immer wenn irgendwas mit der Verbindung nicht in Ordnung ist (Einstellungen, Konfiguration etc.) ohne das es ein Indiz ist was nicht stimmt.

Daher zuerst mal prüfen das du auch wirklich die richtigen Einstellungen verwendest für den SMTP Server:
FAQ - Wie lauten die Server für ein- und ausgehende E-Mails für mein Postfach?
(Beachte das Port 587 auch geht dann aber nicht per SSL sondern TLS)

Ansonsten hatte hier mal jemand auch so ein Problem (anderer Provider) konnte aber bei dem auch per Einstellung des Clients zum funktionieren gebracht werden:
E-Mail über Smtp versenden

Natürlich auch die üblichen Verdächtigen ausschließen wie lokale Netzwerkfirewall etc.

14.06.2015 - 15:34 Uhr

Wie so oft, führen viele Wege nach Rom.

Als alternativer (und evtl. eleganterer Weg) schau dir doch mal die Parse Methode der Size Klasse an: https://msdn.microsoft.com/en-us/library/system.windows.size.parse%28v=vs.110%29.aspx

Oder du füllst in die ComboBox Items mit dem Typ Size die du direkt und ohne Konvertierung verwenden kannst.

12.06.2015 - 21:13 Uhr

Da mich das jetzt doch mal interessiert hat, dachte ich mir, es gibt nichts was Google nicht wüßte.
Also kurze Google Suche nach: Top-Level Klassen C#
ergab das der Begriff wohl häufiger im Java Kontext verwendet wird.

Ab dem 5. Link kommt auch ein Bezug zu C# zustande und zwar in einem Buch:
Hier wird der Begriff dann wohl eher als Bezeichnung (zur Erklärung) denn als Konstrukt bzw. Schlüsselwort verwendet.
Evtl. ist das auch bei euch so in der Vorlesung ...

12.06.2015 - 16:50 Uhr

Das sehe ich auch so.
Den Begriff Top-Level Class höre ich im .NET Umfeld auch zum ersten mal.
Ich denke es könnte sich vielleicht um einen Übersetzungsfehler handeln ...

Normalerweise kann eine Klasse nur in einer einzigen Datei sein. (Zumindest ist mir nichts anderes bekannt)
Ausnahme ist eben durch das Schlüsselwort partial.
Dadurch kann ich den Sourcecode einer Klasse auf mehrere physische Dateien verteilen. An den Möglichkeiten / Eigenschaften einer Klasse im Objekt-orientierten Sinne ändert das aber nichts.

11.06.2015 - 20:18 Uhr

Stuttgart hat bereits eine aktive .NET UserGroup:
https://twitter.com/netugstgt
http://www.devgroup-stuttgart.net/

Da ich aber auch diverse .NET Entwickler aus Heilbronn (und Umgebung kenne) dachte ich das es vielleicht Sinn macht auch in Heilbronn eine zu gründen (damit man nicht nach Stuttgart fahren muß um Gleichgesinnte zu treffen).

Bis jetzt war das Interesse aber sehr verhalten ... ich hoffe das sich das durch die größere Streuung durch die Ankündigung hier im Forum, demnächst ändern wird. 😁

Auf jeden Fall, vielen Dank für deine Tatkräftige Unterstützung!

10.06.2015 - 23:07 Uhr

Hallo und Willkommen,

das mit dem Fehler (Show ist Methodengruppe) ist einfach erklärt:
Show ist eine Methode.
Du verwendest Show aber wie eine Eigenschaft (Property).
Daran stört sich der Compiler denn er versteht nicht das du eigentlich die Show Methode aufrufen willst.
Methoden ruft man immer mit Klammern auf.
Also in deinem Fall:
MessageBox.Show("Sie haben zweimal die gleiche Währung ausgewählt");

Das andere Problem das du keine Ausgabe in deine Textbox bekommst liegt daran das du leider die falsche Eigenschaft der ComboBoxen verwendest.
Die "SelectedText" Eigenschaft gibt zurück welcher Text wirklich im Feld "markiert" ist und nicht ausgewählt wie du es gerne hättest. (Irreführende Benennung wenn man Deutsch und Englisch übersetzt)
Die Eigenschaft der Combobox die du suchst für dein konkretes Programmbeispiel wäre "SelectedItem"
SelectedItem aber liefert dir den ausgewählten Listeneintrag als "Object" zurück. Das heißt du mußt das "Object" noch zu einem "String" "casten" um es vergleichen zu können.
String-Vergleiche macht man idealerweise mit der "Equals" Methode, da ich aber befürchte dich hier schon evtl. mit Komplexität abzuschrecken gebe ich dir einfach mal den Code wie er funktioniert und du versuchst ihn zu verstehen. (Verbessern im Sinne von "absolut sicher" machen wir später 😉 )

Du müßtest deinen Code wie folgt umbauen:


private void button1_Click(object sender, EventArgs e)
        {
            double Waehrung1 = Convert.ToDouble(textBox1.Text);
            double Ergebnis;

            if (comboBox1.SelectedItem.ToString() == "Euro")
            {
                if (comboBox2.SelectedItem.ToString() == "Euro")
                {
                    MessageBox.Show("Sie haben zweimal die gleiche Währung ausgewählt");
                }
                else if (comboBox2.SelectedItem.ToString() == "")
                {
                    MessageBox.Show("Sie haben keine Währung ausgewählt");
                }
            }
            if (comboBox1.SelectedItem.ToString() == "Euro")
            {
                if (comboBox2.SelectedItem.ToString() == "Dollar")
                {
                    Ergebnis = Waehrung1 * 1.1304;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "Yen")
                {
                    Ergebnis = Waehrung1 * 7.0178;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "JP Yen")
                {
                    Ergebnis = Waehrung1 * 138.8240;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "Russischer Rubel")
                {
                    Ergebnis = Waehrung1 * 61.5894;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "CA Dollar")
                {
                    Ergebnis = Waehrung1 * 1.3870;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
            }
        }

Übrigens: Die MSDN dürfte dir viel Kopfzerbrechen sparen.
Für deine Beispiele:
MessageBox.Show
MessageBox.Show-Methode

ComboBox SelectedText
ComboBox.SelectedText-Eigenschaft

ComboBox SelectedItem
ComboBox.SelectedItem

Wie schon gesagt, gäbe es noch diverse Veränderungen um das Programm noch "korrekter" zu machen, aber da du ja erst anfängst ist die absolute "korrektheit" noch nicht von größter Bedeutung.
Also, versuch erst meine genannten Veränderungen zu verstehen und dann machen wir weiter.
Wenn du Fragen oder Probleme hast, sag Bescheid!

10.06.2015 - 22:34 Uhr

Hi,

Spontan fällt mir da folgender Lösungsansatz ein:

Zuerst selektierst du dir alle Fragen aus der Datenbank die gleich (oder leichter) dem gewünschten Schwierigkeitsgrad sind.

Du hast nun im Code ein Listenobjekt (Array, List<> etc.) bei dem du die Anzahl (Anzahl an verfügbaren Fragen mit dem gewünschten Schwierigkeitsgrad) kennst.
Durch die Random Funktion (Random.Next Method (Int32, Int32)) läßt du dir nun eine Zahl geben die zwischen 0 und der Anzahl-1 liegt und nimmst diese Zahl als Index der Liste.
Dadurch bekommst du ein zufälliges Listenelement und nimmst diese als Frage in deine "Klausur" auf.
Gleichzeitig summierst du die Gesamt-Punktzahl deiner "Klausur" auf.

Das wiederholst du solange bis du deine Punktzahl erreicht hast, allerdings mußt du dann bei der zufälligen Auswahl der Frage noch sicherstellen das die Punktzahl der gewählten Frage nicht zusammen mit der bereits bestehenden Gesamt-Punktzahl deine gewünschte Gesamtpunktzahl überschreitet.

Hier würde sich evtl. auch Linq anbieten um die Liste der Selektierten Frage vom Anfang immer weiter um die Fragen zu reduzieren (wegfiltern) die größer sind als die verbleibende Restpunktzahl.

Idealerweise entfernst du auch die Fragen aus der anfänglichen Liste die du bereits der "Klausur" zugefügt hast um nicht die gleichen Fragen mehrfach in der "Klausur" zu haben.

Das ist vielleicht nicht die eleganteste Art und performanteste Art das Problem zu lösen aber sicherlich ein recht einfacher und schneller Weg.

Ich hoffe ich konnte es verständlich genug formulieren ...
Natürlich ist das auch keine komplett fertige Lösung (der Teufel liegt bekanntlich im Detail 😉 ), aber ich denke es ist ein Denkanstoß um dich auf einen möglichen Weg zu bringen.

Ich hoffe das hilft dir weiter.

10.06.2015 - 19:11 Uhr

Hallo,

wir suchen Interessierte um eine .Net Usergroup für den Raum Heilbronn (PLZ 740xx) zu gründen und laden deshalb zu einem Treffen ein um Ideen, Wünschen, Anregungen und das gegenseitige Kennenlernen zu ermöglichen.

Wann?
Dienstag den 30.06.2015 um 19 Uhr

Wo?
Irish Pub
(Lammgasse 30, 74072 Heilbronn)

http://www.irishpub-heilbronn.de/

Wenn ihr interessiert seid, dann kommt einfach vorbei!

Unsere Homepage:
http://hn-dotnet.de/

Oder folgt uns auf Twitter:
https://twitter.com/hndnug

Bis dahin!

Grüße
Mike