Wegen reiner Kosmetik würde ich das sehr ungerne zurückändern.
Verständlich. War halt nur ein nettes Feature, aber richtig auffallend halt auch nicht.
Ich bin davon ausgegangen, dass es nur ein Template gewesen wäre, welches sich schnell ändern liesse.
mfg
SeeQuark
Hallo
Ich verwende den IE zwar nicht mehr, aber diesen Beitrag schreibe ich jetzt in ihm.
Was mit so im Direktvergleich auffällt: Der FF ist viel schneller und die Comboboxen sehen nicht so schön aus.
Aber Anzeigeprobleme habe ich im IE nicht.
(BTW: kommen die Übergänge mal wieder rein?)
mfg
SeeQuark
Ich habe auch schon einen provisorischen StartDialog erstellt.
Alles weitere seht ihr im Forum hier.
mfg
SeeQuark
Ganz einfach:
MessageBox.Show(this.textBox1.Text);
Lesend zugreifen ist nie ein Problem.
Ich habe einen Thread erstellt der etwas in eine Listbox schreibt. FUNKTIONIERT.
Wie das? Das ist doch im GUI Thread 😉
mfg
SeeQuark
Das einfachste ist imho, wenn du das wie in Formular/Control drucken oder als Bitmap speichern beschrieben machst.
Du kannst das auch selber machen, wie zum Beispiel so (mit Border des Windows):
Bitmap bitmap = new Bitmap(this.Width, this.Height);
this.DrawToBitmap(bitmap, new Rectangle(0, 0, this.Width, this.Height));
bitmap.Save(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "form.png"));
mfg
SeeQuark
Hallo
Ich vermute in meinem Unwissen, dass das nicht nötig ist.
Jedenfalls öffnen die Zip-Programme die Files auch, ohne sie zu entpacken und sogar der DownloadManager zeigt am Anfang alle Dateien an.
central directory: Liste mit Dateiheadern (enthält Dateiname, -größen, -attribute, CRC-32-Prüfsumme, Startadresse, etc). Eine Untermenge an Informationen wird in den lokalen Dateiheadern redundant zur Verfügung gestellt.
(Quelle: Aufbau von ZIP-Dateien)
Jedenfalls wird das irgendwie möglich sein.
Ob das mit der CSharpZipLib möglich ist, weiss ich auch nicht.
mfg
SeeQuark
Du kannst wie in Darstellung von windowseigenen Controls ändern gezeigt, das Bild verwenden um es zu vergrössern.
Viel schärfer wird es so allerdings nicht 😉
mfg
SeeQuark
Hallo floste
Etwas weiter oben habe ich geschrieben, dass man "auf einem UserControl nicht zeichnen sollte".
Es geht natürlich, wie auf den meisten anderen Controls auch, aber man sollte es im Normalfall nicht machen.
mfg
SeeQuark
wenn ich den text ändere, aber die textbox nicht verlasse [...] bekommt das binding die änderung nicht mit.
Möchtest du das so lassen oder ändern?
Dann wäre das kein Problem.
Einfach Binding.DataSourceUpdateMode
auf DataSourceUpdateMode.OnPropertyChanged
stellen.
mfg
SeeQuark
Man sollte beachten, dass man auf einem UserControl nicht zeichnen sollte.
Dafür ist eigentlich eher ein Control gedacht.
Control => Du kannst zeichnen, was du willst.
UserControl => Beinhaltet andere Controls, zeichnet aber nicht.
Ansonsten noch
[Artikel] Benutzen von UserControls / abgeleiteten Controls im Designer von Visual Studio 2
mfg
SeeQuark
es ist eben bloß das Problem bzgl. des Ausdruckens/der Größe...
Dann musst du die Steuerelemente doch entweder in der gleichen Grösse lassen, wie sie sind, oder sowieso zeichnen.
Dann wäre das mit dem manuellen Rendern kein Problem.
Mit der Zoom Methode, also das man es immer größer und kleiner machen kann ist zwar auch sehr nett aber dann doch wieder zu umfangreich für so ein Projekt.
Wie flexibel bist du denn?
Eventuell könntest du auf WPF umsteigen.
Mit Hilfe der Viewbox
ist das gar kein Problem (siehe Anhang).
Wenn du nur willst, dass die Steuerelemente am Rand "kleben" bleiben, dann ist das nicht schwer.
Dann kannst du das mit einem TableLayoutPanel, wie von herbivore gesagt machen.
mfg
SeeQuark
Die Forms sollten sich nicht kennen.
Siehe: [FAQ] Kommunikation von 2 Forms
Am besten du löst das mit Events, Funktionen und Properties, aber nur in den aufzurufenden Forms.
mfg
SeeQuark
hinter ein Image zu legen
Meinst du hinter ein Control?
Die PictureBox von WinForms, das Image-Control von WPF oder einfach nur in das Bild rein?
Für WinForms habe ich so was: CodeProject: Transparent drop shadow in C# (GDI+)
Die anderen Variante sollten analog dazu machbar sein.
Vielleicht gibt es aber auch für das etwas fertiges.
mfg
SeeQuark
Hallo
public void ExportXML(string directory)
{
using (XmlWriter writer = XmlWriter.Create("hallo.xml"))
{
writer.WriteStartDocument();
writer.WriteStartElement("Directories");
writer.WriteAttributeString("Name", Path.GetFileName(directory));
writer.WriteAttributeString("Path", Path.(directory));
traverseFileSystem(writer, directory);
writer.WriteEndDocument();
}
System.Diagnostics.Process.Start("hallo.xml");
}
private void traverseFileSystem(XmlWriter writer, string directory)
{
foreach (String strFile in System.IO.Directory.GetFiles(directory))
{
writer.WriteStartElement("File");
writer.WriteAttributeString("Name", Path.GetFileName(strFile));
writer.WriteEndElement();
}
foreach (String strSubDir in System.IO.Directory.GetDirectories(directory))
{
writer.WriteStartElement("Directoy");
writer.WriteAttributeString("Name", Path.GetFileName(strSubDir));
traverseFileSystem(writer, strSubDir);
writer.WriteEndElement();
}
}
Jetzt musst du nur noch bei einem Fehlerhaften Laden eines Ordners/einer Datei ein entsprechendes <Error>Fehlermeldung</Error>
anzeigen.
JAck30lena war schneller.
Ich poste dennoch meinen Ansatzm, der aber fast der gleiche ist:
Wenn du dich mit dem Tutorial beschäftigt hast, warum zeichnest du dann 2 verschiedene PictureBoxes?
Vermutlich geht aber beides.
Ich würde in einer seperaten Klasse die wichtigsten Daten speichern, wie das Rechteck, welches der "Kasten" belegt und die einzelnen Linien des Labyrinths.
Danach kontrolliert du, wo der Kasten anstösst.
Diese Routine würde ich selber machen, sollte aber mit den reinen Angaben kein Problem darstellen.
mfg
SeeQuark
Control.PointToScreen
mfg
SeeQuark
Schau dir mal das an: [Snippet] Verzeichnisse und Dateien rekursiv durchlaufen
Das in eine XML-Struktur abzuändern ist wohl nicht so schwierig
mfg
SeeQuark
Möchtest du, dass wenn deine Picturebox grösser wird, dass die anderen Steuerelemente kleiner werden? Bei Bildschirmen mit kleinerer Auflösung lässt sich das Formular dann gar nicht mehr bedienden.
WinForms ist m.E. aber sowieso pixelorientiert, sodass du deinem Fenster nur eine feste Grösse geben musst.
Was spricht aber dagegen, die PictureBox auf den Zoom-Mode zu stellen um so das Bild bei Bedarf des Users zu vergrössern.
Wenn das Bild wirklich gezoomt werde soll, wirst du IMHO die Steuerelemente mit dem ButtonRenderer, RadioButtonRenderer etc selber zeichen müssen. Dann hast du ein Bild, welches sich ohne Probleme zoomen lässt
Ob das jedoch Benutzerfreundlicher ist, mag ich bezweifeln.
mfg
SeeQuark
Das ganze kommt mir ein wenig suspekt vor.
Warum verwendest du kein Bitmap in einer PictureBox?
Oder du speicherst nur die wichtigsten Daten in einer Variable.
Zum Thema Zeichnen:
[Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox)
Und noch zu den Get- bzw. SetPixel:
Bitmap-Manipulation (MemBitmap)
mfg
SeeQuark
1.Das musst du in der Registry eintragen.
1.Dafür gibt es die string[] args
in Main
.
Wie machst du's in XAML?
XAML ist 100% konvertierbar zu C#, umgekehrt aber nicht.
Ich würde es so machen:
TreeViewItem item = new TreeViewItem();
StackPanel heather = new StackPanel();
heather.Orientation = Orientation.Horizontal;
heather.Children.Add(new Image { Source = new BitmapImage(new Uri("hallo.bmp")) });
heather.Children.Add(new TextBox { Text = "hallo" });
item.Header = heather;
Wenn du so was nicht suchst, dann poste bitte mal, wie du es in XAML machst.
mfg
SeeQuark
Dein Pattern kommt mir unnötig kompliziert vor.
Ausserdem akteptiert er den string "__('Nachname');" nicht.
Falls das der Fall sein sollte mein Vorschlag:
[PRE]__\('[\w ]+'(,(tru|fals)e|)\);[/PRE]
Andernfalls nochmal mein Vorschlag, diesmal aber etwas abgeändert:
[PRE]__\('[\w ]+'\);[/PRE]
Was du beachten solltest ist, dass du nicht jedes Zeichen mit einem [] umklammern musst.
Bei dir ist das gar nicht der Fall.
Der Grenzfall: [a-zA-Z0-9ß ].
\w: ein Buchstabe, eine Ziffer oder der Unterstrich, also [a-zA-Z_0-9] (und evtl. weitere Buchstaben, z. B. Umlaute)
Wahrscheinlich wolltest du das damit bezwecken.
Fallst du Umlaute wie "ä", "ö", "ü" und so weiter ausschliessen möchtest, kannst du entweder bei deinem Pattern bleiben.
mfg
SeeQuark
Hallo Rafael
MoreThenRsfsp ist die abgeleitete Klasse von Rsfsp. Darin liegt die Logik verborgen.
In deiner Form hast du eine Variable für MoreThenRsfsp.
Jede Funktion, die du in dieser MoreThenRsfsp als public deklariert hast, kannst du dann immer dann aufrufen, wenn du willst. Du musst nur noch die Daten übergeben.
Am Besten machst du das in 2 verschiedenen Dateien.
Beachte auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1
mfg
SeeQuark
Warum nicht so wie ich gesagt habe?
class MainForm : Form { /* ... */ }
class MoreThenRdfsp : Rsfsp { /* ... */ }
Das ist so auch besser aufgegliedert.
mfg
SeeQuark
Ich würde auf jeden Fall das DataGridView rausnehmen. Am Besten verbindest du das alles, wodurch du auch auf die GroupBoxen verzichten kannst.
Was du jedenfalls nicht solltest, ist es zu Ungunsten der Bedienungsfreundlichkeit ändern.
für unsere (Delphi) Anwendung [...] einen DBNavigator.
Sicher gibt es das in .NET auch. Statt DBNavigator heisst das halt BindingNavigator.
Sowas mag ich persönlich jedenfalls nicht.
mfg
SeeQuark
Ausserdem solltest du sowieso GUI und Logik trennen.
Wenn das nicht in einer Klasse passiert, sondern schön auf 2 Klassen aufgeilt (Form und Logik), dann hast du kein Problem
mfg
SeeQuark
Kannst du die Daten sofort bearbeiten, oder musst du diese gesammelt haben?
Mein (ungetesteter) Ansatz mit ReadLine, also ohne Zwischenspeichern:
using (StreamReader sr = new StreamReader("file.txt"))
{
StringBuilder sb;
for (int number = 1; true; number++)
{
string line;
sb = new StringBuilder();
while (!sr.EndOfStream && (line = sr.ReadLine()).StartsWith("nummer" + number))
sb.AppendLine(line.Substring(("nummer" + number).Length)); //EDIT
Blubb(sb.ToString()); // Mache irgendetwas mit den Daten
}
}
mfg
SeeQuark
In WPF ist sowas recht einfach, solange der Nutzer XAML kann.
Das XAML kann man ohne weiteres in eine GUI umwandeln.
Echte Designer gibt es eigentlich auch massenhaft für WPF.
Muss es denn in deiner Application sein?
Eventuell würde auch reichen nur den XAML-Text zu übergeben.
mfg
SeeQuark
fügt man ja einem Projekt einen Verweis (eine dll) hinzu
Macht man ja bei beiden.
Der Vorteil ist halt, dass man den SourceCode direkt bearbeiten kann 😉
Wenn du ihn nicht verändern willst, dann verwendest du eine dll.
Für verschiedene Projekte immer andere Projektmappen zu erstellen, obwohl diese zusammengehören widerstrebt mir einfach.
Alle, für dieses Projekt erstellte Bibiotheken mache ich auch in die Projektmappe, für fertige dll's verwende ich praktisch immer eine dll.
mfg
SeeQuark
Warum verwendest du nicht einfach den
OpenFileDialog
von WinForms?
Ansonsten: Schick 👍
mfg
SeeQuark
Hallo
Warum TreeView.AddHandler
?
Einfach dem hinzuzufügenden Item einen EventHandler zuweisen.
Auf eine Zeile bekommst du das dann leider nicht mehr.
mfg
SeeQuark
Hallo
In WPF ist das hier gezeigt: codeprojekt: A Simple WPF Explorer Tree.
Die Event heissen Expanded bzw. Collapsed (oder so).
Achte auf den "Dummi"-Node
mfg
SeeQuark
Hallo
Array.Resize(ref tmp_labels, howmanydata * 6);
for (int i = 1; i <= howmanydata - 1; i++)
{
tmp_labels[i + 0] = new Label();
//...
tmp_labels[i + 1] = new Label();
//...
tmp_labels[i + 2] = new Label();
//...
tmp_labels[i + 3] = new Label();
//...
tmp_labels[i + 4] = new Label();
//...
tmp_labels[i + 5] = new Label();
//...
}
X(
Verwende eine List<>.
Im Übrigen ist die Schleife "etwas" komisch, da tmp_labels[0] nie geändert wird und die ersten Labels immer den gleichen Wert haben sollten.
Eventuell ist da eine ListView besser geeignet.
mfg
SeeQuark
Eine List<List<>> ist da gar nicht nötig.
Eigentlich nur eine List<object>, welcher danach je nach Eintrag ein Array hinzugefügt werden muss. (Array mit List<> erstellen.)
Vermutlich musst du für die einzelnen Möglichkeiten sowieso unterschiedliche Funktionen schreiben.
Am Anfang eine Fallunterscheidung und damit hat sichs.
Schade, dass du am Design nichts ändern kannst.
mfg
SeeQuark
Eventuell noch interessant: List<T> statt ArrayList?.
Die Frage ist dann halt, was du mit dem weiter erledigen willst.
Vielleicht hilft schon nur, die Anzahl der Elemente oben hinzuschreiben, aber das ist relativ unsicher. So könntest du aber ein normales Array verwenden
Eventuell hilft auch einfach, nur zu binär zu serialisieren, wenn du nicht unbedingt ein XML brauchst.
mfg
SeeQuark
Ich glaub nicht mal, ob man in WPF MDI benutzen kann.
Vielleicht einfach einen WindowsFormsHost verwenden.
Eventuell ist dieser Thread noch interessant (vor allem die Bibliothek): window2 in window1 laden bzw anzeigen
mfg
SeeQuark
Hallo
Das einfachste wird imho sein, auf UserControls umzusteigen, bzw. eine Ableitung von UserControl, die sich selber um das Zeichnen kümmert.
Eine andere Möglichkeit wird sein, von einer eigenen Form abzuleigen, welche das zeichnet.
Elegant(?) kannst du das auch über [Artikel] Custom Window Border für Form's lösen, vielleicht ist das aber auch Overkill.
mfg
SeeQuark
Das liegt daran: [FAQ] Warum blockiert mein GUI?
Erledige die Arbeit in einem neuen Thread. Das geht eigentlich ganz einfach, solange du nicht auf die GUI-Elemente zugreifst.
Zu Threads siehe [Artikel] Multi-Threaded Programmierung
Falls du auf Steuerelemente zugeifst, beuge das mal mit [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke) vor. Das solltest du aber bei vielen Änderungen über einen Timer lösen.
Jetzt hast du genug Lesestoff 🙂
mfg
SeeQuark
Ist mir auch schon mal aufgefallen.
Bei einigen Threads ist es der Anfangspost, bei anderen ein Antwortspost.
Ich habe mich dann damit zufrieden gegeben, dass es der erste Post des am "höhesten" rangigen Users ist, da meistens herbivore zu sehen war. Das kann aber auch Zufall sein, die Wahrscheinlichkeit ist ja relativ hoch 🙂
Komisch, jetzt werde die ToolTips bei mir gar nicht angezeigt.
mfg
SeeQuark
Hallo
Ich kenne mich nicht sonderlich gut aus mit DirectDraw, aber GDI+ ist relativ träge und flackert viel, und DirectDraw ist DirectX.
Die Frage ist nur, ob du so was brauchst. Eine Parabel ist nicht besonders anspruchsvoll und ich würde sagen, GDI+ reicht da völlig aus.
Siehe dazu [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox)
Bei schwierigeren Grafiken kannst du ja auch einfach ein Bild zeichnen, wo es auch optimierte Klassen gibt (Bitmap-Manipulation (MemBitmap)).
Die Bilder kannst du auch einfach darstellen, das sollte nicht das Problem sein.
Für stehende Bilder und deine Anforderungen ist GDI+ meiner Meinung nach völlig ausreichend.
Eventuell kannst du noch WPF in Betracht ziehen.
mfg
SeeQuark
Also das mit dictionary hab ich nicht ganz verstanden.
Meinst du ich könnte dort irgendwie mit strings meine zweiten Koordinaten reinbekommen?
Warum bist du denn so auf deine strings versteift^^.
Man kann dort alle möglichen Schlüssel nehmen.
Also auch zum Beispiel eine eigene SudokuTileIndex
-Struktur, die dir als Zugriff dient.
Das mit den strings kommt mir jedenfals sehr unflexibel vor.
Ein anderer Ansatz wäre, dennoch ein 1-Dimensionales Array zu nehmen und die Koordinaten mit einer Hilfsklasse zu bestimmen.
Dann hättest du eine klare Grösse des Arrays.
mfg
SeeQuark
Hallo.
Freut mich, dass es funktioniert.
...aber...
Warum wird da immer der Text der TextBox verändert? Würde mich nicht wundern, wenn das, bei grossen Dateien, ein Fall für [FAQ] Warum blockiert mein GUI? wäre.
Löse das besser über Threads, dann musst du keinen Klick simulieren.
Ausserdem noch Dispose implementieren und verwenden
Warum gibtst du an, einen string
zurückzugeben, wenn das doch eh null
ist?
mfg
SeeQuark
ich kann garnicht auf das Panel von dem COntrol zu greifen.
Control.Parent
?
aber ich klicke ja auf das control sprich das event wird vom Control entgegengenommen
Mein Ansatz:
foreach (Control c in this.panel.Controls)
c.Click += panel_Click;
this.ControlAdded += (s, e) => ((Control)s).Click += panel_Click;
Dann wird das event weitergeleitet. Und mit dem sender hast du auch das Control.
Rein Codemässig wäre das so aber schicker:
foreach (Control c in this.Controls)
c.Click += (s, e) => panel_Click((Control)s);
this.ControlAdded += (s, e) => ((Control)s).Click += (se, ev) => panel_Click((Control)se);
mfg
SeeQuark
Wenn du Controls verschieben willst, schau mal da: http://www.mycsharp.de/wbb2/thread.php?threadid=66101#post3508865 . Eventuell ist das gar nicht nötig.
Die Zelle und Spalte kannst du einfach während dem Loslassen ermitteln und zuweisen.
mfg
SeeQuark
Die Styles kann man sicher überschreiben.
<ComboBox>
<ComboBox.Template>
<ControlTemplate>
<TextBox/>
</ControlTemplate>
</ComboBox.Template>
</ComboBox>
Das sieht aus, wie eine TextBox.
Inwieweit das sinnvoll ist, musst du abschätzen.
mfg
SeeQuark
hallo kubi
Verwende besser einen StringBuilder.
Ich hätte das lieber so geschrieben
StringBuilder messagetoadd = new StringBuilder();
if (File.Exists(sMessFilename))
using (StreamReader myMessFile = new StreamReader(sMessFilename, System.Text.Encoding.Default))
while (!myMessFile.EndOfStream)
messagetoadd.AppendLine(myMessFile.ReadLine().Replace("\t", " "));
return messagetoadd.ToString();
Das ist aber letztendlich Geschmackssache.
Was unterscheidet diese Methode eigentlich von
if (File.Exists(sMessFilename))
using (StreamReader myMessFile = new StreamReader(sMessFilename, System.Text.Encoding.Default))
return myMessFile.ReadToEnd().Replace("\t", "");
return string.Empty;
Also dem ReadToEnd?
mfg
SeeQuark
ich glaube weil er nicht in der while Schleife weitergeht
Kann er ja auch nicht mit einem return.
Schau dir mal an, wie der StreamReader
das mit ReadLine
und EndOfStream
macht, ev. ist das sogar genau das, was du suchst.
mfg
SeeQuark
Kurze Frage zwischendurch gibt es eine schnelle Methode einen Raster zu zeichnen als Hintergrund ?
Linien Zeichnen und nicht jeden Punkt einzeln???
Ausserdem nicht Graphics g = this.CreateGraphics();
verwenden um zu Zeichnen (Und schon gar nicht ohne zu Disposen).
Mach das lieber im Paint
-Event und verwende e.Graphics
mfg
SeeQuark
Hallo this
Um dich noch komplett zu verwirren: In C# gibt es keine "Zeiger" in dem klassischen Sinne.
for (int i = 0; i < krd.Length; i++)
Wa wird nur ein int-Wert hochgezählt.
Und C# müßte anhand der Length der elemente doch wissen, wie es den Zeiger weiterrücken soll????
Hehe. Der Integer wird von 0 bis krd.Length hochgezählt. Der ist eine ganz normale Zahl.
Mit new Koordinaten[200] wurde doch schon der ganze Speicher reserviert, oder?
Der Speicher schon. Oder zumindest genug Platz für die Referenz. Das Objekt wurde aber noch nicht erstellt.
mfg
SeeQuark
Hallo kubi
Du initialisierst du Arrays doppelt 😁
Entweder Konstruktor oder bei der Definition.
Im Endeffekt läuft das aber auf das Selbe heraus
@This: Ich würde nur eine Point3D-Struct machen und diese in der Klasse Koordinaten unterbringen. So etwas gibt es aber schon zu Tausendem.
mfg
SeeQuark