Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Borg
Thema: Nach welchen Kriterien Konstruktoren definieren?
Am im Forum: Rund um die Programmierung

Du musst keinen Code doppelt schreiben. Aber berücksichtige doch erstmal die obigen Hinweise, bevor du dich an die Vererbung machst. Dann sollten sich die meisten deiner Probleme auflösen.

Thema: Nach welchen Kriterien Konstruktoren definieren?
Am im Forum: Rund um die Programmierung

Nun ja, das ist eine Entscheidungsfrage, die einfach auch davon abhängt, wie oft welche Art der Erzeugung benötigt wird.

Generell ist es aber empfehlenswert, die Reihenfolge der Parameter soweit möglich beizubehalten.

Also:

public Basement() : this(String.Empty, new Location(0,0)) { }

public Basement(string newType) : this(newType, new Location(0,0)) { }

public Basement(string newType, short X, short Y ) : this(newType, new Location(X,Y)) {}

public Basement(string newType, Location newLctn )
{
   this.type = newType;
   this.lctn = newLctn;
}

Thema: Performante Umwandlung eines char* in eine C# Struktur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nun ja, das Wort "realtime-Daten" klang für mich sehr nach Echtzeit...

Nichtsdestotrotz sollte es gehen.

Thema: WordPad starten, Datei laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Process.Start( "wordpad.exe", "c:\foo\myfile.txt" )

Thema: Performante Umwandlung eines char* in eine C# Struktur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Na ja, Windows selbst ist nicht für Echtzeitoperationen tauglich.

Aber wenn es ein Perl-Script schafft, dann sollte es Maschinencode (in den das .NET-Programm letztendlich kompiliert wird) auch schaffen.

Thema: Breite eines ToolTips
Am im Forum: GUI: Windows-Forms

Eigenschaften von Anzeige \ Darstellung \ Erweitert \ Element: QuickInfo.

Jetzt musst du "nur noch" herausfinden, wo das in der Registry gespeichert wird.

Thema: Font-darstellung und Breite setzen
Am im Forum: Grafik und Sound

Windows (bzw. GDI[+]) unterstützt letter-spacing nicht.
Daher muss das jedes Programm selbst machen. Deswegen sieht es auch in jedem Programm etwas anders aus...

Thema: Standart Mail-Programm aufrufen & Mail-Addy, Betreff & Anhang übergeben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mittels Process.Start folgenden Link starten: mailto:adress@server.tld&cc=...&bcc=...&subject=test&body=see file&attachment=file:///c:/test.txt

Bei Outlook funktioniert das, Thunderbird verschluckt das Attachment.
Dann kann man aber über thunderbird -compose "to=adress@server.tld&cc=...&bcc=...&subject=test&body=see file&attachment=file:///c:/test.txt" gehen...

Thema: Fehlermeldung bei TextBox
Am im Forum: GUI: Windows-Forms

double Uges, Uz;
if (double.TryParse(txtUges.Text, out Uges) && double.TryParse(txtUz.Text, out Uz))
{
   txtErgebnis.Text = (Uges-Uz).ToString();
}
else
{
   MessageBox.Show("Bitte geben Sie eine Zahl ein", "Die Eingabe entspricht nicht dem Format");
}

Ansonsten gibt es auch noch das Control NumericUpDown.

Thema: MouseWheel
Am im Forum: GUI: Windows-Forms

Das Problem ist, dass das MouseWheel-Event immer nur an das fokussierte Control geschickt wird und ein Panel halt keinen Fokus haben kann.

Du könntest probieren, ob das Form selbst die MouseWheel-Events erhält. Wenn nicht, kannst du immer noch per Application.FilterMessage auf WM_MOUSEWHEEL filtern.

Thema: BigDecimal?
Am im Forum: Rund um die Programmierung

Was heißt zur Not?
Die Java-Klassen sind bei jedem Framework dabei. Einfacher geht's eigentlich nicht mehr.

Thema: Eindeutschungen und Anglizismen
Am im Forum: Smalltalk

Ich bin der Meinung, dass es nun einmal zwei Arten der Sprache gibt: die in der Praxis benutzte und die von Philologen (quasi-mathematisch) definierte.

Zur ersten Form gehören nun sowohl mündliche Kommunikation als auch sämtliche Dialekte und Mundarten. Und diese Form der Sprache verändert sich natürlich ständig und soll sie auch, da sie ja das "Protokoll" der menschlichen Kommunikation darstellt und sich - genauso wie die Menschen selbst - an deren kommunikative Bedürfnisse anpassen soll.
So ist es natürlich problemlos möglich fremdsprachige Wörter einzudeutschen (Lehnwörter). Dies sollte allerdings nur geschehen, wenn es kein sinnvolles deutsches Wort gibt. Beispiele dafür wären Browser oder online.

Um allerdings eine gemeinsame Sprache zu wahren ist es sinnvoll einen entsprechenden Standard festzulegen.
Allerdings gibt es in Deutschland keine gesetzlich festgelegte Instanz, die einen solchen Standard verpflichtend definieren kann.
Deswegen findet in Deutschland die Normierung der Sprache über die für Bildungseinrichtungen zuständigen Organe statt, welche formal auch nur Entscheidungsbefugnisse über die dort unterrichtete Sprache haben.
Allerdings übernehmen viele andere Organe/Firmen diesen Regeln.

Und zum Thema Duden:
Die auf der KMK für Bildungseinrichtungen verpflichtend festgelegten Standards werden von der Reihe "Der Duden in 12 Bänden, das Standardwerk zur deutschen Sprache" definiert. Interessant ist, dass das Wort "Duden" eine geschützte Marke des Bibliographischen Instituts und des Brockhaus-Verlages ist.
Das was man gemeinhin als der "Duden" bezeichnet, ist nur Band 1 des obigen Gesamtwerks.
Und genau über dieses Buch kann ich nicht viel Gutes sagen. So ist eine der wichtigsten Möglichkeiten der deutschen Sprache die Zusammensetzung von Substantiven, ohne dass diese eine definierte Beziehung zueinander haben müssen.
Es gibt also prinzipiell unendlich viele deutsche Wörter. Um so wichtiger ist es eigentlich den Wortstamm sowie dessen lautverschobene deklinierte bzw. konjugierte Form zu erklären und nur jene zusammengesetzten Substantive aufzunehmen, deren Bedeutung nicht durch die beteiligten Wörter erklärt werden kann oder davon sogar abweicht. Es ist somit sinnvoll Wörter wie "Leberkäse" aufzunehmen, der ja nun wirklich sehr wenig mit Käse zu tun hat. Allerdings ist es für mich unbegreiflich, warum sich im Duden Wörter wie (*beliebige Seite aufschlagen*) "Donau-Dampfschifffahrtsgesellschaft", "Koreakrieg" oder "Seeluft" finden lassen. Zumal sie dort nicht erklärt werden (dazu gibt es Band 10, das Bedeutungswörterbuch).
So ist es natürlich kein Wunder, wie man auf "mehr als 115000 Stichwörter und über 500000 Bedeutungserklärungen" kommt.

Gerade in der Schule gibt es da Probleme. So hatte ich in der elften Klasse einen Streit mit meiner Deutschlehrerin, welcher erst durch den Fachbereichsleiter zu meinen Gunsten entschieden wurde. Es ging damals um das Wort "Diskrimination", welches ich in einem Aufsatz benutzte. Formal gesehen stellt "Diskrimination" das korrekte Substantiv dar. Genau wie "Addition" anstelle von "Addierung" oder haufenweise andere dem Lateinischen entnommene Lehnwörter. Obige Lehrerin weigerte sich allerdings das Wort als richtig anzuerkennen, da sich im Duden nur das (formal falsche) "Diskriminierung" findet, welches sich in der deutschen Sprache durchgesetzt hat. Zu meinem Glück fand sich "Diskrimination" jedoch im Fremdwörterbuch (Band 5).
In der Schule hält sich trotzdem hartnäckig die Meinung, Wörter, die nicht im Duden stehen, gäbe es nicht.

Wenn man die gesamten selbsterklärenden beziehungsweise im Duden nicht erklärten zusammengesetzten Substantive aus diesem entfernen würde, wäre dieser auch nicht mehr ein kiloschwerer Klopper, sondern ein kleines, handliches Büchlein.

Thema: TrackBar
Am im Forum: GUI: Windows-Forms

Hiermit gebe ich allen Lesern einen virtuellen Schnaps aus.
Prost.
Schließlich ist die Zeit des vorherigen Posts ziemlich denkwürdig: 11:11:11

Thema: TrackBar
Am im Forum: GUI: Windows-Forms

Ich verstehe dich so, dass du weder Vielfache einer Zahl noch gerade Zahlen ausgeben willst, sondern nur die Teiler einer Zahl.

Das Minimum einer derartigen Trackbar ist immer 1, dass Maximum diejenige Zahl, deren Teiler du haben willst.
Dazu kann man vorher die Teilermenge ermitteln und dann nur die Anzahl der Teiler als Wertebereich der Trackbar setzen.
Dies wird in folgendem Code gemacht.

public class DividerTrackBar : TrackBar
{
   // der c'tor
   public DividerTrackBar() : base()
   {
      this.SmallChange = 1;
      this.LargeChange = 1;
      this.TheNumberWhoseDividersYouWant = 1;
   }

   // hier kommen die Teiler rein
   private List<int> Dividers;

   // setze AllowZero auf true, um zusätzlich zu den Teilern auch 0 zu erlauben
   private bool _AllowZero = false;
   public bool AllowZero
   {
      get { return this._AllowZero; }
      set
      {
         this._AllowZero = value;
         CalculateTrackBar();
      }
   }

   // ein zwar ziemlich bescheuerter Name, aber dafür selbsterklärend
   private int _TheNumberWhoseDividersYouWant;
   public int TheNumberWhoseDividersYouWant
   {
      get { return this._TheNumberWhoseDividersYouWant; }
      set
      {
         if (value < 1)
         {
            throw new ArgumentOutOfRangeException( "Maximum", "Maximum must be greater or equal to 1" );
         }
         else
         {
            // die Quadratwurzel liefert eine relativ genaue Abschätzung der Teilerzahl
            this.Dividers = new List<int>( Convert.ToInt32( Math.Sqrt( value ) ) );
            // 1 ist immer Teiler
            Dividers.Add( 1 );
            // das Verfahren zur Ermittlung der Teiler ist deutlich verbesserungswürdig
            for (int i = 2; i < (value / 2 + 1); i++)
            {
               if ((value % i) == 0)
               {
                  Dividers.Add( i );
               }
            }
            // die Zahl selbst ist immer Teiler
            if (value != 1)
               Dividers.Add( value );
            CalculateTrackBar();
         }
     }
   }

   private void CalculateTrackBar()
   {
         // wenn die Null erlaubt ist, kommt sie als erster "Teiler"
         if (AllowZero)
         {
            // 0 noch nicht in der Liste?
            if (Dividers[0] != 0)
               Dividers.Insert( 0, 0 );
         }
         else
         {
            // 0 in der Liste?
            if (Dividers[0] == 0)
               Dividers.RemoveAt(0);
         }
         // erstes Element in Dividers
         this.Minimum = 0;
         // letztes Element in Dividers
         this.Maximum = this.Dividers.Count - 1;
         // Defaultwert ist der erste Teiler
         this.Value = Dividers[0];
      }
   }

   public new int Value
   {
      set
      {
         int index = this.Dividers.IndexOf( value );
         if (index == -1)
         {
            throw new ArgumentException( "Value must be a divider of TheNumberWhoseDividersYouWant", "Value" );
         }
         else
         {
            base.Value = index;
         }
      }
      get { return this.Dividers[ base.Value ]; }
   }
}

Thema: ListView Gruppe existent?
Am im Forum: GUI: Windows-Forms

ListView.Groups.Contains()

Thema: Öffentliche IP auslesen
Am im Forum: Web-Technologien

Möglich wäre auch noch UPnP.
Dieses wird jedoch nur von den Consumer-Betriebssystemen unterstützt.

Thema: serialport wann wird Datareceived_Event ausgelöst?
Am im Forum: Rund um die Programmierung

Ich vermute eher, dass das eine Eigenart der Klasse ist. Da die serielle Kommunikation oftmals textuell und zeilenweise erfolgt, macht es Sinn, mit dem Abschluss einer Zeile sofort die Daten weiter zu geben.
Die Frage ist eher, warum die Klasse sich sonst so nicht-deterministisch verhält.
Auf jeden Fall hast du ja eine relativ einfache Lösung des Problems gefunden.

Thema: Prozess ausführen
Am im Forum: Web-Technologien

Der ASP.NET Code wird unter einem Benutzeraccount ausgeführt, der sich nicht lokal anmelden darf. Wenn du den Taschenrechner unter diesem Benutzer öffnest, erhält dieser Benutzer eine eigene Session (quasi eine eigene Oberfläche), in der der Taschenrechner ganz normal arbeitet.
Da du dich aber nicht als ASP.NET-Benutzer anmelden kannst, bekommst du diese Session auch nie zu sehen.

Thema: Weiterleitung auf eine lokale Datei
Am im Forum: Web-Technologien

Der Link file:///C:/Uploa/\%eine Zahlenfolge%/Dateiname.end wird auf dem Rechner natürlich als lokaler Link auf die angegebene Datei interpretiert, die es nicht gibt.
Du musst die Dateien beim Upload in einem vom IIS (bzw. ASP.NET) erreichbaren Ordner speichern und in der ausgelieferten HTML-Datei den zur Website relativen Pfad der Datei mit dem gewünschten Protokoll (http://) als Link angeben.

Thema: Probleme Debuggen mit c# und vista64
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Mach mal Projektmappe\Bereinigen und Projektmappe\Neu Erstellen.

Thema: Probleme Debuggen mit c# und vista64
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wenn du VS benutzt, vergiss csc.exe.
Erstell dir ein neues Konsolenprojekt, schreib dein Console.WriteLine in die Main und starte dann.
VS benutzen und per Kommandozeile kompilieren ist unsinnig.

Generell gibt es in Windows zwei startbare Anwendungstypen: Konsolen- und GUI-Programme (WinForms unter .NET).
Ein Konsolenprogramm bekommt beim Starten eine Konsole zugewiesen, kann jedoch trotzdem Fenster erzeugen und öffnen.
Ein GUI-Programm hingegen bekommt keine Konsole. Erstellst du ein solches, kannst du dann natürlich auch nicht per Console.* auf eine zugreifen...

Thema: Probleme Debuggen mit c# und vista64
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Das Problem ist: du erstellst mittels VS ein Windows-Forms-Projekt. Dabei werden mehrere Dateien angelegt (helloworld.cs und helloworld.designer.cs), die du natürlich alle bei csc.exe angeben musst.
Erstelle besser neues Projekt vom Typ Konsolenanwendung.

Meine obige Frage gilt aber weiterhin.

Thema: Probleme Debuggen mit c# und vista64
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wieso erstellst du dein Projekt in VS um es dann auf der Kommandozeile zu kompilieren? Reicht dir F5 (bzw. F10 oder F11) nicht?

Thema: Buffergröße - Performance
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich vermute eher, dass die Autoren deiner Beispiele eine gewisse Fixierung auf das Kilobyte haben.
Ich verwende meist Vielfache von 4096 Bytes, da das die Default-Clustergröße von NTFS ist. Ansonsten ist es - wie herbivore schon schrieb - meist (außer bei wirklich großen Dateien) ausreichend und einfacher die komplette Datei zu laden.

Thema: ServerSocket
Am im Forum: Netzwerktechnologien

Dürfte es nicht deutlich weniger Arbeit machen, wenn du es auf J# umschreibst?
Du kannst es ja dann trotzdem mit allen .NET-Sprachen nutzen.

Thema: [gelöst] Service remote stoppen/starten
Am im Forum: Netzwerktechnologien

Der ganz normale ServiceController kann das auch.

Thema: Euer Desktop...
Am im Forum: Smalltalk

Zitat
huhu ich bin neu hier und hab euch über google gefunden dabei hab ich nur nach Wallpapers gesucht für meine garfiken un dann habsch mir das hier ma so durch gelesen und dachte mir jetzt protzte ma mit deinem Desktop XDD

Das ist aber lieb, dass du dich nur fürs Angeben extra gleich angemeldet hast.
Falls du auch mal ne Frage zum Programmieren mit C# haben solltest, kannst du diese hier auch stellen. Und brauchst dich dafür nicht mal neu anmelden...

Thema: syntaxfrage zu System.IO.File.Move(quelle ziel)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wenn man schon nicht die Doku benutzt, sollte man sich wenigstens mit dem Debugger anfreunden.

Ich zitiere mal eine Passagen aus der MSDN Lib:

Zitat
Path.GetTempFileName
Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file.

Problem erkannt?

Falls nicht:
Path.GetTempFileName() liefert dir einen vollständigen Pfad, beispielsweise "C:\Temp\tmp00056.tmp". Unter diesem speicherst du das Video.
Dann änderst du die Extension => "C:\Temp\tmp00056.3gp".
Anschließend bastelst du dir den Pfad "c:\inetpub\wwwroot\webvideos\video\C:\Temp\tmp00056.3gp".
Dass da eine Exception kommt, ist ja wohl klar.

Alles was fehlt, ist ein simples Path.GetFileName() um dein Path.ChangeExtension().

Wobei ich mich generell frage, wieso du eine temporäre Datei erzeugst, nur um diese dann woanders hin zu verschieben und umzubenennen. Wäre es nicht einfacher, die Datei gleich mit an Ort und Stelle zu speichern?
Falls dir kein sinnvolles Benennungsschema einfällt (nahezu jedes sollte aber besser als Path.GetTempFileName sein), hilft dir wahrscheinlich Path.GetRandomFileName().

Thema: Zugriffrechte auf Datei erstellen vergeben.
Am im Forum: Datentechnologien

(1)
Environment.GetFolderPath() liefert dir den Pfad eines der speziellen Windows-Verzeichnisse. Environment.SpecialFolder sagt obiger Methode, elchen Ordner du brauchst. Für dich sind drei Möglichkeiten interessant:

  1. Standard: ApplicationData für benutzerspezifische Daten, die bei einem auf einem Server gespeicherten Profil (beispielsweise Active Directory) auf jedem Rechner für den Benutzer zur Verfügung stehen sollen,
  2. LocalApplicationData, für benutzerspezifische Daten, die ausschließlich auf diesem Rechner gespeichert werden sowie
  3. CommonApplicationData, für Daten, die allen Benutzern zur Verfügung stehen sollen.

  4. Standard ist es, in einem der obigen Ordner einen Unterordner mit dem Herstellernamen und darunter einen weiteren mit dem Programmnamen zu erstellen. In diesen werden dann die eigentlichen Dateien gespeichert.

    Also etwa:

    Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData ), @"wwwowtschik\myProgram" );
    Natürlich muss das Verzeichnis vor der ersten Verwendung erstellt werden, dies kann man jedoch auch in einem (eventuellen) Setup-Projekt erledigen.

    (2)
    Isolated Storage ist ein Mechanismus, der einen von der Wahl des richtigen Ordners befreit. Das ganze funktioniert ähnlich wie ein Tresor.
    Man gibt einfach beim Benutzen an, wie die Daten isoliert werden sollen (nur diese Anwendung, nur diese Assembly, nur diese Domäne, nur dieser Rechner, niemand, nur dieser Benutzer, Active-Directory-weit).
    Existiert bereits ein Tresor mit den genannten Eigenschaften, kann man auf alle Dateien in ihm zugreifen, ansonsten erhält man einen neuen leeren Tresor.
    Alles was man braucht, findet sich im Namespace System.IO.IsolatedStorage.

    Es ist wichtig darauf hinzuweisen, dass die Daten nicht automatisch verschlüsselt werden.

Thema: Verzeichnisfreigabe"NUR LESEN"
Am im Forum: Netzwerktechnologien

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/Win32_Share.asp
Auf obiger Seite:

Zitat
Access
[in] Security descriptor for user level permissions. A security descriptor contains information about the permissions, owner, and access capabilities of the resource. If this parameter is not supplied or is NULL, then Everyone has read access to the share. For more information, see Win32_SecurityDescriptor and Changing Access Security on Securable Objects.
Folgt man den Links auf obiger Seite landet man bei:
Zitat
Shares
The GetSecurityDescriptor and SetSecurityDescriptor methods are in the Win32_LogicalShareSecuritySetting class, rather than in the Win32_Share class.