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 TheBrainiac
Thema: Name der SD-Karte in .NET CF ermitteln
Am im Forum: Rund um die Programmierung

Das SmartDeviceFramework stellt sowas bereit.

foreach(var info in DriveInfo.GetDrives())
{
  Debug.WriteLine("Info for " + info.RootDirectory);
  Debug.WriteLine("\tSize: " + info.TotalSize.ToString());
  Debug.WriteLine("\tFree: " + info.AvailableFreeSpace.ToString());
  Debug.WriteLine("\tManufacturer: " + info.ManufacturerID ?? "[Not available]");
  Debug.WriteLine("\tSerial #: " + info.SerialNumber ?? "[Not available]");
  Debug.WriteLine(string.Empty);
}

info.RootDirectory sollte das sein, was du suchst.

Gruß, Christian.

Thema: [erledigt]Webbrowser Auto Login
Am im Forum: Web-Technologien

http://social.msdn.microsoft.com/Search/en-US/?Query=webbrowser+login
Insbesondere:http://social.msdn.microsoft.com/forums/en-us/csharplanguage/thread/2810C0B5-A0DB-49A4-A35E-BC7DA0DF49AC

Oder du benutzt folgendes URI-Format:
http://username:[email protected]

Gruß, Christian.

Thema: Sich nicht wiederholende Zufallskoordinaten
Am im Forum: Rund um die Programmierung

Wenn die Menge aller möglichen Koordinaten nicht zu groß ist, kannst du auch einfach eine Liste mit allen Möglichkeiten erstellen. Dann generierst du eine einzige Zufallszahl zwischen 0 und der Länge der Liste, merkst dir die Koordinate in einer Zwischenvariable, löscht sie aus der Liste und gibst sie zurück. Wenn die Liste leer ist, sind alle Koordinaten aufgebraucht.

Gruß, Christian.

Thema: Parser für Kommandozeilenparameter (CommandLineArguments)
Am im Forum: .NET-Komponenten und C#-Snippets

So.

Ich habe die Klasse erneut angepasst.

Zitat von herbivore
Außerdem wäre zu überlegen, ob es nicht einen besseren Weg gibt, Syntaxfehler in der zu parsenden Kommandozeile zu melden, als über Exceptions. Immerhin wird die Kommandozeile oft eine Benutzereingabe sein und für solche gilt im Allgemeinen: besser TryParse statt Parse verwenden.

Da hast du allerdings recht. Ich habe es jetzt so angepasst, dass der Lexer Fehler über die Properties Success und Message meldet, nicht mehr über Exceptions.
Zitat von herbivore
einfache Strings ohne besonderes Format sollten schon möglich sein, schon alleine, damit man die Kommandozeilen von Programmen verarbeiten kann, die Dateinamen als Parameter bekommen, z.B. mycopy Console.Exe Console.Exe.bak.

Auch das ist jetzt möglich, allerdings muss man sich dann um die Verarbeitung der Parameter selbst kümmern, da diese vom ArgumentTyp Unknown sind. Außerdem werden diese einfach durchnummeriert (arg1, arg2, arg3...).

Gruß, Christian.

Thema: Parser für Kommandozeilenparameter (CommandLineArguments)
Am im Forum: .NET-Komponenten und C#-Snippets

Kann ich leider nicht reproduzieren.

Wie sieht deine Kommandozeile genau aus?

MyApp.Exe -directory='test' oder MyApp.Exe Console.Exe -directory='test'?

Zweiteres wir nämlich den o.g. Fehler produzieren, da Console.Exe kein gültiger Parameter ist.

Gruß, Christian.

Thema: DynamicProxy - Ein Helper für Duck-Typing
Am im Forum: .NET-Komponenten und C#-Snippets

Beschreibung:

Manchmal hat man das Problem, dass man vorgegebene Klassenstrukturen hat, die man in ein schon vorhandenes (anderes) System einpflegen muss. Da kann es schon mal vorkommen, dass ein Interface existiert und eine Klasse auch die richtigen Methoden/Properties/Events bereitstellt, aber das Interface nicht implementiert. Hierzu dient die Klasse DynamicProxy, die ein Objekt auf ein Interface "mappen" kann, und zwar dynamisch. Es wird ein eigener Proxy-Typ geschaffen, der für jedes Objekt von gleichen Typ benutzbar ist. Einmal erstellte Proxies werden gecacht, was die Performance beschleunigt.

Dokumentation:
DynamicProxy stellt folgende (als Extension-Methods implementierte) Methoden bereit:

// Prüft, ob sich das Object "obj" auf das Interface vom Typ TInterface mappen lässt.
bool LooksLike<TInterface>(this object obj);

// Mappt das übergebene Object auf das Interface vom Typ TInterface.
TInterface MakeProxy<TInterface>(this object obj);


Beispiel:
Wir haben ein wichtiges & viel genutztes Interface:

public interface IHasName {
    string Name { get; }
}

Nun haben wir eine 3rd-Party-Bibliothek, die die folgende Klasse bereitstellt, wie wir sehen, aber ohne das Interface:

public class Person {
    public string Name { get; set; }
}

Wir brauchen aber zwingend das Interface, um die Person verarbeiten zu können:

public void Process(IHasName hasName) {
    // Tue irgendwas
}

Früher hätten wir dazu für jedes Interface pro Klasse einen eigenen Proxy per Hand schreiben müssen, diese Arbeit nimmt uns DynamicProxy ab:

var bob = new Person { Name = "Bob" };
if (bob.LooksLike<IHasName>()) {
    var bobHasName = bob.MakeProxy<IHasName>();
    
    Process(bobHasName);
}

Gruß,
Christian.

ChangeLog:
Support für generische Interfaces hinzugefügt (Namensgebung der Proxies).


Schlagwörter: duck typing ducktyping proxy generator reflection typebuilder assemblybuilder code erstellung

Thema: TypeBuilder und Interfaces: TypeLoadException
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

So. Problem gelöst...

Mein Interface war ohne Zugriffsmodifizierer implementiert. Habs jetzt Public, und die Exception ist weg...

Danke trotzdem fürs lesen

Thema: WebBrowser-Control unter Windows Mobile - Scrollen via Touch?
Am im Forum: GUI: Windows-Forms

Der wird fürs CF so nicht funktionieren. Ich glaub fürs CF gibts noch keinen Wrapper, aber du kannst den WinForms-Wrapper fürs CF anpassen.

Gruß, Christian.

Thema: WebBrowser-Control unter Windows Mobile - Scrollen via Touch?
Am im Forum: GUI: Windows-Forms

Das sind ja auch keine .Net-Dll's, du musst dir den passenden Wrapper suchen (Siehe hier)

Gruß, Christian.

Thema: TypeBuilder und Interfaces: TypeLoadException
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Habe inzwischen herausgefunden, dass man das Interface auch beim erstellen des Types mit angeben muss, aber das ändert nichts an der Exception.

var typeBuilder = modBuilder.DefineType("SoWieSo", TypeAttributes.Public | TypeAttributes.Class, typeof(object), new Type[] { typeof(IMyInterface) }); 

Thema: WebBrowser-Control unter Windows Mobile - Scrollen via Touch?
Am im Forum: GUI: Windows-Forms

Zitat von Netbuzzr
Ich hätte nämlich schon versucht, die WebKit.dll bzw. WebKit-ce.dll in meine App zu integrieren, was leider nicht funktionierte.

Warum nicht? Ich habe mit WebKit keine Probleme.

Gruß, Christian.

Thema: TypeBuilder und Interfaces: TypeLoadException
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi @ All.

Ich muss z.Zt. eine Klasse schreiben, die mir aus einem Interface und einem Objekt, welches dieses Interface nicht implementiert, aber die gleichen Methoden hat, einen Proxy bastelt (DuckTyping).

Soweit kein Problem. Allerdings funktioniert das Hinzufügen des Interfaces nicht so wirklich:

var asmBuilder = Thread.GetDomain().DefineDynamicAssembly(new AssemblyName {
    Name = "SoWieSo"
}, AssemblyBuilderAccess.Run);
var modBuilder = asmBuilder.DefineDynamicModule("SoWieSo");
var typeBuilder = modBuilder.DefineType("SoWieSo", TypeAttributes.Public | TypeAttributes.Class);
            
typeBuilder.AddInterfaceImplementation(typeof(IMyInterface));

//Ganz viel IL-Kram

var myType = typeBuilder.CreateType();

In der letzten Zeile bekomme ich eine TypeLoadException:
Zitat
System.TypeLoadException: Der Typ "SoWieSo" in der Assembly "SoWieSo, ..." versucht, eine Schnittstelle zu implementieren, auf die nicht zugegriffen werden kann.

Ich muss bestimmt die Assembly der Schnittstelle noch referenzieren, aber ich finde einfach nicht heraus, wo.

Gruß, Christian.

Thema: Zugriffe auf Verzeichnis loggen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du kannst das ja auf eine(n) bestimmten Ornder/Prozess/Aktion/WasAuchImmer filtern. Dann hast du nur die Daten die du auch wirklich brauchst. Das wird in die Xml-Datei gelogged, die kannst du dann ja auswerten. Oder?

Du musst bedenken, dass da wirklich eine riesige Informationsflut auf dich zu kommt, wenn du das wirklich über alle Verzeichnisse laufen lassen willst.

Thema: Zugriffe auf Verzeichnis loggen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Und wie siehts mit ProcMon aus?

Thema: Zugriffe auf Verzeichnis loggen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Kannst dir ja mal DiskMon angucken, vielleicht kannst du dir was abgucken / vllt ist das auch schon das, was du suchst.

Gruß, Christian.

Thema: Parser für Kommandozeilenparameter (CommandLineArguments)
Am im Forum: .NET-Komponenten und C#-Snippets

Hi!

Freut mich, dass die Komponente gefällt!

Habe das Problem beseitigt.

Einfach den Konstruktor von CommandLineArguments wie folgt anpassen:

public CommandLineArguments()
{
    var parser = new Parser(Environment.CommandLine);

    parser.Parse();

    var lexer = new Lexer(parser.Tokens);

    lexer.DoLexing();

    ExecutablePath = Process.GetCurrentProcess().MainModule.FileName;
    m_Arguments = lexer.Arguments;
}

Im ersten Post ist jetzt auch wieder die aktuellste Version.

Gruß, Christian.

Thema: SendMessage() System Messages verschicken
Am im Forum: Rund um die Programmierung

Zitat von msdn
Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.

SendMessage Function (Windows)
Weiter unten in den Kommentaren ist auch die Frage, wie man WM_TOUCH emuliert.

Gruß, Christian.

Thema: Welche PC Hardware habt ihr?
Am im Forum: Smalltalk

So, auch von mir ein Update:

Werde nun bald studieren, also hab ich mir ein neues Notebook geleistet:

Name: Acer Travelmate Timeline X 8572TG
CPU: Intel Core i5 460M (2,4 - 2,53 GHz)
GraKa: SLI mit GeForce GT 330M (1GB) / OnBoard Intel HD Grafics (1 GB)
RAM: 4GB DDR3
HDD: 640 GB
Akku: 8h Laufzeit
Display: 1366x768
Win7-Leistungsindex: 5,9

Gruß, Christian.

Thema: [gelöst] Event auslöser finden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Aber du fügst den Handler 2mal hinzu aber entfernst ihn nur einmal. D.h. imho, dass er einmal immernoch gebunden ist.

Thema: [gelöst] Event auslöser finden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

In deinem Code fügst du bei CvsInSightState.Offline auch den EventHandler CvsInSightDisplay2_ResultsChanged zu insight2.ResultsChanged hinzu. Wolltest du ihn da entfernen oder ist das so soll?

Thema: Es werden nicht alle Tabstopps angesprungen
Am im Forum: GUI: Windows-Forms

Was mir gerade noch einfällt: sind die Controls 2-7 in einem "SubContainer"? ist der enabled bzw. hat der nen TabStop?

Thema: Es werden nicht alle Tabstopps angesprungen
Am im Forum: GUI: Windows-Forms

Sieh mal nach, wie die TabStops im Designer (also das grafische editieren der TabStops, nicht das mit dem Eigenschaftenfenster!) gesetzt sind. der hat mir da auch schon öfters dazwischengefunkt.

Gruß, Christian.

Thema: [gelöst] Event auslöser finden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi.

Beim Status Offline fügst du den Eventhandler aber auch hinzu. soll das so sein?

Gruß, Christian.

Thema: Eigenes Control - Textschreibecursor erzeugen?
Am im Forum: GUI: Windows-Forms

Die Standard-.Net-Controls (TextBox, Button, ListView, ListBox, TreeView, usw.) sind nichts weiter als Wrapper um die Win32-Controls. und die werden vom Betriebssystem selbst gezeichnet.

Gruß, Christian.

Thema: Eigenes Control - Textschreibecursor erzeugen?
Am im Forum: GUI: Windows-Forms

Nimm einfach eine Textbox (ohne Border & in der Farbe des Hintergrundes), die du auf deinem Control nach Bedarf platzierst.

Gruß, Christian.

Thema: Bekomme keine Fehlerausgabe bei bei Programmabbruch
Am im Forum: Rund um die Programmierung

Kompiliere die Anwendung als Debug und teste die so, wie du oben beschrieben hast (Vom Netzlaufwerk aus auf den alten Rechnern, gleiche Schritte um den Fehler zu reproduzieren). Dann siehst du wahrscheinlich die Fehlermeldung.

Gruß, Christian.

Thema: Office-Dokument in Browser bearbeiten
Am im Forum: Web-Technologien

Was fertiges für ASP.Net wirst du nicht finden. Aber so was gibt es schon, vielleicht kannst du das ja nutzen: Google Docs und Zoho

Thema: [erledigt] Regex.IsMatch liefert false zurück obwohl Zeichenfolge vorkommt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Siedlerchr

bool md5Exists = myRegex.IsMatch(pattern_Md5);

Muss wohl so heißen:

bool md5Exists = myRegex.IsMatch(result);

Gruß, Christian.

Thema: Code zur Laufzeit kompilieren?
Am im Forum: Rund um die Programmierung

Zitat von manni1238
Ok, muss ich also die namespaces aus meinem Code angeben?

Nein. Du musst schon die Assemblies übergeben. Aber du übergibst Namespaces.
Zitat von manni1238
Wenn ja erhalte ich trotzdem noch keine .exe.

Lass dir doch mal die Compiler-Errors ausgeben.

Habs gerade mal ausprobiert (einfach als Konsolenanwendung kompilieren):

using System;
using System.Collections.Generic;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Diagnostics;

public class Program
{
    public static void Main()
    {
        Compile(@"
using System;

class Program {
    static void Main() {
        Console.WriteLine(""Hello, World"");
        Console.ReadKey(true);
    }
}
");
        Process.Start("TestCompile.exe");
    }

    public static void Compile(string code)
    {
        CSharpCodeProvider provider = new CSharpCodeProvider();
        ICodeCompiler compiler = provider.CreateCompiler();

        CompilerParameters compilerParams = new CompilerParameters();
        compilerParams.GenerateExecutable = true;
        compilerParams.GenerateInMemory = false;
        compilerParams.OutputAssembly = "TestCompile.exe";
        compilerParams.IncludeDebugInformation = true;
        compilerParams.ReferencedAssemblies.Add("system.dll");
        compilerParams.ReferencedAssemblies.Add("system.windows.forms.dll");

        CompilerResults result = compiler.CompileAssemblyFromSource(compilerParams, code);
        foreach (var error in result.Errors)
            Console.WriteLine(error);
    }
}

Funktioniert einwandfrei.

Gruß, Christian.

Thema: Code zur Laufzeit kompilieren?
Am im Forum: Rund um die Programmierung

Zitat von manni1238

string[] namespaces = {"System", "System.Collections.Generic", "System.Linq", "System.Text", "System.Windows.Forms"};
            CompilerParameters compilerParams = new CompilerParameters(namespaces);

Das, was du übergibst sind nicht die Namespaces, sonder die zu referenzierenden Assemblies. und System.Collections.Generic ist kein eigenständiges Assembly, sondern in System mit enthalten (System.Text ebenso). (Siehe hier)

Gruß, Christian.