Laden...
Avatar #avatar-1931.jpg
Friedel myCSharp.de - Member
Nähe Kassel / Hessen Dabei seit 19.08.2005 830 Beiträge
Benutzerbeschreibung

Forenbeiträge von Friedel Ingesamt 830 Beiträge

16.10.2007 - 10:42 Uhr

Dann wird es wohl daran liegen, dass deine Methode CheckAll fehlerhaft ist. Wir können jetzt mal ins blaue raten, oder du postet mal ein bischen mehr Code, der deiner Meinung nach das Problem verursacht.

Wie poste ich richtig? (Punkt 5)

Sowas wie "da sind noch 2 Textboxen, die auch noch mitmachen", ist nicht ganz unwichtig. Denn sonst wäre deine Frage nach den ersten beiden Antworten beantwortet.

Gruss
Friedel

16.10.2007 - 10:30 Uhr

wenn alle 3 true sind wird button aktiv.

und zwar wenn mindestens ein element angehakt is aktivieren

Was den nun?

Ohne die Methode CheckAll() jetzt zu kennen, denke ich die ist nicht nötig/doppelt gemoppelt.

Gruss
Friedel

16.10.2007 - 10:13 Uhr

Ja:


button.Enabled = (clb.CheckedItems.Count > 0);

Gruss
Friedel

15.10.2007 - 16:49 Uhr

Hallo w1z4rd2003,

setz mal Klammern um die entsprechenden Gruppen von IDs.

Gruss
Friedel

15.10.2007 - 13:54 Uhr

Hallo baer999,

du überschreibst nicht das Event, sondern die Methoden, welche dieses Event normalerweise auslösen.
Ob du die Methoden der Basis aufrufst, hängt ganz davon ab, ob du die Funktionalität der Basismethoden brauchst, oder nicht. Bei OnPaint z.B. kannst du dein Control "normal" zeichnen lassen indem du die Basismethode aufrufst und danach zeichnest du in der Methode noch etwas zusätzliches "obendrauf".

Gruss
Friedel

15.10.2007 - 13:49 Uhr

Hallo Silvercircle,

dafür gibt es die Eigenschaft 'Anchor' und 'Dock', welche jedes Control besitzen.
Schau dir in der :rtfm: Doku mal an, was die bewirken.

Gruss
Friedel

15.10.2007 - 13:39 Uhr

Hallo Piko1977,

vermutlich hast du die Eigenschaft 'ColumnHeadersHeightSizeMode' auf AutoSize stehen.

Gruss
Friedel

11.10.2007 - 11:39 Uhr

Hallo,

nachdem ich jetzt nochmal etwas Zeit investiert habe, habe ich eine Lösung gefunden:

Talla:
Ilasm kennt doch nur den IL Code, woher soll es wissen welche Zeilen des im C# File entspricht?!?

Richtig, und deshlab muss man Ilasm das mitteilen. Genau genommen macht das Ildasm, indem man den Parameterflag /linenum setzt. Schon sind die Informationen für Ilasm bekannt und man kann die neu assemblierte Dll in VS debuggen, Breakpoints nutzen, usw.

Gruss
Friedel

ps.: Dank an herbivore und talla für die Hilfe und den Schubs in die richtige Richtung

10.10.2007 - 15:10 Uhr

Du findest sowas schneller raus, wenn du in der :rtfm: Doku nach TimeSpan schaust.


TimeSpan twoMinutes = new TimeSpan(0, 2, 0);

Gruss
Friedel

10.10.2007 - 15:05 Uhr

Weiss das jemand?

Wenn das noch eine Frage ist...


treeView.SelectedNode = nodeToAdd;

Gruss
Friedel

10.10.2007 - 15:02 Uhr

Hallo Orothred,

oh oh, das sind echte Grundlagen.

= ist ein Zuweisungsoperator
== ein Vergleichsoperator

Ein if-Statement verlagt einen boolschen Ausdruck und dies erreicht man mit Vergleichsoperatoren.

Gruss
Friedel

10.10.2007 - 14:37 Uhr

Hallo Pegasus2003,

die Antwort ist nodeToAdd.Tag 🙂

Gruss
Friedel

10.10.2007 - 13:21 Uhr

Sowas wie einen Filter kann man nicht anwenden, aber man kann in dem Bookmarks-Window Ordner und damit eine Struktur anlegen, welche einem das wiederfinden eines Bookmarks erheblich erleichtert.

Gruss
Friedel

10.10.2007 - 12:04 Uhr

Hallo wazer317,

auch Bookmarks können hier sehr hilfreich sein, gerade auch weil man im Bookmarks-Window alle übersichtlich zu sehen bekommt.

Gruss
Friedel

10.10.2007 - 11:23 Uhr

Hallo,

was knub sagt stimmt natürlich, aber du brauchst keine eigene Methode:

zum Beispiel


List<string> strings = new List<string>();
//...
 List<string> tempStrings = new List<string>(strings);
//oder: List<string> tempStrings = new List<string>(strings.ToArray());

Gruss
Friedel

10.10.2007 - 10:54 Uhr

Hallo Orothred,

ich lasse ein verzeichnis überwachen

Also nutzt du den FileSystemWatcher?

Wenn ja, bekommst du ja schonmal mit, wenn eine Datei erstellt wird. Die benötigten Informationen würde ich in einer Instanz einer entsprechenden Klasse FileInfo (o.dergleichen) speichern. In diesem Objekt merkst du dir alle Infos, die du brauchst. Durch Serialisierung können die Informationen auch über die Laufzeit der Applikation erhalten bleiben.
Wann immer du es für richtig hälst, vergleichst du das derzeitige Datum mit dem Erstellungsdatum der Datei. Ist die Differenz über der festgelegten Zeitspanne, löscht du die Datei mit File.Delete.

Gruss
Friedel

10.10.2007 - 10:40 Uhr

Hallo,

das kommt wohl auch darauf an, wie du die nächste freie Stelle definierst.
(z.B.: darf etwas nicht mehr benötigtes überschrieben werden?)

Aber das was herbivore sagt trifft sicherlich zu...

Gruss
Friedel

10.10.2007 - 10:36 Uhr

Hallo Rosch,

versuch es mal mit


form.FormBorderStyle = FormBorderStyle.None;
form.ControlBox = false;

und evtl. mit:


form.Dock = DockStyle.Fill;

Gruss
Friedel

10.10.2007 - 10:24 Uhr

Hallo bd.cole,

schau mal nach Directory.GetFiles(...).

Gruss
Friedel

10.10.2007 - 09:55 Uhr

Hallo,

oder du nimmst das MouseDown-Event und merkst dir den Punkt, an welchem geklickt wurde, dort.

Gruss
Friedel

10.10.2007 - 09:46 Uhr

Hallo Second Sun,

wenn du eine Resourcen-Datei erstellt hast, in welche du das Programm eingebunden hast, wird das Programm dort als Byte-Array abgelegt.

Heraus bekommst du es dann so:


byte[] bytes = TestApp.Resource1.NameDesProgramms;
File.WriteAllBytes(@"c:\Test.exe", bytes);

Gruss
Friedel

10.10.2007 - 09:06 Uhr

Hallo emir,

nein, sorry, aber dazu gibt es schon etliche Threads.
Such mal nach System.Diagnostics.Process, oder schau in der :rtfm: Doku.

Gruss
Friedel

10.10.2007 - 08:37 Uhr

Hallo Orothred,

in der InnerException der Fehlermeldung steht, was beim aufruf einer Methode schief gegangen ist. Damit findest du den Fehler sicher schneller.

Gruss
Friedel

10.10.2007 - 08:34 Uhr

Hallo emir,

dafür gibt es ein Event


this.dataGridView1.CellDoubleClick += 
  new DataGridViewCellEventHandler(dataGridView1_CellDoubleClick);

Im EventHandler kommst du mit

object obj = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

an den Wert der Zelle, auf welcher doppelt geklickt wurde.

Gruss
Friedel

10.10.2007 - 08:27 Uhr

Hallo Orothred,

allerdings klappt es nicht beide plugins zu starten.

Wie poste ich richtig Punkt 5

Gruss
Friedel

10.10.2007 - 08:12 Uhr

HalloFlohsch,

häufiges Problem; siehe:

FAQ

Gruss
Friedel

09.10.2007 - 17:04 Uhr

Dann ist das dataGridView1.UserDeletingRow-Event das richtige für dich.
Will der User nach Abfrage nicht mehr, e.Cancel = true setzen.

Gruss
Friedel

09.10.2007 - 17:02 Uhr

Hallo,

also zumindest bei der Pro Version liegt im Installationsordner ..\Microsoft Visual Studio 8\Common7\ die Datei VS2005ImageLibrary.zip, in welcher alle Icons enthalten sind.

Ob man die verwenden darf sichere ich hier natürlich nicht zu, würde mich aber wundern wenn nicht 8)

Warum sollte Microsoft auch was dagegen haben, Kunden die Microsoft und deren Icons gewohnt sind (auch in fremden Apps) bleiben länger treu...

Gruss
Friedel

09.10.2007 - 16:53 Uhr

Hallo Kasperdelasopa,

der Datensatz wird ja nicht einfach so gelöscht, irgendwas löst das ja aus.
Beispiel: Der User muss zum Löschen einer Zeile einen Button "Löschen" klicken. Also in dem EventHandler removeButton.Click den User Fragen, wenn bestätigt Datensatz löschen.

Also du musst da ansetzen, wo das Löschen vorgenommen wird, nicht danach

Gruss
Friedel

09.10.2007 - 16:47 Uhr

Hallo Kasperdelasopa,

die "kleinste" gemeinsame Basisklasse ist Control, also als Antwort auf deine Frage, gar nicht.

Warum willst du dies tun?

//Edit(x2):Treff die Tasten nicht...

Gruss
Friedel

09.10.2007 - 15:35 Uhr

Also ist doch klar was los ist, oder?

Du hast der Variablen nie einen Wert zugewiesen. Also:


httpMonitoringTimer = new Timer();

Oder besser, die Codezeile wird nicht erreicht.
Also mach sie erreichbar (z.B. Konstruktor)

Gruss
Friedel

09.10.2007 - 15:25 Uhr

Hallo Nullpunkt,

setze mal einen Breakpoint bei

httpMonitoringTimer.Interval = timerInterval; // HIER KOMMT DIE EXCEPTION

und schau dir an, welchen Wert httpMonitoringTimer hat.

FAQ

Gruss
Friedel

09.10.2007 - 14:56 Uhr

Hallo mz7196,

direkt helfen kann ich dir leider nicht, aber eine Suche bei Google hilft manchmal weiter:
Goole Suche

Gruss
Friedel

09.10.2007 - 14:46 Uhr

Hallo Attenpeter,

irgendwo in einer Code-Datei -> rechte Maustaste -> Start Automatic Outlining

//edit: Fehler über Fehler

Gruss
Friedel

09.10.2007 - 12:11 Uhr

Oh, sorry hab ich glatt übersehen... 8o

Gruss
Friedel

09.10.2007 - 08:24 Uhr

Hallo,

ich würde es so machen:


int result = 0;
if (int.TryParse(textbox.Text, out result)) {
	for (int i = 0; i < result; i++) {
	  //Code
	}
} else {
	MessageBox.Show("Bitte gültigen Zahlenwert eingeben !");
}

Anm.: einen Vergleich auf Empty-String (oder null) sollte man mit der statischen Methode IsNullOrEmpty machen:


string s = "Nicht leer";
bool leer = String.IsNullOrEmpty(s);

Gruss
Friedel

08.10.2007 - 11:47 Uhr

Hallo Bibi1911,

zu deinem Problem:

Nutze vielleicht besser das "dateTimePicker1_Validated"-Event.

zu deiner Frage:

leer geht nicht, da das Control immer eine DateTime anzeigt.
Du kannst aber das Anfangsdatum bestimmen, indem du dateTimePicker1.Value setzt und evtl. noch die Eigenschaften MinDate und MaxDate.

Gruss
Friedel

06.09.2007 - 08:11 Uhr

Hallo JuyJuka,

Vorsicht! -= funktionier nicht mi "new EventHandler(...)"

bei mir schon... 🙂


this.button1.Click += new EventHandler(button1_Click);
...
this.button1.Click -= new EventHandler(button1_Click);

Gruss
Friedel

30.08.2007 - 08:07 Uhr

Hallo quibb,

schau z.B. mal hier, oder hier, oder ... 🙂

Gruss
Friedel

24.08.2007 - 13:12 Uhr

Danke talla für deine Antwort.

Ich denke, ich verstehe was du meinst, nur dreh ich mich damit im Kreis. Mir ist es völlig egal, wo die pdb-Datei her kommt, welche zur "neuen", erweiterten DLL passt.
Das Ilasm das nicht leisten kann, verstehe ich ja, aber es muss trotzdem einen Weg geben, Breakpoints, usw. in der IDE (in der alten C# Code-Datei) zu nutzen, aber eben aufgesetzt auf die neue DLL.
Deshalb denke ich, dass ich wie oben bereits geschrieben habe zwischen die Compilierungsschritte muss.
Ob das geht, und wenn ja wie kriege ich schon noch raus.

Wäre natürlich trotzdem jedem dankbar, der mir Starthilfen in die richtige Richtung gibt.

Danke

Gruss
Friedel

24.08.2007 - 12:50 Uhr

Hallo talla,

ich lasse die pdb-Files ja von Ilsam generieren. Setze die Zeitstempel um (damit VS verkaukeln es wäre die "selbe" Datei) und starte die App. Mir ist bewußt, dass es keine entprechenden Codezeilen im C# Code gibt. Aber die ursprünglichen Zeilen sind ja noch da, eben nur verschoben. In der neuen .pdb-Datei sollte dies aber wieder stimmen. Nur VS nimmt diese Datei nicht an (Info bei Breakpoint: No Symbols have been loaded...).

Gruss
Friedel

24.08.2007 - 12:22 Uhr

Ok, danke herbivore.

Mit etwas Glück melden sich die beiden ja auf diesen Thread.

In der Zwischenzeit seh ich mir mal PostSharp an. Vielleicht kann man sich ja was abschauen.

Danke.

Gruss
Friedel

24.08.2007 - 11:34 Uhr

Ich habe ein Kommandozeilen-Tool geschrieben, welches eine DLL Diassembliert, den IL-Code auswertet, an bestimmten Stellen IL-Code einfügt und den Code dann wieder Kompiliert (exe, dll). Dieses Tool kann ich nun per Post Build Event aufrufen und das Tool macht was es soll. Funktioniert auch; nur die PDB-Datei passt eben nicht mehr zur "neuen" dll, obwohl ich die pdb-Datei ebenfalls neu erstellen lasse. VS interessiert das leider nicht. Auch das Setzen der Zeitstempel bringt mich (im Gegensatz zur dll) bei der .PDB-Datei nicht weiter.

Also ist es nicht mehr möglich zu debuggen, breakpoints zu setzen, usw. Das ist allerdings zwingend nötig wie du dir sicher vorstellen kannst.
Aus diesem Grund möchte ich eben "dazwischen".

Gruss
Friedel

24.08.2007 - 11:18 Uhr

Hallo herbivore, und danke...

Also anders:
Durch targets kann ich mich in den Build-Prozess von VS "einmischen".

Vereinfacht stell ich mir den Build-Prozess so vor:

C#-Code -> MSIL -> .dll

Ist es möglich zwischen MSIL und .dll zu kommen? Wenn ja wo ist dieser Schritt in der Common.target gibt es einen Schritt CoreCompile, aber leider komme ich nicht tiefer an die Stelle, wo der MSIL Code vorliegt, die DLL aber nocht nicht.

Gibt es diesen Zwischenschritt in den targets überhaupt ?

Gruss
Friedel

24.08.2007 - 11:03 Uhr

Hallo,

ist es möglich aus einer bestehenden DLL eine PDB Datei zu erzeugen und diese direkt für die IDE (zum Debuggen) bereitszustellen?

Danke

Gruss
Friedel

22.08.2007 - 08:24 Uhr

Welchen Programmierer interessiert schon wie schnell man komplette Wörter und Sätze schreiben kann? Dank Intellisense braucht man ja nur die ersten Buchstaben, und evtl. die Pfeiltasten. 🙂

Ausserhalb der Ide reichen meine "Tippkünste" mit 4-6 Fingern (wobei ich seltsamerweise auch die kleinen Finger nutze) aus, um schneller zu sein als so mancher mit seinen 10 Fingern.

Gruss
Friedel

21.08.2007 - 13:33 Uhr

Hallo mipa_acc,

das kommt darauf an, wo du dich im Code befindest. Hast du z.B. eine Instanz einer Form (form1) kannst du diese mit form1.Close() schliessen.

Gruss
Friedel

21.08.2007 - 11:35 Uhr

Hallo herbivore,

danke für deine Antworten.

Nachdem mich dieser new-Modifier ein paar Stunden meiner Lebenszeit gekostet hat, werde ich ab jetzt ebenfalls gegen dieses wettern.

Ein Enhancer ansich OK, allerdings kann dieser Schritt theoretisch vergessen werden, anders als ein (dynamischer,) zur Laufzeit erstellter Typ. Aber gut, da finde ich auch noch was.

Also nochmals Danke.

//edit: Stimmt, ein Enhancer "sitzt" zwischen dem Kompilieren und dem Start der Applikation.

Gruss
Friedel

21.08.2007 - 11:17 Uhr

Hallo herbivore,

hast natürlich recht... 🙁

Das ich das übersehen habe, ist ja fast schon ein bischen peinlich, aber eben auch nur fast.

Das es so ist , ist allerdings schlecht für mich.
Ich gehe auch mal stark davon aus, dass es keine Möglichkeit gibt, ausser evtl. mit einem Enhancer, einen statischen Typ zur quasi Laufzeit zu erstellen, oder?

Ich kann nämlich nicht (weiter) mit Reflection arbeiten. Der Nutzer der Klasse soll gar nicht bemerken, dass er nicht mit dem ursprünglichen Objekt arbeitet, sondern mit einem SubType (zumal das Ganze ja zur Laufzeit, oder zumindest nach dem Kompilieren passieren soll).

Gruss
Friedel

21.08.2007 - 10:08 Uhr

Für alle die es interessiert, wie man mit Emit überhaupt was erreicht:


private void createDynamicASM() {
    TestClass class1 = new TestClass("Eine TestKlasse");

    AppDomain domain = System.Threading.Thread.GetDomain();
    AssemblyBuilder asmBuilder = domain.DefineDynamicAssembly(
	  new System.Reflection.AssemblyName("TestAsm"), AssemblyBuilderAccess.RunAndSave);

	ModuleBuilder mBuilder = asmBuilder.DefineDynamicModule("TestModule");

	TypeBuilder tBuilder = mBuilder.DefineType("TestType", System.Reflection.TypeAttributes.Public,
	class1.GetType());
	tBuilder.DefineProperty("TestProperty", System.Reflection.PropertyAttributes.None,
	        typeof(string), new Type[] { typeof(string) });

        PropertyBuilder pNameBuilder = tBuilder.DefineProperty("Name",
	        System.Reflection.PropertyAttributes.SpecialName,
	        typeof(string), new Type[] { typeof(string) });


	FieldBuilder fNameBuilder =
	        tBuilder.DefineField("name", typeof(string), FieldAttributes.Private);

	Type objType = Type.GetType("System.Object");
	ConstructorInfo objCtor = objType.GetConstructor(Type.EmptyTypes);

	ConstructorBuilder ctorBuilder = tBuilder.DefineConstructor(
	        System.Reflection.MethodAttributes.Public,
		System.Reflection.CallingConventions.Standard,
		new Type[] { typeof(string) });

	ILGenerator ctorGen = ctorBuilder.GetILGenerator();
	ctorGen.Emit(OpCodes.Ldarg_0);
	ctorGen.Emit(OpCodes.Call, objCtor);
	ctorGen.Emit(OpCodes.Ldarg_0);
	ctorGen.Emit(OpCodes.Ldarg_1);
	ctorGen.Emit(OpCodes.Stfld, fNameBuilder);
	ctorGen.Emit(OpCodes.Ret);

	MethodBuilder getNameMeth = tBuilder.DefineMethod("get_Name",
		MethodAttributes.Private | MethodAttributes.HideBySig,
		typeof(string), null);

	PropertyInfo baseGetName = class1.GetType().GetProperty("Name");
	MethodInfo getInfo = baseGetName.GetGetMethod();

	ILGenerator getNameMethGen = getNameMeth.GetILGenerator();
	getNameMethGen.Emit(OpCodes.Ldarg_0);
	getNameMethGen.Emit(OpCodes.Call, fNameBuilder);
	getNameMethGen.Emit(OpCodes.Ret);

	pNameBuilder.SetGetMethod(getNameMeth);

	Type t = tBuilder.CreateType();

	System.Reflection.ConstructorInfo info = t.GetConstructor(new Type[] { typeof(string) });
	object z = info.Invoke(new object[] { "Eine neue TestKlasse" });

	if (z.GetType().IsSubclassOf(typeof(TestClass))) {
		class1 = (TestClass)z;
		string s = class1.Name;  //Hier sollte s = "Eine neue TestKlasse" sein, ist aber null
        }
}

TestClass:


public class TestClass : TestInterface {
  private string name;
  private int value;

  public TestClass() : this(String.Empty) { }

  public TestClass(string name) : this(name, 0) { }

  public TestClass(string name, int value) {
	this.name = name;
	this.value = value;
  }

  public void TestMethod() {

  }

  public string Name {
	get { return this.name; }
	set { this.name = value; }
  }

  public int Value {
	get { return this.value; }
	set { this.value = value; }
  }
}

Wie man "sieht", wird die Eigenschaft Name nicht überschrieben, sondern erneut angelegt. Das nützt mir allerdings gar nichts.

Bin für jeden Tip dankbar...

Gruss
Friedel