Hast du denn schon mal ge'debugged', ob überhaupt die Eventhandler angesprungen werden?
Und ich kenne noch CodeMaid und dessen Spade-Window (Code Digging).
Hi,
deine letzte Zeile (Controls.Add) überschreibt wieder den Parent, d.h. entweder die letzte Zeile löschen oder aber stattdessen
ObjektPanel.Controls.Add(box);
Und die Eventzuweisung(en) kannst du auf
box.MouseDown += pictureBox_MouseDown;
kürzen.
Hi,
angelehnt an How can I create a data binding in code using WPF?
DataGridTextColumn textColumn = new DataGridTextColumn();
Binding binding = new Binding("Name");
binding.Source = stateCollection;
textColumn.SetBinding(DataGridColumn.HeaderProperty, binding);
Und deine OnPropertyChanged-Aufrufe sind falsch, denn du mußt den exakten Propertynamen (inkl. Groß-/Kleinschreibung) verwenden:
private int _id;
public int Id
{
get { return _id; }
set { _id = value; OnPropertyChanged("Id"); }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged("Name"); }
}
Lass doch mal die Zeile(n)
tbLänge.Text = Convert.ToString(länge);
weg. Hat Console32 ja schon geschrieben, dass das Zurückschreiben sinnlos ist.
Das ist aber sehr eigenartig, d.h. er landet im Window_MouseMove, obwohl im VOLUMEBAR_PreviewMouseMove e.Handled auf true gesetzt ist?
Wie hast du die Events denn registriert?
Hi nochmals,
es geht auch ohne Array, mit zwei ineinander verschachtelten Schleifen. Du mußt dir dann in einer Variablen die bisher häufigste Zahl merken.
Pseudocode:
int max_zahl = 0;
int max_counter = 0;
Für jede Zahl in der Liste (aktuelle_zahl)
Innere Schleife: zähle die Häufigkeit dieser Zahl in der Liste (counter)
wenn counter > max_counter, dann max_zahl = aktuelle_zahl, max_counter = counter
P.S. wenn du nur ganze Zufallszahlen in der Liste speichern willst, dann nimm List<int>
Hi TobiPin,
am einfachsten geht das mittels Linq: [erledigt] LINQ - Häufigstes Element in einem Array finden
Da du jedoch noch Anfänger zu sein scheinst, könntest du auch selber ein sog. Histogramm erstellen, d.h. ein int-Array erstellen und für jede Zufallszahl den Zähler um 1 erhöhen. Und am Ende dann die Zahl mit dem größten Zähler ermitteln.
Hi,
so ganz kann ich deiner Beschreibung nicht folgen, aber hast du schon mal die Handled-Eigenschaft ausprobiert:
private void VOLUMEBAR_PreviewMouseMove(object sender, MouseEventArgs e)
{
e.Handled = true;
if (e.LeftButton == MouseButtonState.Pressed)
{
VOLUME = (float)(Mouse.GetPosition(VOLUMEBAR).X / VOLUMEBAR.ActualWidth);
RecalcVolume();
}
}
Hi,
direkt ist das nicht möglich, aber orientiere dich mal an [Tutorial] Gezeichnete Objekte mit der Maus verschieben
Dort steht wie man erkennt, wann der Mauszeiger über einem geom. Objekt ist - und du brauchst dann ja das Gegenteil, d.h. merke dir das aktuelle Element und frage dann im MouseMove ab, ob es immer noch dasselbe Objekt ist oder nicht.
Ich habe oben noch mal nacheditiert (der Thread ist wahrscheinlich jetzt nicht mehr ganz einfach nachzuvollziehen?).
Noch ein Edit:
ich sehe gerade, daß du ja schon mittels
string source = Properties.Resources.source;
den Source-Code einbindest (aber bisher nicht benutzt). Dann kannst du ja meinen Tipp direkt befolgen.
Bei deinen anderen beiden TextBoxen (sowie der Variablen 'name') mußt du das natürlich auch so abändern.
Und kapsel den CodeDom-Code in eine eigene Methode (anstatt direkt im Button-Click) und benenne deine GUI-Elemente (TextBoxen etc.) besser.
Aber mal ein anderer Tipp:
Viel einfacher könntest du es dir machen, wenn du den Source-Code als (Resource-)Datei hältst und einliest und dann vor dem Kompilieren z.B. mittels Ersetzen von "%FTP_SERVER%" etc. die TextBox-Werte dort einträgst.
string code = File.ReadAllText("SourceCode.template"); // oder als Resource, z.B. Properties.Resources.SourceCode
code = code.Replace("%FTP_SERVER%", textboxFtpServer.Text);
// und die anderen auch noch ersetzen
Sorry, da haben wir wohl beide gleichzeitig editiert.
Sorry, hatte die Anführungsstriche oben vergessen:
Temp.AppendLine("FtpWebRequest request = FtpWebRequest.Create(\"" + textBox6.Text + "\") as FtpWebRequest;");
Beachte den Backslash als Escapezeichen (und dafür dann @ entfernt).
Hi, meinst du
Temp.AppendLine(@"FtpWebRequest request = FtpWebRequest.Create(" + textBox6.Text + ") as FtpWebRequest;");
??? Die TextBox ist doch in deinem Programm und nicht im zu kompilierenden Source!
Schau dir mal das DataGridView.EditingControlShowing-Ereignis an - dort kannst du dann die ComboBox individuell füllen.
Hi Levion,
dies ist ein bekanntes Problem aus der Landwirtschaft für automatisches Lenken mit GPS (GPS steering autopilot). Dabei wird üblicherweise eine sog. Referenzlinie benötigt, anhand deren dann der Rest des Feldes abgefahren wird.
Ich denke aber nicht, daß du einen einfachen Algorithmus dafür finden wirst (soweit ich weiß wird das meiste mit Simulationsprogrammen à la MATLAB/Simulink o.ä. umgesetzt, d.h. dort ist jahrelange Entwicklung drin).
Hi,
das Flag musst du explizit setzen: EM_SETMODIFY.
Hi,
mittels eines Events, s. [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)
Stimmt, so geht es natürlich auch.
Aber ich würde die Variable nicht "predicate" nennen, denn dies wäre ja der gesamte Ausdruck, sondern z.B.
t.Count(test => test is TestA)
int countOfTestA = t.OfType<TestA>().Count();
Nimm erst einmal
class Square : Button
{
public Square()
{
this.Size = new Size(40, 40);
this.Text = "Test";
}
}
Dies müsste beim Adden zu einem Panel dann einen 40x40 Button mit dem Text "Test" erzeugen.
Hi,
dazu solltest du ein Storyboard verwenden: Animation using Storyboards in WPF
Hi,
benutze mal Invoke anstatt BeginInvoke, damit direkt die Aktion ausgeführt wird.
Was genau ist dir denn unklar?
Packe die Images (nacheinander) bei Strg+Click in eine Liste und beim Drag&Drop verschiebst du sie an die neue Position.
Hi,
der eigentliche Fehler wird wohl sein, dass bisher nur auf statische Methoden zugegriffen wird. Richtig ist
Dispatcher.CurrentDispatcher.BeginInvoke( () => ausgabe() );
Probiere mal
Encoding enc = System.Text.Encoding.GetEncoding("x-IA5-German");
System.IO.File.WriteAllText(strFile, text, enc);
Habe ich von Unicode in ISO 646-DE wandeln?
Edit: ups, zu spät 🙁
Hi tmase,
verwendest du den XmlSerializer? Dieser unterstützt bestimmte Attribute: Steuern der XML-Serialisierung mit Attributen, aber du benötigst dafür die Implementierung aller Klassen - und als Property mußt du dann deren Basisklasse verwenden (kein Interface).
Lies dir auch mal XML serialization of interface property dazu durch.
Das Attribut gilt nur für den BinaryFormatter, s.a. Why does the OnDeserialization not fire for XML Deserialization?
Hi,
stell doch einfach temporär die DropBox-Synch aus: Dropbox: Synchronisieren pausieren
Erstell einfach eine Setter-Methode SetBlock(x, y, z, value).
Du könntest ein rahmenloses (FormBorderStyle = None) Fenster erstellen, mit TopMost = true und darauf dann den Button platzieren.
Wo genau erhältst du denn die Exception?
Ich tippe darauf, daß du zuerst den Parent von "paper" removen musst, bevor du ihn als Content setzen kannst.
Englischer Beitrag dazu: http://stackoverflow.com/questions/2566050/how-to-remove-parent-of-control
Ups, sehe gerade, das machst du ja schon mittels
WrapPanelPaper.Children.Remove(paper);
🤔
Ok, habe jetzt nochmal genauer deinen Beitrag gelesen... und die Lösung ist doch klar:
du mußt es vom richtigen Parent removen, also
Panel parentPanel = paper.Parent as Panel;
parentPanel.Children.Remove(paper);
🙂
Hi,
wenn T generell vom Typ IBaseEntity innerhalb des Repository sein soll, dann gib es der Klasse gleich mit:
public abstract class Repository<T> : IRepository<T>, IDisposable where T : IBaseEntity, new()
Ansonsten mußt du halt innerhalb der Methode entsprechend casten.
if (!File.Exists(PathAndFileName.ToString()))
Und bei File.CreateText dann ebenfalls ToString() verwenden.
Und bitte editiere deinen Beitrag nochmal...
Du könntest folgendes nehmen:
var bs = (BindingList<T>)Activator.CreateInstance(typeof(BindingList<T>));
bzw. mit Parameterübergabe
var bs = (BindingList<T>)Activator.CreateInstance(typeof(BindingList<T>), new object[] { list });
Da hast du wohl etwas falsch verstanden. Wie herbivore schon geschrieben hat, bedeutet "vorhandene Daten werden nicht geändert", dass man nicht in-place Daten verändern kann (denn es gibt keine Variablen im klassischen Sinne).
Hier beispielsweise der Quicksort-Algo:
qs [] = []
qs (x : xs) = qs [u | u <- xs, u <= x] ++ [x] ++ qs [v | v <- xs, v > x]
Rufst du nun "qs ('c':'b':'a':[])" auf, so wird als Ergebnis eine neue Liste zurückgegeben: 'a':'b':'c':[].
Jedoch bietet z.B. Haskell zusätzlich modifizierende Sprachelemente an, s z.B. Why is the minimalist, example Haskell quicksort not a “true” quicksort?
Funktionale Programmierung gibt einem eine andere Denkweise, Probleme zu lösen. Meines Erachtens denkt man dabei viel abstrakter (anstatt sich mit konkreten Sprachelementen wie Variablen, Schleifen oder aber in C oder veraltetem C++ mit Zeigern herumzuschlagen).
Da sich aber die OOP Sprachen (wie C#, C++) in der Zwischenzeit vieler funktionalen Elemente (z.B. Lambda-Ausdrücke), angeeignet haben, ist es schwer noch eine absolute Trennung zu machen.
Und auch LINQ (da es ja an SQL angelehnt ist), stellt ja ein deklaratives Sprachelement dar.
Hi,
LinqToSQL wird von SQL CE 4 (nativ) nicht unterstützt, s.a. http://stackoverflow.com/questions/4349385/why-wont-my-datacontext-use-sql-server-compact-edition-4-rather-than-trying-to
Aber es scheint einen Workaround zu geben: http://erikej.blogspot.de/2012/04/using-linq-to-sql-with-sql-server.html
Zumindestens bei einem BlueScreen kann man einstellen, dass dann automatisch ein Neustart durchgeführt werden soll. Im Anhang Einstellung für XP (Systemeinstellung -> System -> Erweitert - > Starten und Wiederherstellen -> Einstellungen).
Zumindestens Resharper kann das: Code Generation: Implementing Overriding Methods
Hi CoderboyPB,
"Interne Ausnahme" heißt auf Englisch "InnerException" und diese Eigenschaft solltest du dir bei der geworfenen Exception im VS anschauen.
Und du hast An XNA 4.0 Content Pipeline processor for Terrain GeoMipMapping nicht gefunden?
Hi,
da wird wohl irgendwo eine Exception geworfen (welche von Form.Load gecatcht wird). Debugge mal Zeile für Zeile, ich tippe auf GetDirectory oder GetFiles...
Hi and welcome
die einzelnen TabPages werden (normalerweise) erst erzeugt, wenn der User dorthin wechselt. Du müsstest einmal das Handle abrufen (dann wird intern CreateHandle aufgerufen):
var handle = tabControl.TabPages[1].Handle;
s.a. Antwort von herbivore in Tabcontrol mit Datagridview, Problem bei der Anzeige
Hi,
das Parent-Control muß selbst Transparenz unterstützen, sonst wird immer der Inhalt in das Child-Control kopiert (daher darfst du auch nicht FillRectangle oder Clear aufrufen!).
Wie es richtig geht, steht z.B. in http://www.bobpowell.net/transcontrols.htm oder Clearing the graphics of a transparent panel
(man sollte sich also ein bisschen mit den WinAPI-Messages auskennen)
Habe gerade mal danach gesucht und How do I set an image for some but not all nodes in a TreeView? (untere Antwort) gefunden bzw. der Link dort auf How to create a TreeView node with no image?.
Also Index auf hohen Wert setzen (größer als Anzahl in der ImageList) und die fehlenden Linien selber zeichnen (nicht schön, aber selten).
Hi,
für Dateipfade würde ich immer eine readonly-TextBox nehmen, damit der User die Möglichkeit hat per Copy (Ctrl+C) den Pfad daraus zu extrahieren. Und für Rechtsbündigkeit SelectionStart auf Length setzen:
textBox.SelectionStart = textBox.TextLength;
Um Dateipfade zu kürzen gibt es auch die WinAPI-Funktion PathCompactPathEx
Oder aber mittels DrawText selber zeichnen: C# WinForms - Smart TextBox Control to auto-Format Path length based on Textbox width und dann TextFormatFlags.Right (statt Left) benutzen.
Hi,
könntest du mal einen Screenshot zeigen - bisher kann ich mir mit deiner Beschreibung nicht so recht etwas vorstellen.
Hi,
den Fehler solltest du aber selber mittels des Debuggers schnell rausfinden. Mit "binaryReader.Stream.Position" kannst du dir ja jeweils die aktuelle Position ausgeben lassen.
Ich würde dir auch raten
byte[] numArray = binaryReader.ReadBytes(binaryReader.ReadInt32());
in zwei Anweisungen (bzw. noch besser in eine eigene Methode) zu schreiben, damit du dir explizit den Längen-Wert in einer Variablen anschauen kannst.
Hinweis: du solltest auch besser, die Methode nicht gleichzeitig mit UI-Zugriffen vermischen (Stichwort: Separation of Concerns (SoC)).
Hi,
mit Überreden meine ich, daß man nicht einfach
DelegateMethod(Add);
schreiben darf (-> Compilerfehler: "kann nicht Methodengruppe in Delegate umwandeln"), sondern eben den Delegate-Typ explizit angeben muss.
ref und out habe ich bisher noch nicht ausprobiert, denke aber, dass dann DynamicInvoke nicht aufrufbar ist (d.h. eine Exception geworfen wird).
So ganz weiß ich jedoch nicht, ob nicht doch einfach Events für dein Vorhaben besser sind - welche Nachteile siehst du denn konkret? Selbst für ein kleines Konsolenprojekt ist doch der Aufwand gering; aber zeig mal etwas Code, wie du es dir vorstellen würdest.