Showgroups steht auf true und View auf View.Details. Ich habe eine andere Lösung gefunden. Indem ich wie oben ListViewGroup Objekte erstelle und ausserdem ListViewItem Zeilen, und für jedes ListViewItem Objekt die Eigenschaft Group an ein Groups Element binde:
ListViewGroup gr = new ListViewGroup("Gruppe1 ...");
listView1.Groups.Add(gr);
ListViewItem li = new ListViewItem(new String[] { "Eintrag1" "Eintrag2" } );
listView1.Item.Add(li);
li.Group = listView1.Groups[0];
Dann gehts !
Nichts für ungut, aber vielleicht "veränderst" du zuerst deine Rechtschreibung...
Zu deine Frage: vielleicht hilft dieser kleine Blog-Eintrag weiter:
http://haxordotnet.blogspot.co.il/2011/06/how-to-build-trainer-to-game-and-magic.html
Hallo Leute,
bevor ich jetzt Google durchstöber, frag ich mal hier direkt , ob jemand gute "GUI Grafik Designer" in WPF kennt? Ideal "open source" ! Das Pendant für IDE wäre bspw. sharpdevelop!
Ich möchte das man einfache schöne UI Controls (Fenster) via Drag-an-trop basteln kann, und evlt auch "code behind" oder scription Möglichkeiten hat. Einfach für Applikatuere.
Kennt ihr sowas?
Grüße
Genau, so ist es;) auf basis der LinkedList, sortier ich das element beim einfügen richtig ein. da die elemente zu 99% in der richtigen reihenfolge kommen, gibt es auch keine performance probleme;)
grüße;)
Hallo Leute,
ich muss mit einem gerät via tcp/ip kommunizieren, bzw. definiert telegramme mit best. semantik und aufbau austauschen. dieses geräte fungiert bei dem datenaustausch als tcp/ip server.
nun könnte ich einen tcp/ip client schreiben, welche daten bzw. telegramme mit dem gerät austauscht, was auch kein problem darstellt. Aber damit ich auf meiner seite eine "definierte" schnittstelle habe, würde das gern mit WCF machen. was mit die möglichkeit geben sollte, dass ich das mapping/formatierung zwischen den telegrammen von dem gerät und von mir zum gerät für den WCF service implementieren müsste! aber wie geht das? wie könnte ich das anstellen? oder soll ich doch lieber auf ein regulären tcp/ip client zurückgreifen!?=
grüße
Dein gezeigter Code funktioniert wohl kaum, wie du es möchtest. Der String "Lottozahl gefunden" wird auf der Stelle angezeigt, obwohl es noch nicht der Fall ist. Zudem setzt du den String immer wieder neu, obwohl es unnötig ist.
Zudem ist auch das allgemeine Design der Klasse, ganz ehrlich gesagt, nicht so optimal. Verwende mehr lokale Variablen. Gib den Klassen, Variablen und Funktionen bessere Namen und probier einheitlich zu sein. Initialisiere Variablen am Anfang und nicht am Ende. Verwende Arrays. Verwende nicht Convert.ToString , sondern direkt ToString von IFormattable und übergib allenfalls auch eine CultureInfo .
Grüssli
Entschuldigt, dass ich mich wieder melde, aber auch hier habe die Lösung gefunden. Und zwar wählt man mehrere Einträge aus, indem man einen oberen Eintrag anclickt, die Umschalttaste drückt und dann einen unteren Eintrag wählt. Nur das Ereignis SelectedIndexChanged kann man nicht abfangen, dafür aber MouseDown und die rechte Maustaste. Tschüss ...
static schrieb:
und statischer Konstruktor?
static Methoden und Felder sollten Dir von C++ her bekannt sein.
C# unterstützt außerdem Member Initialization für Felder, deren Wert zur Compilezeit bekannt ist:
class Foo
{
int bar = 3;
static int baz = 23;
}
Ansonsten werden Felder im Konstruktor initialisiert:
class Foo
{
int bar;
static int baz;
public Foo(int parameter)
{
bar = parameter;
baz = valueFromDatabase();
}
}
Das Problem dabei: Jedes neue Foo-Objekt setzt das static Feld erneut. Das ist aber eventuell garnicht gewünscht.
Dafür gibt es den statischen Konstruktor:
class Foo
{
int bar;
static int baz;
public Foo(int parameter)
{
bar = parameter;
}
static Foo()
{
baz = valueFromDatabase();
}
}
Dabei gelten folgende Besonderheiten:
Eine Klasse darf nur maximal einen statischen Konstruktor (SK) haben.
Ein SK hat keinen Modifier (public, protected, private) und kann keine Argumente annehmen.
Ein SK wird exakt einmal ausgeführt (maximal), unabhängig davon, wieviele Foo-Objekte erstellt werden.
Sobald das erste Foo-Objekt angelegt wird, oder der erste Zugriff auf ein statisches Feld oder eine statische Methode stattfindet, wird der SK ausgeführt.
Der SK wird vor jedem anderen Konstruktor ausgeführt.
Der SK ist nicht an ein Objekt gebunden und darf demnach nicht auf nicht-statischen Felder oder Methoden zugreifen.
Ich habe in 3 Jahren einmal einen SK benötigt. Insgesamt ein völlig überflüssiges Sprachmittel
zwei änderungen hab ich vergessen zu erwähnen die mainform sieht jetzt so aus:
public partial class MainForm : System.Windows.Forms.Form
{
public MainForm()
{ ....}
....
public MEINEUSERFORM MyUserForm = new MEINEUSERFORM (MyMainForm);
static MainForm MyMainForm = new MainForm(); //hier die Änderung
....
private static MainForm transDefaultFormMainForm = null;
public static MainForm TransDefaultFormMainForm
{
get
{
if (transDefaultFormMainForm == null)
{
transDefaultFormMainForm = new MainForm();
}
return transDefaultFormMainForm;
}
}
....
public void set_textbox(string x)
{
rtbMonitor.text = x;
}
}
dadurch ist MyMainForm != Null , aber es wird wieder eine instanz der Klasse erstellt
hier noch der Start des Programms:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MainForm());
}
}
----
Lösung:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mf = new MainForm();
Application.Run(mf);
}
public static MainForm mf = null;
}
und dann in der eigenenklasse einfach sowas wie
Program.mf.set_textbox("Hallo");
danke fürs Anschaun und einen schönen Abend wünsch ich noch! Grüße Ajax
GPC schrieb:
static hat durchaus seine berechtigten Anwendungszwecke.
Ja, hat es.
GPC schrieb:
Ich würde es als Methodenmodifizierer (ja, man modifiziert eig. die Speicherklasse der Methode) sogar viel öfters verwenden - nämlich immer dann, wenn auf kein normales Member einer Klasse zugegriffen wird.
Das find ich aber sehr, sehr suboptimal. Das führt einzig und allein zu unwartbarem Code. Hab ich schon zig mal erlebt. Man benutzt oft irgendwie static, weil man meint, das ist nur eine Hilfsfunktion, braucht keine Membervariablen. Und dann nach paar Jahren ist das Programm viel größer geworden, sind etliche Anforderungen dazu gekommen, und man würde gern die "Hilfsfunktion" abhängig vom Kontext austauschen (oder man will einen Proxy haben, einen Cache, oder was weiß ich was), und siehe da, es geht nicht, ohne den halben Code umzubauen. Seh ich jeden Tag in der Arbeit.
Andreas XXL schrieb:
Ich habe mit diesem Designer in Visual Studio ein Fenster mit einem "Grid" erstellt (WPF). Nun setze ich in die Grid-Felder einige Labels um später Text anzuzeigen (Ich hoffe dies ist die richtige Vorgehensweise):
Eher nicht. Schau dir lieber zuerst C# gut an und beschäftige dich mit WPF erst, wenn du C# kannst. WPF ist ein ganzes Thema für sich und gibt daher auch ganze Bücher nur über WPF (Einstiegslektüre für erfahrene C# Programmierer).
Andreas XXL schrieb:
Ist dies die richtige Vorgehensweise, damit der Garbage-Collector den Speicher wieder freigeben kann? Oder muss ich die Labels einzeln aus dem Grid entfernen?
Oder soll man ganz anders vorgehen?
Sobald etwas nicht mehr durch irgendwelche Pfade aus dem Hauptprogramm referenziert wird, gibt es der GC automatisch irgendwann frei. Es ist sinnvoll, wenn man Bereiche zum Aufräumen freigibt, welche man nicht mehr benötigt. Es ist aber schwer die Sache hier zu beurteilen, da man keinerlei Kontextinformationen hat.
Aber von mir aus gesehen verwendest du WPF hier sowieso komplett verkehrt. Wie ich oben sagte, lass zuerst mal lieber die Finger von WPF.
Grüssli
Hallo,
nein, wird in VS 2008 nicht unterstützt, siehe:
http://social.msdn.microsoft.com/forums/en-US/vswpfdesigner/thread/7c530139-1ba1-41e2-9d0f-bb8f6762a5d4
MfG,
Probe-Nutzer
Hi, danke! Mir hat das .Where gefehlt.
In vb.net sieht es dann so aus
someList.Where(Function(someClass) someClass.someValue <> 0).Min(Function(someClass) someClass.someValue)
Wobei man das besser in 2 Schritten macht, um eine evtl. leere (gefilterte) Liste abzuhandeln.