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

13.12.2007 - 09:01 Uhr

Hallo Taggert,

Wo ist der Unterschied zwischen beiden.

Es gibt keinen. In C# sind alles Objekte, abgeleitet von der Basisklasse Object. Bei String ist das genau so. string ist ansich nicht mehr nötig, aber in (fast) jeder Programmiersprache gibt es sogn. Schlüsselwörter. Um dem treu zu bleiben nehme ich an, hat Microsoft es eben so gehandhabt. Bei int -> Int32, float -> Single, usw. verhält sich das übrigens genauso.

Gruss
Friedel

12.12.2007 - 17:03 Uhr

Hallo w1z4rd2003,

sobald ich das exe auf einem anderen pc oder in einem anderen verzeichnis auf meinem pc kopiere funktioniert es nicht.

ich habe aber keine fixe pfade verwendet in meinem code.

  1. Was funktioniert nicht? Fehler?
  2. Hast du überhaupt einen Pfad angegeben, oder nutzt du nur den Namen der exe?

Gruss
Friedel

//edit: falschen Behauptung entfernt 🙂

12.12.2007 - 08:26 Uhr

Hallo capcom,

Gibt es daher eine praktikablere Möglichkeit, dass sich Objekte in die gleiche Hierarchie einfügen, wie unter VFP? Oder muss man damit leben, dass dies nicht mehr so ist, und sich einfach eine andere Vorgehensweise überlegen?

Ich denke so ist es. Man wird dieses Verhalten des Designers nicht beeinflussen können. Finde ich allerdings auch gar nicht so schlimm. Schlimmer finde ich das Ansprechen der Textbox unter VFP.
Wenn eine Textbox mit einer Artikelnummer sowohl auf der einen als auch auf der anderen Tabpage liegt, werden diese sich (wahrscheinlich) durch den Kontext unterscheiden. Also nimm diesen wenn möglich noch in den Namen der Textboxen auf und schon hast du eine saubere Trennung 🙂

Gruss
Friedel

07.12.2007 - 09:51 Uhr

Hallo norman_timo,

wir hatten bislang zwar noch nicht allzuviel im Forum miteinander zu tun 🙂, aber du warst der erste, der mir hier im Forum vor mehr als zwei Jahren eine Antwort auf meine erste Frage gegeben hat 👍

Danke für deine Arbeit und mach (hoffentlich) weiter so.

Gruss
Friedel

03.12.2007 - 12:02 Uhr

halo flobow,

das geht nicht ohne weiteres, sondern nur mit einer AppDomain.
Beispiel

Gruss
Friedel

30.11.2007 - 20:15 Uhr

Hallo RitterChristian und willkommen im Forum.

Sowas findest du meist zu genüge bei CodeProject.com

Einfach "Dock" in die Suche eingeben.

Gruss
Friedel

28.11.2007 - 13:47 Uhr

Was auch noch wichtig ist:

Einen bestehenden Typ mit einem Proxy zu "überwachen" ist mehr als aufwändig, da man alle Eigenschaft, Methoden, usw. an die Voraussetzungen anpassen muss.
Bei einem Enhancer muss man das nicht.

Friedel

28.11.2007 - 13:43 Uhr

Nein, nicht wirklich. Wenn ich aber jetzt danach suche und mir nur die ersten Zeilen anschaue, fällt mir gleich

public virtual void Greet()

ins Auge.

Ich habe AOP bereits benutzt (CastleProject), allerdings gefällt mir das wörtchen virtual gar nicht. Es gibt einfach zu viele Einschränkungen, Vorraussetzungen, Richtlinien, usw. an welche man sich dabei halten muss. Ich wollte aber eine Lösung, mit welcher der Programmierer sowas machen kann.


public class TestClass {
  private string name;
  //...
  public string Name{
    get { return this.name; }
    set { this.name = value; }
  }
}

public class AnotherClass{
  public class AnotherClass(){
    INotifyPropertyChanged incObj = new TestClass() as INotifyPropertyChanged;
    if(incObj != null)
      incObj.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(incObj_PropertyChanged);
  }
}

Alles was der Programmierer machen muss, ist im PostBuildEvent den Enhancer (mit einfachen Parametern) aufzurufen und schon wird im TestObject das Setzen der Eigenschaft Name durch das Event gemeldet. Kein zu implementierendes Interface, zumindest nicht vom Programmierer direkt, keine virtuellen Eigenschaften/Methoden.

Das ist aber nur ein einfaches Beispiel. Mit Hilfe eines Enhancer kann man noch viel mehr erreichen.
Aber nicht falsch verstehen. Er macht keine Zauberdinge, sondern erspart eigentlich nur Tipparbeit und bewahrt uns vor dem Vergessen 🙂

Gruss
Friedel

28.11.2007 - 12:29 Uhr

Hallo dr4g0n76,

wie in .pdb-Datei erstellen zu sehen habe ich es mittlerweile mit einem "echten" enhancer gelöst, welcher nach dem Erstellen der DLL diese in ILCode zerlegt, (IL-)Codezeilen hinzufügt, zum bsp. eine Implementierung eines Interfaces), und diese Il-Datei dann wieder in eine DLL assembliert.

Zur Designzeit sieht man also gar nichts, ist auch nicht nötig, und zur Laufzeit funktioniert alles so wie es soll.
Deine Herangehensweise unterscheidet sich demnach von meiner ehrheblich, aber beide sind mit Sicherheit an der ein, oder anderen Stelle zu gebrauchen.

Gruss
Friedel

//edit: URL editiert

27.11.2007 - 12:57 Uhr

Hallo cytrics,

nach fast 200 Beiträgen sollte man

Nur leider funktioniert es so nicht...

nicht mehr verwenden.

sh. Wie poste ich richtig? (Punkt 5)

Gruss
Friedel

PS: Ich denke mal der Name des Handlers ist ein Tippfehler, oder?

27.11.2007 - 12:42 Uhr

Hallo Kostas,

du kannst ja auch sowas machen:


private void RefreshAllControlValues(){
  if(this.label.InvokeRequired){
    this.label.Invoke(...);
  }
  else{
    //alle Controls updaten...
  }
}

Welches Control (hier this.label) du nimmst, ist egal, solange alle im selben Thread erstellt worden sind.

Gruss
Friedel

27.11.2007 - 09:02 Uhr

Also da muss ich (erstmal) passen. Habe ich selbst noch nicht gemacht. Aber vielleicht hilft dir da eher ein DataAdapter. Ansonsten wird dir vermutlich nichts anderes übrig bleiben, als die Datenbank erneut abzufragen. So wie ich bis jetzt computed columns verstehe, wird der Wert "immer" neu berechnet, da die ja Werte nie physikalisch in der DB gespeichert werden.

Gruss
Friedel

27.11.2007 - 08:48 Uhr

Das heißt du nimmst die Berechnung in der DB selbst vor ?

27.11.2007 - 08:44 Uhr

Dann hab ich dich falsch verstanden...

Willst du mitbekommen, wann sich an der Datenbank etwas ändert, oder wenn sich die Werte im Formular ändern ?

Zweiteres wird in dem Link (und auch an anderer Stelle in der MSDN) erklärt.

edit: z.B. hier

Gruss
Friedel

27.11.2007 - 08:25 Uhr

Hallo toxick,

MSDN

Gruss
Friedel

27.11.2007 - 08:16 Uhr

Hallo team-yetix,


private void MainForm_DragDrop(object sender, DragEventArgs e) {
	StringBuilder sBuilder = new StringBuilder();

        //Hier holst du die Daten aus der "Ablage". FielContents gibt an, wie die Daten
        //formatiert werden sollen. Fehlerquelle, da bei Objekten, welche nicht so 
        //formatiert werden können eine NullReferenceException ausgelöst wird.
	using (MemoryStream obj = (MemoryStream)e.Data.GetData("FileContents")) {
		using (StreamReader sReader = new StreamReader(obj)) {
			string line = String.Empty;
			while ((line = sReader.ReadLine()) != null) {
				sBuilder.AppendLine(line);
			}
		}
	}
			
	string text = sBuilder.ToString();
}

private void MainForm_DragEnter(object sender, DragEventArgs e) {
        //Hier legst du fest, welche Aktionen durchgeführt werden dürfen.
        //In diesem Fall hier alles !   (Mögliche Fehlerquelle)
	e.Effect = DragDropEffects.All;
}

Mit

string[] formats = e.Data.GetFormats();

kannst du herausfinden, welche Formate möglich sind. e sind die DragEventArgs.

Funktioniert bei mir aber irgendwie nicht. Wie poste ich richtig? (Punkt 5)

Gruss
Friedel

27.11.2007 - 08:14 Uhr

Hallo team-yetix,


private void MainForm_DragDrop(object sender, DragEventArgs e) {
	StringBuilder sBuilder = new StringBuilder();

        //Hier holst du die Daten aus der "Ablage". FielContents gibt an, wie die Daten
        //formatiert werden sollen. Fehlerquelle, da bei Objekten, welche nicht so 
        //formatiert werden können eine NullReferenceException ausgelöst wird.
	using (MemoryStream obj = (MemoryStream)e.Data.GetData("FileContents")) {
		using (StreamReader sReader = new StreamReader(obj)) {
			string line = String.Empty;
			while ((line = sReader.ReadLine()) != null) {
				sBuilder.AppendLine(line);
			}
		}
	}
			
	string text = sBuilder.ToString();
}

private void MainForm_DragEnter(object sender, DragEventArgs e) {
        //Hier legst du fest, welche Aktionen durchgeführt werden dürfen.
        //In diesem Fall hier alles !   (Mögliche Fehlerquelle)
	e.Effect = DragDropEffects.All;
}

Mit

string[] formats = e.Data.GetFormats();

kannst du herausfinden, welche Formate möglich sind. e sind die DragEventArgs.

Gruss
Friedel

26.11.2007 - 17:16 Uhr

Hallo team-yetix,


private void MainForm_DragDrop(object sender, DragEventArgs e) {
	StringBuilder sBuilder = new StringBuilder();

	using (MemoryStream obj = (MemoryStream)e.Data.GetData("FileContents")) {
		using (StreamReader sReader = new StreamReader(obj)) {
			string line = String.Empty;
			while ((line = sReader.ReadLine()) != null) {
				sBuilder.AppendLine(line);
			}
		}
	}
			
	string text = sBuilder.ToString();
}

private void MainForm_DragEnter(object sender, DragEventArgs e) {
	e.Effect = DragDropEffects.All;
}

Dient nur als Einstieg, da fehleranfällig. Aber eine fertige Lösung willst du ja auch gar nicht 🙂.

Gruss
Friedel

26.11.2007 - 16:37 Uhr

Hallo flobow,

Hoffe das ist jetzt verständlicher.

Ist es... löst das Problem aber nicht.

Eine private Klasse ist nunmal privat. Du willst schliesslich in deinem Beispiel mit der AutoKlasse (finde ich übrigens sehr unschön) auf die Collection von aussen zugreifen. Wie aber bitte willst du dies tun, wenn der Typ nicht bekannt ist. Warum überhaupt den Aufwand? Wenn du nur nicht willst, dass eine Instanz ausserhalb der Klasse erstellt werden kann, mach den Konstruktor bspw. internal.

//Edit: Fehler korregiert

//Edit2: Finde aber persönlich die Lösung von talla besser..., da internal ja immer noch für die Assembly gilt.

Gruss
Friedel

16.11.2007 - 09:32 Uhr

Und man kann im PropertyGrid des Designers die Eigenschaft auf diesen Default-Wert zurückstellen. Auch über die "Grenze des Schliessens" hinweg 🙂

Gruss
Friedel

16.11.2007 - 09:17 Uhr

Hallo weismat,

also meines Erachtens nach, hilft da nur ein eigenes UserControl, oder ein vielleicht vorhandenes auf CodeProject z.B..
Mir ist kein Control bekannt, welches z.B. halbe Buchstaben (noch hinter/unter dem Rand) anzeigen kann.

Gruss
Friedel

09.11.2007 - 12:03 Uhr

Berechtigter Weise sollte man mit Refelction vorsichtig sein, aber dort wo sie sinnvoll eingesetzt werden kann, ist sie eine große Hilfe 🙂


Type typWelcherDieMethodeEnthält = typeof(DeinTyp);
MethodInfo mInfo = typWelcherDieMethodeEnthält.GetMethod("NameDerMethode");
object rückgabewertDerMethode = mInfo.Invoke(instanzDesTypsWelcherDieMethodeEnthält, new object[]{ param1, param2 });

Es fehlen evtl. noch die BindingFlags, wenn du an eine private Methode ran willst. Sh. :rtfm:

Gruss
Friedel

09.11.2007 - 11:47 Uhr

Über Umwege geht das mit Reflection.
Wozu brauchst du das?

Gruss
Friedel

09.11.2007 - 10:46 Uhr

Ist die eine vielleicht FormBorderStyle = None ?

09.11.2007 - 10:16 Uhr

Hallo mirzahat,

danach wurde im Forum schon sehr oft gefragt...


form.ControlBox = false;

Gruss
Friedel

09.11.2007 - 09:42 Uhr

(sind nur atm 2 Bilder)

Müssen "riesige" Bilder sein 🙂

Friedel

09.11.2007 - 08:17 Uhr

Hallo Barbara,

die exception tritt immer in dieser funktion auf

Das hilft sicher nicht so viel. Welche Zeile genau? Ist es immer die selbe Zeile? Kann es sein, dass du das Event this.ControlAdded registriert hast, welche die Methode erneut aufruft, oder sowas in der Art?

Gruss
Friedel

09.11.2007 - 08:07 Uhr

Hallo,



public Form(){
  //...
  this.button1.DragDrop += new DragEventHandler(button_DragDrop);
  this.button2.DragDrop += new DragEventHandler(button_DragDrop);
  //...
}

button_DragDrop(object sender, DragEventArgs e){
  //aktueller Button
  Button currentBtn = (Button)sender;
  //machen, was du für richtig hälst
}

Gruss
Friedel

08.11.2007 - 16:28 Uhr

Nabend,

ich weiß es nicht genau, aber ich glaube die Express Edition unterstützt keinen 64Bit-Debugger.

sh. hier

Gruss
Friedel

08.11.2007 - 08:15 Uhr

Hallo Walter Sägesser,

folgende Tabelle zeigt die Unterschiede ubersichtlich an.

Gruss
Friedel

07.11.2007 - 08:31 Uhr

Hallo mobby23,

eine direkte Lösung kann ich dir nicht nennen, vielleicht poste mal etwas Code, der zu dem Problem führt.

Ansonsten kenne ich dieses Problem nur von einer ProgressBar, nutzt du irgendwo eine?

Gruss
Friedel

06.11.2007 - 16:38 Uhr

Hallo Condore99,

eine gute Anlaufstelle für solche Controls, aber auch für Codebeispiele ist CodeProject

Da wirst du sicher fündig.

Gruss
Friedel

06.11.2007 - 12:39 Uhr

Hallo,

also mal abgesehen davon, dass ich so ein aufwändiges Control (>1000 Childs) selber gezeichnet hätte, gibt es für sowas das TableLayoutPanel. Das kann mit Prozent die Relationen verwalten. Nachträgliche Controls können so leichter hinzugefügt und gegebenfalls auch entfernt werden.

Gruss
Friedel

01.11.2007 - 15:16 Uhr

Original von jerilynn
und ich zu diesem Zeitpunkt die Quelldaten auch nicht mehr habe.

Also unbound ?

Wenn das mit dem Kopieren nicht gehen sollte, bekomme ich dann irgentwie die Indizies des markierten Bereiches sowie seine Breite und Höhe heraus?

Breite und Höhe ?
(Breite) dataGridView.SelectedColumns; ??
(Höhe) dataGridView.SelectedRows; ??

Also ich denke das mit dem Kopieren der Rows, was wiederrum nur mit Clone() gehen kann, da eine Row nicht zu zwei Grids gehören kann, ist keine gute Idee. Lege mich da aber nicht fest, da ich das so noch nie probiert habe.

Die Datenquelle muss irgendwo sein, ansonsten geh durch die Werte der Zellen und leg das GridView zum Drucken neu an.

Gruss
Friedel

01.11.2007 - 14:54 Uhr

Hallo jerilynn,

erstmal willkommen im Forum.

Selbst wenn du es schaffen solltes, die Rows von GridView A nach GridView B zu verschieben, hast du da ja nicht wirklich viel von.
Ein DataGridView zeigt, wie der Name schon sagt, Daten an. Z.B. die, welche in einem Objekt, welches an die Eigenschaft DataSource übergeben wurde, enthalten sind. Also ist es dort wo du ansetzen musst. Ändere die Datenquelle und es ändert sich die Sicht auf dieses.

Hast du Das View im Unbound-Modus erstellt, verfährst du ähnlich, indem du das View neu aufbaust.

Gruss
Friedel

01.11.2007 - 09:34 Uhr

Hallo,

kennt einer ein kürzel mit dem ich alle funktionen eine Klasse im Editor minimieren kann ?

Nein, aber man kann mit der Maus innerhalb einer Code-Datei mit Rechtsklick das Kontextmenü aufrufen, welches einen Eintrag 'Outlinig' hat. Mit den Unterpunkten lässt sich einiges machen 🙂

Gruss
Friedel

31.10.2007 - 15:56 Uhr

Hallo mabru,

für sowas gibt es Resource-Dateien.

Über dem Ordner Resources-> Rechtsklick->Add->New Item->Im Dialog ResourceFile.
Im aufpopenden Designer Eintragen was du brauchst.
Im Code ist dann sogar per Intellisense darauf zugreifbar.

Gruss
Friedel

31.10.2007 - 13:58 Uhr

Tach!

Und zur zweiten Frage:
Es wird lt. Reflector immer intern UpdatePos() aufgerufen, also ist anzunehmen, dass die Bar neu gezeichnet wird, egal ob nun nötig, oder nicht. Inwieweit das die Performance beeinflusst, kann ich dir nicht sagen. Kommt wahrscheinlich schwer darauf an, wie oft du die Methode aufrufst. Aber ich denke das ist dann ein anderes Problem, wenn die Methode "so oft" aufgerufen wird, oder aufgerufen werden muss.

Gruss
Friedel

30.10.2007 - 09:43 Uhr

@Arthuro

wenn man im Forum nach deinem Namen sucht und sich die Posts anschaut, findet man meistens immer wieder den Hinweis auf die fehlenden Grundlagen. Das ist keine Schikane, sondern ein gut gemeinter Rat. Wenn du weiter (in c#) programmieren willst, bleibt dir echt nicht anderes übrig, als die Grundlagen (endlich) zu lernen.

Nicht für Ungut.

Gruss
Friedel

30.10.2007 - 09:06 Uhr

Hallo Arthuro,

Arrays haben eine Länge...

Gruss
Friedel

30.10.2007 - 08:15 Uhr

Hallo rezalet,

ich weiß ja nicht, was für eine Art von Programm du schreibst, aber mir ist kein (Windows-)Programm bekannt, welches die Schrift mit dem Control vergrößert. Ich als Nutzer des BS habe für mich bestimmt, mit Auflösung ich arbeiten will. Also haben sich alle Programme daran zu halten. Fände es komisch, wenn Firefox die Schriftgöße von 800600 beibehält, obwohl ich 1024768 eingestellt habe, oder dergelichen.

Gruss
Friedel

29.10.2007 - 16:43 Uhr

Hallo Danwe,


public class OwnRTBox : System.Windows.Forms.RichTextBox{
  protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) {
	//Mach was du für richtig hälst
	base.OnKeyPress(e); //Wenn noch nötig, sonst kann der Aufruf auch weggelassen werden.
  }
}

Gruss
Friedel

29.10.2007 - 16:06 Uhr

Hallo B1rd,

meiner Meinung nach sollte man sich angewöhnen, Objekte, welche die IDisposable-Schnittstelle implementieren mit using zu nutzen.


using(FileStream stream = new FileStream(@"c:\test.txt", FileMode.Open)){

}

Dann wird am Ende des Blocks das Objekt automatisch zum "Zerstören" freigegeben.

Gruss
Friedel

17.10.2007 - 09:37 Uhr

Hallo,

1x 500 GByte für Projekte

Dann hoffe ich mal, dass dir niemals die Platte abraucht. Wer soviel Speicherplatz für seine Projekte Lokal braucht, hält anscheinend nicht viel vom Sichern 🙂

Zum Thema:

CPU: Athlon64 X2 3800+
RAM: 1GB (zu wenig, würde auf jeden Fall 2GB empfehlen)
HD: 40GB fürs BS (Windows XP), 120GB für Tools, Tutorials, SourceCode, Binaries, usw., wobei für die Projekte höchstens 500MB (Teilweise sind das schon sehr beachtliche Projekte) drauf gehen.

Gruss
Friedel

16.10.2007 - 14:12 Uhr

Wie bereits gesagt, "ich kann dein Problem nicht nachvollziehen", aber vielleicht findet sich ja jemand anderes.

Friedel

16.10.2007 - 14:06 Uhr

Ok, jetzt habe ich dich verstanden, hoffe ich.

Egal wie du es machst, verwende niemals ein Control zur Datenhaltung. Baue dir eine Klasse, welche die Relevanten Werte für dich beinhaltet und ein Usercontrol, welches du eine Instanz dieser Klasse übergeben kannst und welches dann den Inhalt darstellt; variabel, oder fest 7 Textboxen ist dann dir überlassen. Dieses Control ist prinzipiell gesehen dein bisheriges Panel (kannst also evtl. von Panel ableiten, falls du Besonderheiten des Panels nutzen möchtest, ansonsten aber besser von UserControl)

Gruss
Friedel

16.10.2007 - 13:43 Uhr

Hallo Hufy90,

also ich für meinen Teil würde dir ja helfen, wenn ich dein Problem nachvollziehen könnte. Erstelle ich eine ComboBox, mit den Events Enter und MouseDown in deren Handler ich nur die Eigenschaft DropedDown auf true setze funktioniert das bei mir.

Gruss
Friedel

16.10.2007 - 13:16 Uhr

Hallo sw0ce,

das schöne am "Nachbauen" ist doch, dass man sich vom "Original" was abschauen kann. Jeder Schlüssel hat eine bestimmt Anzahl an Unterschlüsseln, welche du doch auch direkt im TreeView als Unterknoten anzeigen kannst. Mit Icons z.B. kann man sehr gut sichtbar machen, welcher Knoten was darstellt. Wird dann ein Knoten (Schlüssel) angewählt, welcher bearebeitet werden kann, stellst du in einem passenenden Panel die Editoren dafür zur Verfügung.

Zu viele Textboxen auf einem Panel machen die Sache meiner Meinung nach sehr umständlich und unübersichtlich.

Gruss
Friedel

16.10.2007 - 12:09 Uhr

Hallo cytrics,

einige Konsolenprogramme nehmen z.B. solche Parameter

/SOURCE="c:\test.txt"

Dann kann man via string-Bearbeitung herausfinden was der User eigentlich will.

Gruss
Friedel

16.10.2007 - 11:05 Uhr

Das Event checkedListBox1.ItemCheck tritt auf, während sich der Status des Items ändert. D.h. die Count Eigenschaft der CheckedItems ist für dich an dieser Stelle falsch. Nimm das SelectedIndexChanged-Event und es sollte hinhauen.


private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) {
	checkAll();
}

private void checkAll() {
	this.button1.Enabled = (this.checkedListBox1.CheckedItems.Count > 0 &&
		!String.IsNullOrEmpty(this.textBox1.Text) &&
		!String.IsNullOrEmpty(this.textBox2.Text));
}

//wird von beiden Textboxen verwendet
private void textBox_TextChanged(object sender, EventArgs e) {
	checkAll();
}

Gruss
Friedel