Hallo zusammen,
Eventuell waeren auch Extensionmethods was fuer dich.
s. winSharp93s Vorschlag:
Nimm doch die Erweiterungsmethoden aus System.Linq.
Damit hast du dann etwas sehr C#-Spezifisches, was du auch schön im praxisnahen Vergleich "konventionell"-"LINQ" darstellen kannst.
Ich wäre allerdings ebenfalls für Erweiterungsmethoden. Die kann man meiner Meinung nach auch in dieser Zeit gut verstehen, wenn sie verständlich erklärt werden.
Hallo herbivore,
Aussagen über die Anzahl der Folien sind schwer zu machen — per se sind mehr als drei Folien in fünf Minuten sicher nicht zu viel. An dieser Stelle sollte man sozusagen das "Folien-SRP" einhalten und nicht zu viel in eine einzige Folie packen.
m0rius
Hallo reloop,
sieh dir mal die Fluent Ribbon Control Suite an. Die bietet von Haus aus Backstage-Support.
m0rius
Hallo Hanswurst90,
da wirst du dir selbst etwas basteln müssen. Vorgefertigt gibt es kein HTML-Steuerelement wie die editierbare ComboBox
.
m0rius
Hallo Totenkopfschwärmer,
herzlich willkommen auf myCSharp!
Ohne deinen Enthusiasmus bremsen zu wollen — zwischen der Programmierung eines Bots und dem Verständnis von Feldern und Instanzen liegen leider Welten.
Es ist vollkommen normal, dass du nach 1 ½ Wochen keine "gescheiten" Programme schreiben kannst. Programmieren will schließlich gelernt sein, und die benötigte Zeit dafür solltest du nicht in Wochen, sondern in Monaten bzw. Jahren messen — je nach Anspruch und investierter Zeit.
Zu Beginn solltest du dir die fundamentalen Grundlagen aneignen und dafür dein C# Start Kit systematisch durcharbeiten. Sieh dir mal [FAQ] Wie finde ich den Einstieg in C#? an, dort findest du eine Menge Links und Tipps für den Anfang.
m0rius
Hallo hanshenkelman,
herzlich willkommen auf myCSharp!
Ich muss dich leider direkt auf [Hinweis] Wie poste ich richtig? Punkt 1.1.1 "Nicht nach Grundlagen fragen" hinweisen.
Trotzdem ein paar Tipps zur Benennung:*Vermeide die Ungarische Notation (darunter fällt bei dir der Präfix s_
).
*Vermeide Umlaute in deinem Code (z.B. "groß").
*Vermeide deutschprachige Bezeichner.
Nimm dir am besten mal eine Weile Zeit und lies dir die Richtlinien für Namen ein.
Ansonsten empfehle ich, dass du dir ein entsprechendes Buch ( 🛈 ) zulegst und dich systematisch in die Grundlagen einarbeitest. Die würden dir nämlich beim Verständnis deines Codes helfen — aus der statischen Methode Autostart_setzen
kannst du nämlich nicht auf das nicht-statische Feld status_autostart_setzen
zugreifen.
m0rius
Hallo David W,
kann ich nicht bestätigen — STRG+F5
schon versucht?
m0rius
Hallo Gumba,
hast du schon [FAQ] Flackernde Controls vermeiden / Schnelles, flackerfreies Zeichnen gelesen?
Wenn es beim Hinzufügen oder Umordnen von Controls flackert, probiert SuspendLayout/ResumeLayout.
m0rius
Hallo herbivore,
ein selbstschließender <a>
-Tag ist W3C-Konsortium nicht erlaubt.
m0rius
Hallo kom2006,
du kannst die Funktion natürlich auch in einem gewissen Zeitintervall aufrufen und so beispielsweise alle 100ms aktualisieren. Wie das performance-technisch aussieht, müsstet du testen.
m0rius
Hallo kom2066,
nach einer kurzen Googlesuche nach c# webbrowser mouse control habe ich die Diskussion C# webBrowser Control how to get data under mouse pointer auf StackOverflow gefunden.
Hier die Antwort vom Poweruser SLaks, schlicht und ergreifend:
Call
webBrowser.Document.GetElementFromPoint(webBrowser.PointToClient(MousePosition))
m0rius
Hallo CamelxDDD,
herzlich willkommen auf myCSharp!
Trotzdem muss ich dich sofort zu Beginn auf [Hinweis] Wie poste ich richtig? hinweisen.
Jedoch will es partout nicht funktionieren.
Kann mir bitte einer sagen warum?
Das ist eine denkbar ungünstige Fragestellung, s. Punkt 5 "Problem genau beschreiben, inkl. genauer Fehlermeldung". Was genau passiert bzw. passiert eben nicht?
Generell gilt: Verändere nie manuell den Code, der vom Designer erzeugt wird. Bei jeder Aktualisierung wird der nämlich mit dem neu generierten Code überschrieben.
m0rius
Hallo zero_x,
"lauschen" meint "einen Event-Handler für das entsprechende Event registrieren", der dann reagieren kann, wenn das Event gefeuert wurde.
m0rius
Hallo zusammen,
hier ein Horror von James Michael Hare, gerade auf Twitter gesehen:
Saw most awesome useless piece of legacy code at work in loop: if (strWebId == strSearchId) { bool bFound = true; bFound = false; } #WTF???
m0rius
Hallo zero_x,
Ich würde stattdessen lieber die Möglichkeiten von WPF ausnutzen.
die da konkret wären? Die Möglichkeit, Controls anhand ihres Namens zu finden? Ohne weitere Ausführungen ist der Hinweis – sorry – nicht so hilfreich.
Im ersten Codebeispiel von dir wird nicht geprüft, ob sich in myControlCollection nur Buttons befinden
Richtig, es können in myControlCollection
auch andere Controls enthalten sein. So what 😃?
bzw. ob das jeweilige Item auch vom Typ Button ist. Es wäre besser, wenn du vor [...] prüfst, ob nicht control ein Button ist
Diese Überprüfung wäre völlig sinnlos, da ich bereits mit dem as
-Operator caste. Ist control
nicht vom Typ Button
, enthält button
den Wert null
. Ausführlich wird der as
-Cast im Artikel [Tipp] Casten aber richtig: Begriffe wie Cast / is / as besprochen.
m0rius
Hallo kkirchhoff,
ChildWindow
ist von ContentControl
abgeleitet und besitzt deshalb eine Content
-Eigenschaft vom Typ object
— es enthält somit nur ein Kindelement! Dieses ist meist ein StackPanel
oder irgendein anderes Panel
, dessen Kindelemente du wiederum mit der Panel.Children-Eigenschaft vom Typ UIElementCollection auslesen kannst.
m0rius
[edit]Vererbungshierarchie eingefügt.[/edit]
Hallo kkirchhoff,
bitte beachte [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen) und [Hinweis] Wie poste ich richtig? Punkt 1.1.1 — das sind Grundlagen.
_inRootElement
ist vom Typ ChildWindow
. Die foreach
-Schleife kann nur über Typen iterieren, die IEnumerable
implementieren, und das tut ChildWindow
nicht.
m0rius
Hallo Tam0r,
erstelle dir ein Projekt vom Typ Klassenbibliothek (bzw. Class Library in der englischen Version von Visual Studio). Beim Kompilieren (unbedingt den Release-Modus verwenden!) wird eine .dll
-Datei im Projektordner unter bin/Release/
erzeugt, die du in deinen anderen Projekten einbinden kannst.
Wenn du deine Funktionen später ergänzt oder modifizierst, tust du das nur in deiner Klassenbibliothek und tauschst in den anderen Projekten lediglich die DLL aus.
m0rius
Hallo kkirchhoff,
ja, das ist per Reflection möglich, aber kein gutes Design.
Besser wäre es, zu versuchen, deine Controls in einen bestimmten Typ zu casten und auf diesen stark typisierten Controls die Zielmethode aufzurufen:
foreach (Control control in myControlCollection)
{
// Cast vornehmen
Button button = control as Button;
// Ist control vom Typ Button (oder vom Typ einer abgeleiteten Klasse von Button)?
if (button != null)
{
// Ja, also Methode aufrufen
button.PerformClick();
}
}
m0rius
[edit]Kommentare hinzugefügt.[/edit]
Hallo zero_x,
ja, genau — tolles Feature, STRG + .
... Das funktioniert allerdings nicht für die Erweiterungsmethoden aus dem Namespace System.Linq
!
m0rius
[edit]Typo[/edit]
Hallo reloop,
ich meine auch keine DLL, sondern einen Namespace. Hast du den Namespace System.Linq
folgendermaßen in der entsprechenden Klasse eingebunden?
using System.Linq;
m0rius
Hallo reloop,
verweist du in einer using-Direktive auf den Namespace System.Linq
?
m0rius
Hallo AllForOne,
sieh dir mal den Thread [FAQ] Wie finde ich den Einstieg in C#? an — dort findest du geeignete Hilfestellungen für C#-Neulinge.
m0rius
Hallo icolor,
was heißt denn
Und was heißt hier nach Grundlagen fragen?
? Punkt 1.1.1 heißt klar Nicht nach Grundlagen fragen — diese sollst du dir selbst erarbeiten, und das Projektmanagement von Visual Studio gehört definitiv dazu.
m0rius
Hallo icolor,
das sind absolute Grundlagen, s. Projektmanagement und Visual Studio 2010 » Mehrere Projekte in einer Projektmappe verwalten.
Abgesehen davon fügst du nicht deinem _Projekt _ein weiteres hinzu, sondern deiner Solution. Damit Projekt A öffentliche Member von Projekt B verwenden kann, muss B von A referenziert werden.
m0rius
Hallo tbr,
im Blogpost Comparing the properties of two objects via Reflection and C# habe ich unter Directly comparing values folgenden Code gefunden:
object valueA;
object valueB;
valueA = propertyInfo.GetValue(objectA, null);
valueB = propertyInfo.GetValue(objectB, null);
bool result;
IComparable selfValueComparer;
selfValueComparer = valueA as IComparable;
if (valueA == null && valueB != null || valueA != null && valueB == null)
result = false; // one of the values is null
else if (selfValueComparer != null && selfValueComparer.CompareTo(valueB) != 0)
result = false; // the comparison using IComparable failed
else if (!object.Equals(valueA, valueB))
result = false; // the comparison using Equals failed
else
result = true; // match
return result;
Hier wird auf verschiedene Vergleichsstrategien zurückgegriffen – versuch es doch mal damit.
m0rius
Hallo TBR,
vielleicht hilft dir die Diskussion Get property value from string using reflection in C# weiter. Ansonsten mal die anderen Suchergebnisse für Googlesuche nach c# reflection get property value durchgucken ...
m0rius
Hallo blr,
du rechnest dann ausschließlich mit Vektoren. Zum Addieren gibt es die statische Methode Vector2.Add(Vector2, Vector2), die zwei Vektoren addiert und das Resultat zurückgibt.
In deinem Fall würdest du die Summe von Positions- und Geschwindigkeitsvektor dem Positionsvektor zuweisen und so die alte Position aktualisieren.
Bitte setze deinen C#-Code in die ensprechenden BB-Codes [``CSHARP``]
bzw. [``/CSHARP``]
. Du bist ja mittlerweile auch eine Zeit lang dabei ...
m0rius
Hallo Th69,
die Vector2-Struktur besitzt die statische Methode Vector2.Transform(Vector2, Matrix). Diese kann wie folgt auch zum Rotieren eines Vektors um einen bestimmten Winkel verwendet werden:
// Winkelberechnung in Radiant wie gehabt:
float angleInRadians = MathHelper.ToRadians(10);
// Es wird die statische Methode Matrix.CreateRotationZ verwendet, da um die Z-Achse rotiert wird.
// Zeigt die X-Achse nach rechts und die Y-Achse nach oben, kommt die Z-Achse aus dem Monitor heraus.
Matrix rotationMatrix = Matrix.CreateRotationZ(angleInRadians);
// Berechnete Matrix-Rotation auf den Positionsvektor anwenden:
position = Vector2.Transform(position, rotationMatrix);
So kann die händische Berechnung der trigonometrischen Funktionen entfallen.
m0rius
Hallo Th69,
sicher wäre es eine Möglichkeit, die trigonometrischen Berechnungen und die Vektoradditionen händisch durchzuführen — allerdings enthält das XNA-Framework bereits die Vector2-Struktur, die die Eigenschaften X
und Y
besitzt.
m0rius
[edit]Formulierung. Etwas kryptisch gewesen ...[/edit]
Hallo blr,
bewege deine Fahrzeuge vektorbasiert und addiere den jeweiligen Geschwindigkeitsvektor zur derzeitigen Position, die du ebenfalls durch einen Vektor darstellst. So ist es auch nicht schwer, die Geschwindigkeiten in X- und Y-Richtung getrennt zu manipulieren.
m0rius
Hallo talla,
danke für die Erklärung — im ersten Moment ist das implementierte Verhalten so nicht intuitiv.
m0rius
Hallo ErfinderDesRades,
zugegebenermaßen war ich gerade echt baff – es lag wirklich an Label.RightToLeft
!
Und nein, es wurde nicht der gesamte String rückwärts dargestellt. Hat jemand dafür eine logische Begründung?
m0rius
Hallo ErfinderDesRades,
in dem Fall müsste aber der gesamte String rückwärts dargestellt werden, oder?
m0rius
Hallo zero_x,
mein heißester Kandidat:
Wie schreibt man lesbaren Code? Wie benennt man Member am besten? Wann und wie sollten man kommentieren? Wie verwendet man Unit Tests und TDD?
Meine Zustimmung zu Entwurfsmuster von Kopf bis Fuß (von O'Reilly)!
m0rius
Hallo Cuin,
versucht es mal mit diesem regulären Ausdruck:
/\*(?<comment>.*?)\*/
Wenn ich dein Anliegen richtig verstanden habe, sollte er korrekt funktionieren. Für den ersten Kommentar matcht die Gruppe comment "Ein Kommentar".
m0rius
P.S: Getestet habe ich den regulären Ausdruck mit dem On-the-fly Regex-Tester: Regex-Lab von herbivore.
Hallo kds,
sorry, aber das sind absolute Grundlagen. Bitte eigne dir diese an.
Trotzdem: Zum Hinzufügen einer Referenz machst du einen **Rechtsklick **auf das entsprechende **Projekt **in deiner **Solution **und wählst den Punkt Add Reference... (bzw. Referenz hinzufügen...) und wählst die **DLL **aus.
m0rius
Hallo,
da hier drei Tage keine Antwort kam, geht das hier meines Erachtens nach nicht als Crosspost durch: Ich habe die Frage auf StackOverflow gestellt – dort wurde sie beantwortet!
m0rius
Hallo,
ich verwende das Table Splitting-Feature des Entity Frameworks, um in der Datenbank gespeicherte Bilder (Spaltenname: Image
) meiner Tabelle News
nicht automatisch bei jeder Abfrage mitzuladen. Die entsprechenden Spalten können explizit bei Bedarf nachgeladen werden.
Um an das ausgelagerte Bild zu gelangen, spreche ich die vom Entity Framework angelegte Eigenschaft NewsImage
an.
Für die Model-Validierung (ASP.NET MVC-Projekt) verwende ich Data Annotations und damit verbunden Attribute wie [Required]
:
public class NewsValidation
{
[DisplayName("Titel")]
[Required(ErrorMessage = "Pflichtfeld!")]
public string Title { get; set; }
/* ... */
}
Nun meine Frage: Wie kann ich die Eigenschaft NewsImage.Image
mit dem [Required]
-Attribut auszeichnen, um ein Bild zu erzwingen?
m0rius
Hallo blr,
mangelnde Erfahrung hin oder her – ein wenig Eigeninitiative kannst du schon zeigen: http://de.wikipedia.org/wiki/Zune.
m0rius
Hallo blr,
ohne Erfahrungen in der Spieleprogrammierung innerhalb von drei Wochen ein Spiel schreiben, das netzwerkfähig ist und anspruchsvoller als Risiko?
Was hast du denn für Erfahrungen mit C# und der Programmierung allgemein? Ohne dich demotivieren zu wollen – so sehe ich nämlich momentan schwarz.
m0rius
Hallo HiGHteK,
vielen Dank, das Add-On kannte ich noch nicht. Habe mir jetzt für die Codeblöcke überall Consolas eingestellt und die Farben dem Farbschema von Visual Studio angepasst – sieht sehr viel besser aus!
Hier die CSS-Styles für Stylish für alle Interessierten:
@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document domain("www.mycsharp.de") {
code {
font-family: Consolas;
font-size: 10pt;
}
.xmltag {
color: #a31515 !important;
}
.xmlattr {
color: #ff0000 !important;
}
.xmlcomment {
color: #008000 !important;
}
.xmlstring {
color: #0000ff !important;
}
}
m0rius
Hallo herbivore,
ich kenne die Beweggründe nicht, aus denen sich Microsoft für die abweichende Farbgebung entschieden hat. Allerdings kann man nicht als Argument anführen, dass eine andere Sprache – und C# und XAML sind nunmal zwei verschiedene Sprachen – ein anderes Farbschema verwendet. Schließlich stellen wir hier Schlagwörter auch nicht lila und fett dar, nur weil es Eclipse für Java so macht.
Lange Rede, kurzer Sinn: Ich bin der Meinung, dass man, welche Konvention auch immer verwendet wird, und die von Visual Studio ist die gängigere, diese beibehalten sollte — stick to it.
m0rius
Hallo herbivore,
chic, danke für die Änderung – bereits jetzt ist XAML-Markup deutlich lesbarer geworden!
Ich würde mich trotzdem freuen, wenn du dir die restliche Farbgebung für Tag-Namen und Strings nochmal durch den Kopf gehen lassen würdest. Der Großteil der Forenbenutzer wird Visual Studio verwenden und demnach dessen Farbschema gewöhnt sein.
Es ist selbstverständlich dein gutes Recht, wenn dir braune Tags und blaue Strings nicht gefallen – andererseits wird es genau so viele Benutzer geben, denen es andersherum ergeht. Daher wäre ich dafür, sich der XAML-Farbkonvention von Visual Studio anzupassen und der Konvention zu folgen, um die Umstellung vermeiden zu können.
m0rius
Hallo herbivore,
bis auf das bananengelb sind die von ErfinderDesRades verwendeten Farben die Standardfarben von Visual Studio.
:::{style="color: red;"}Rote Attribute){red}
fände ich ebenfalls sehr schön.
m0rius
Hallo MarsStein,
vielen Dank für diesen Link – ich kannte die gesamte Google webmaster-zentrale bisher noch nicht!
m0rius
Hallo,
wie kann ich eine Website, die Breadcrumb-URLs wie z.B. http://www.augustinerschule.de/startseite/organisation/foerderverein/beitritt besitzt, so optimieren, dass in den Google-Suchergebnissen der Breadcrumb entsprechend klickbar dargestellt wird?
m0rius
Hallo Tomit,
vielen Dank für deinen Verbesserungsvorschlag!
Ich werde mal sehen, wann und ob ich dazu komme, die Berechnung zu optimieren – zur Zeit habe ich ziemlich viel um die Ohren.
m0rius
Hallo ErfinderDesRades,
ich hätte dir gerade die IsSynchronizedWithCurrentItem
-Property vorgeschlagen, bis ich gemerkt habe, dass die TreeView diese nicht besitzt. Vielleicht bringt dich die Diskussion Where is IsSynchronizedWithCurrentItem property (or equivalent) for a TreeView? weiter ...
m0rius
Hallo ErfinderDesRades,
ohne es getestet zu haben: Hast du mal versucht, den Modus des Bindings explizit auf OneWay
zu setzen? Dass die Quelle des Bindings nur einmalig einen Wert übermittelt, klingt nach dem Modus OneTime
. (Wie gesagt, das ist spekulativ.
m0rius