Laden...

Forenbeiträge von Bunnychecker Ingesamt 224 Beiträge

06.11.2012 - 13:19 Uhr

Aber warum hat der Account die Adressen nicht einfach direkt als Eigenschaft?

Das ist eine gute Frage, die ich selbst erstmal durchdenken musste und ich glaube, dass macht auch mehr Sinn.

Danke für alle Hinweise.

06.11.2012 - 00:23 Uhr

Hi.

Ich habe 2 große Datenmengen von Objekten (jeweils >50000). Datenmenge1 sind Adressen. Datenmenge2 sind Accounts. Jeder Account und jede Adresse ist einzigartig (unique). Jede Adresse ist einer Liste von Accounts zugeordnet bzw. jeder Account ist einer Menge von Adressen zugeordnet.
Zugegriffen wird öfters mittels Account, daher bin ich bisher mit

Dictionary<Account, List<Address>> Dictionary

ganz gut zurecht gekommen und habe mir mittels Linq die Accounts geholt, wenn ich per Adresse zugreifen wollte. Aber ich könnte mir gut vorstellen, dass so eine Linqabfrage einiges an Zeit benötigt, wenn die Datenmengen größer werden.

Gibt es gute Alternative? Ich habe mir überlegt eine eigene Klasse zu schreiben in der ich eine List<Account> und eine List<Address> halte und dann über ein Dictionary beide miteinander verbinde, aber vollständig zuende gedacht habe ich dabei noch nicht.

Liebe Grüße

02.11.2012 - 14:19 Uhr

Ich war mir nicht ganz sicher, ob man dafür explizit einen eigenen Appender schreiben muss oder ob es vielleicht auch ein MemoryAppender bzw. ein EventLogAppender tut.

Danke für deinen Link.

Edit:

Ich verstehe das Problem nicht. Sobald ich eine LogMessage schreiben will, springt mein Programm richtigerweise in die Methode Append, aber die _listView == null obwohl ich sie zuvor gesetzt habe?

    public class ListViewAppender : AppenderSkeleton
    {
        private ListView _listView;

        public ListViewAppender()
            : base()
        {

        }

        public ListViewAppender(ListView listview)
            : base()
        {
            _listView = listview;
        }

        private delegate void UpdateControlDelegate(LoggingEvent loggingEvent);

        private void UpdateControl(LoggingEvent loggingEvent)
        {
           // ...
        }

        protected override void Append(LoggingEvent LoggingEvent)
        {
            if (!_listView.Dispatcher.CheckAccess())// _listView == null
                _listView.Dispatcher.Invoke(new UpdateControlDelegate(UpdateControl), new object[] { LoggingEvent });
            else
                UpdateControl(LoggingEvent);
        }


<log4net debug="true">
  <appender name="ListViewAppender" type="WpfApplication2.ListViewAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="ALL"/>
    <appender-ref ref="ListViewAppender" />
  </root>
</log4net>


    public partial class MainWindow : Window
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(MainWindow));

        public MainWindow()
        {
            InitializeComponent();

            ListViewAppender listViewAppender = new ListViewAppender(listView);
            
            log.Error("Error.");
        }
    }

02.11.2012 - 13:46 Uhr

Kannst du etwas genauer erklären, wie das funktioniert?

02.11.2012 - 00:52 Uhr

Oder im Vidalia:

02.11.2012 - 00:51 Uhr

Dank dir, den hatte ich schon gefunden, aber dieser Viewer ist ja eigentlich dafür gedacht starre XML Datei anzuzeigen. Mir wäre es aber wichtiger den aktuellen Log des Programmablaufes darzustellen, wie das in diversen Programmen realisiert ist z.B. im Newsleecher auf dem Bild auf der rechten Seite:

01.11.2012 - 18:28 Uhr

Hallo.

Ich möchte gerne meine Logs in einem WPF ListView Control darstellen wollen. Da dies wahrscheinlich nicht aus der Luft gegriffen ist, würde mich interessieren, ob es da bereits vorgefertigte Lösungen gibt?

Liebe Grüßé

20.10.2012 - 17:22 Uhr

Hi.

Ich möchte meine Applikation mit einer Proxyunterstützung erweitern. Es sollen dabei neben der Direktverbindung auch Http-, Socks4-, Socks4a- und Socks5proxies unterstützt werden, wobei der User nur die IP des Proxys angeben soll. Das Programm soll dann selbst herausfinden, um welche Art von Proxy es sich handelt.

Mir geht es nun nicht darum, wie man die einzelnen Proxys implementiert, damit die Verbindung funktioniert, sondern darum, wie man die Architektur der Klassen aufbaut. Vererbungen, Interfaces, Überschreibungen und alles was dazugehört.

Z.B. unterstützt die HttpWebRequest Klasse das Anhängen eines Httpproxys, aber Socksproxies sind damit nicht möglich. Demnach ist die Direktverbindung und die Httpproxyverbindung identisch.

Ist es demnach sinnvoll von der WebRequest Klasse abzuleiten und die einzelnen Proxyarten zu implementieren oder ist es sinnvoll, die Proxyklassen auf TCP Ebene komplett neu zu schreiben?

LG

13.08.2012 - 16:08 Uhr

Stimmt, der Farbabstand als Delta zum reinen rot scheint mir am logischsten und werde ich auch für meine Zwecken verwenden.

Ich danke euch.

12.08.2012 - 23:28 Uhr

Hallo,

ich möchte gerne die Pixel eines Bildes bearbeiten und habe mir vorgenommen jedes Pixel, dass rot ist, schwarz einzufärben. Durch Methoden wie GetPixel und SetPixel kein Problem.
Mir stellt sich die Frage, wie findet man heraus, wann ein Pixel rot ist und wie setzt man das codetechnisch um? Gibt es Richtlinien, ab wann für den normalen Betrachter ein Pixel rot ist und wann eher weiß?
Bisher bin ich über die RGB-Farbwerte gegangen, d.h. ich habe ein Fenster angegeben, wann ein Pixel rot ist und habe es daraufhin schwarz gesetzt.

MfG

08.07.2012 - 12:59 Uhr

Prinzipiell ergibt das Ganze keinen Sinn, deswegen ist es auch notwendig, Zeile für Zeile zu übersetzen. Hinzu kommt, dass das Skript minimized und teilweise obfuscated wurde, was die Sache noch verkompliziert.
Es kommt bei der Funktion von oben nicht daraufan, jeden Typ von .NET zurückzugeben, sondern die von Javascript als string. Im Javascript gibt es dafür eine spezielle Funktion, die ich mit C# nachbauen muss, da später im Skript Abfragen auf a == "function" getätigt werden.

06.07.2012 - 17:18 Uhr

Vielen Dank für das Aufsplitten der Threads und für deine Antwort Colo.

Die Prozedur das Javascript nachzubauen steht fest. Da gibt es nichts dran zu rütteln. Ich bin sebst nicht sonderlich froh drüber, aber so soll es gemacht werden.

06.07.2012 - 02:00 Uhr

Ich versuche gerade die Funktion typeof von JavaScript nachzubauen und kann euch dazu folgende Info zukommen lassen:

Mögliche Rückgabewerte der typeof Funktion sind:
boolean (Ja/Nein-Variable),
string (Zeichenkettenvariable),
number (numerische Variable),
function (Funktion),
object (Objekt),
undefined (unbestimmter Typ).

        public string GetJavaScriptType(object o)
        {
            Type type = o.GetType();

            if(type==typeof(string))
                return "string";

            if(type==typeof(bool))
                return "boolean";

            if(type==typeof(object))
                return "object";

            // return "function";

            if(double.TryParse(o.ToString(),out 0))
                return "number";

            return "undefined";
        }

Wie könnte man den Rückgabewert "function" lösen und kann man "number" besser bestimmen als mit meiner Methode?

Edit: blöd, dass sich jetzt das Threadthema so speziell in eine Richtung gelenkt wurdet, eigentlich ging es mir allgemein um die Übersetzung Javascript <-> C#

04.07.2012 - 09:17 Uhr

Ich seh keinen Javascript Code hier. Nur C# Code, der so niemals funktionieren kann.

Doch, wenn f und e Felder der Klasse Method sind 😛

Der C# Code von oben ist nur das Äquivalent zum JavaScript Code.

Im Prinzip hat sich meine Frage auch schon geklärt, wenn mir jemand die Fragen von dem Beitrag zuvor beantworten könnte.

MfG

04.07.2012 - 09:00 Uhr

Im Javascript wird dann der ASCII Wert des Buchstabens verglichen, sehe ich das richtig? Wie verhält sich Javascript, wenn dort ein wirklicher string übergeben wird? Aufaddieren der einzelnen ASCII Werte?

Edit: Ist schwer darüber etwas bei Google zu finden.

MfG

04.07.2012 - 08:26 Uhr

Hallo,

ich versuche gerade ein Stück JavaScript Code in C# nachzubauen und bin nun vor ein kleines Problem gestoßen.

Bisher dachte ich, dass die Methode Method nur mit einer long Variable aufgerufen wird, nun habe ich aber festgestellt, dass die Methode auch mit einem string aufgerufen werden kann und mir stellt sich nun die Frage, wie muss man denn hier vorgehen um das nachbauen zu können?


        public void Method(long c)
        {
            while (c > 0)
            {
                f = (int)c % e;
                c = (c - f) / e;
            }
        }

MfG

27.06.2012 - 22:39 Uhr

Das ist richtig, aber ich will ja die Javascript/DOM Engine eigentlich gar nicht auf eine Form legen.

27.06.2012 - 20:55 Uhr

Kann ich damit auch Javascriptfunktionen ausführen?

Ich bin nämlich über diesen Thread nun gestolpert, nachdem ich vergeblich versucht habe eine Javascriptfunktion mit WebKit aufzurufen:

http://sourceforge.net/projects/webkitdotnet/forums/forum/939856/topic/4375628

Vielleicht habe ich mich bisher auch nur dumm angestellt?

            var browser = new WebKitBrowser();
            browser.DocumentText = "<html><head><title>Test</title></head><body><script type=\"text/javascript\"> function Test() {}</script></body></html>";
            var test = browser.Document.InvokeScriptMethod("Test");

Fehlermeldung:
COMException: Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben.

27.06.2012 - 19:24 Uhr
WebBrowser webBrowser = new WebBrowser();
            webBrowser.DocumentText = "<html><head><title>Test</title></head><body><h1>Test</h1></body></html>";
            // webBrowser.DocumentText == "<HTML></HTML>\0"            

Funktioniert leider auch nicht.

Jedenfalls habe ich gehört, dass deshalb auch u.a. das Html Agility Pack verwendet wird. Jedoch unterstützt das Html Agility Pack kein Asuführen von Javascript.

27.06.2012 - 18:20 Uhr

Danke für deine Antwort.

webBrowser.Document

ist schreibgeschützt und

            WebBrowser webBrowser = new WebBrowser();
            webBrowser.DocumentText = "<html>TEST</html>";
            // webBrowser.DocumentText == "<HTML></HTML>\0"

bleibt immer

<HTML></HTML>\0
27.06.2012 - 17:00 Uhr

Hallo,

ich bin auf der Suche nach einer Komponente oder .dll, die es mir ermöglicht Javascript welches auf eine DOM-Komponente zugreift, auszuführen ohne einen Request (also offline) abzusenden.

Ich habe ein Stück Html-Quelltext inklusive Javascript und möchte gerne verschiedene Funktionen des Javascripts ausführen und eventuelle Resultate auslesen.

Wenn ich das richtig verstanden habe, braucht man eine Kombination aus Javascript-Engine und dem Html Agility Pack. Also im Prinzip einen WebBrowser, der keine Requests absendet.

Was stehen mir für Möglichkeiten offen?

LG

20.06.2012 - 01:50 Uhr

    class Class1
    {
        public void Method1(string s)
        {
        }

        public void Method2(int i)
        {
        }

        public void Method3(double d, string str)
        {
        }

        /// Weitere Methoden mit unterschiedlichen Signaturen
    }


Nun hätte ich gerne solch eine Liste:

Element0: Methode1(string1)
Element1: Methode3(2.5, string2)
Element2: Methode2(12)
...

Und immer wenn der Timer abgelaufen ist, soll er das nächste Element in der Liste (keine Queue, da die veränderlich bleiben soll) abarbeiten.

20.06.2012 - 00:50 Uhr

Danke dir für deine Antwort.

Das war sicher aus meinem Beitrag nicht ganz herauszulesen. Mir ging es dabei vorallem darum, wie ich die unterschiedlichen Signaturen der Methoden in einen Container packe, sodass das Programm dann, wenn der Timer abgelaufen ist oder die zyklische Abfrage ausgeführt werden soll, auch alle Parameter für diesen Methodenaufruf vorhanden sind.

19.06.2012 - 23:23 Uhr

Hallo,

ich bin mir nicht sicher wie man folgendes Problem löst.

Ich habe eine Klasse in der es verschiedenste Methoden mit unterschiedlichen Parametern gibt. Die Methoden machen alle nur kleinere Berechnungen.

Nun möchte ich aufbauend auf dieser Klasse eine Logikschicht oben aufsetzen, die mir diese Methoden nun zu bestimmten Zeitpunkten (z.B: 12:53 Uhr) aufruft.

Ich bräuchte dann einen universellen Delegaten oder wie soll ich das Problem lösen?

LG

15.06.2012 - 00:31 Uhr

Guten Abend.

Ich bin auf der Suche nach einer .dll oder Funktion, die mir sagt, ob ein Bild ein anderes 1:1 beinhaltet.

Gibt es sowas, oder muss ich mir das selbst schreiben?

Was muss alles kontrolliert werden, damit ein Bild 1:1 übereinstimmt? Müssen einfach nur alle Pixel die selbe Farbe haben oder gibt es noch andere Parameter die überprüft werden müssen?

LG

29.05.2012 - 12:35 Uhr

Hey.

Ich bin gerade dabei meinem Programm eine Proxyunterstützung zu geben. Ähnlich wie im WebBrowser (z.B. Firefox) möchte ich meinem Benutzer die Möglichkeit geben eine Proxyadresse angeben zu können, über welches dann die Requests getätigt werden.
Es sollen Socks4, Socks4a, Socks5 und HttpProxies unterstützt werden, weswegen die Möglichkeiten des WebProxy/IWebProxy entfallen und das Ganze eine Ebene tiefer (TCP) angegangen werden muss.

Ich habe die Starksoft Bibliothek eingebunden, die bereits die Authentifizierung und den Aufbau der Verbindung zu einem Server über einen beliebigen Proxy ermöglicht. Starksoft


Socks5ProxyClient proxy = new Socks5ProxyClient(proxyIP, proxyPort);
TcpClient tcpClient = proxy.CreateConnection("www.google.de",80);
tcpClient.Client.Send(getString);

Erste Frage diesbezüglich wäre, wenn ich die Erreichbarkeit eines Proxies testen möchte, kann ich das nur darüber erreichen, indem ich zu einem Server verbinde:

Application --> Socks5 --> GoogleServer --> Socks5 --> Application

oder kann man über:

Application <--> Socks5

schon feststellen, dass der obige Ablauf funktionieren wird?

  1. Frage:

Mein Benutzer soll nur die Adresse des Proxies angeben und ich möchte die Funktion des Firefox nachempfinden: "Für alle Protokoll diesen Proxy-Server verwenden".

Wie gehe ich das am besten an? Es muss ja dann getestet werden, welches Protokoll der Proxy aufweist. Ich muss also alle Protokolle durchtesten. Welche Tipps und Herangehensweisen könnt ihr mir dafür geben? Wie finde ich also am besten heraus, welches Protokoll vorliegt, wenn ich nur eine ProxyIP zu verfügung habe?
Was ich dazu bisher gefunden habe ist, dass man erst einen HttpRequest an einen SocksProxy senden soll, da dieser dann sofort einen Error liefert, sendet man einen SocksRequest an einen HttpProxy könnte man maximal über einen Timeout erkennen, dass es sich nicht um einen Socksproxy handelt, wobei es schon einer sein kann, der aber evtl. gerade nicht online ist.

Liebe Grüße

22.05.2012 - 12:02 Uhr

Ich erinnere mich schwach an meinen C++ Unterricht, wo mir beigebracht wurde, dass man beim Anlegen von Enums darauf achten sollte, dass die Abstände zwischen den als Zahlen hinterlegten Werten möglichst klein zu halten ist.

Soll heißen, sowas geht in Ordnung:


        private enum Enum1
        {
            None = 0,
            Second = 2,
            Fifth= 5
        }

Jetzt hab ich aber im Sourcecode einer Bibliothek folgendes gefunden:

        private enum HttpResponseCodes
        {
            None = 0,
            Continue = 100,
            SwitchingProtocols = 101,
            OK = 200,
            Created = 201,
            Accepted = 202,
            NonAuthoritiveInformation = 203,
            NoContent = 204,
            ResetContent = 205,
            PartialContent = 206,
            MultipleChoices = 300,
            MovedPermanetly = 301,
            Found = 302,
            // ...
        }

Die Abstände sind groß...

Hat das bei C# keine Bewandnis mehr, weil der Compiler das irgendwie regelt oder ist das im Prinzip "ungünstig" programmiert?

LG

13.05.2012 - 12:58 Uhr

Hallo,

konnte dazu leider nichts in der Suche finden und da mir zu meinem Projekt gerade wieder tausende Dinge einfallen, die ich gerne umgesetzt haben möchte, stellt sich mir die Frage, wie geht ihr große Projekte an?

Immer wieder bemerke ich, dass sobald ich die Klassenerstellungen mit Konstruktoren und Properties größtenteils abgeschlossen habe und ich mich um die Logik und die Kommunikation von den Klassen untereinander kümmern muss mir das doch sehr schwer fällt.
Welche Logik muss in welche Klasse, muss diese Logik vielleicht sogar in eine andere Klasse ausgelagert werden, weil sie weder in die eine Klasse noch in die andere Klasse so richtig reinpasst? Der Verwaltungsaufwand wäre dann aber wieder um einiges größer.

Sollte man sich stur erstmal auf eine Klasse konzentrieren und alle Funktionalitäten außerhalb außer acht lassen? Ich habe mich dabei bemerkt, dass ich doch recht viel zwischen den Klassen hin und her switche.

Gibt es da vielleicht irgendeine allgemein gültige Herangehensweise?

05.05.2012 - 11:53 Uhr

Vielen Dank.

Das Erste Pattern ist logisch und müsste eigentlich auch schon reichen.

05.05.2012 - 11:31 Uhr

Hey.

Ich möchte alle IDs matchen, bis auf die, die als Wert eine "0" haben. Ist das mit Regex möglich oder muss ich per IF-Abfrage rangehen?


string source = "irgendetwas id=012 etwasanderes id=210 nochanders id=0 schluss";

Ich habe versucht lookaheads oder lookbehinds zu verwenden, aber das hat noch nicht so recht funktioniert. Mein bisheriges Pattern:


string pattern = @"id=\d+(?<!0)";

Lässt zwar die "id=0" weg, aber auch die "id=210", da letzte Ziffer eine 0 ist.

Liebe Grüße

18.04.2012 - 13:30 Uhr

Hallo,

Ich möchte gerne mein Programm mit log4net loggen. Dabei möchte ich erreichen, dass im Allgemeinen immer mit dem Standard Pattern des Loggers in die Konsole geschrieben wird, außer wenn es sich um ein Objekt der Klasse ClassB handelt, dann möchte ich nur die Message auf der Console ausgeben.

Kann man das <root> Pattern irgendwie überschreiben?

<log4net>
	<appender type="log4net.Appender.ConsoleAppender" name="A">
		<layout type="log4net.Layout.PatternLayout">
			<conversionpattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" />
		</layout>
	</appender>
	
	<appender type="log4net.Appender.ConsoleAppender" name="B">
		<layout type="log4net.Layout.PatternLayout">
			<conversionpattern value="%message%newline" />
		</layout>
	</appender>
	
	<root>
		<appender-ref ref="A" />
	</root>
	
	<logger name="Application.ClassB">
		<appender-ref ref="B" />
	</logger>
</log4net>
06.04.2012 - 13:54 Uhr
  1. DGV benötigt zum filtern und sortieren einen IBindingListView, darüber haben wir hier schon öfter gesprochen.

Kann es sein, dass ich die Ableitung von BindingList wieder herausnehmen muss, wenn ich z.B. erreichen möchte, dass mir eine ComboBox den Filter für mein DGV darstellt, aber beim Auswählen des Elements auch wirklich nur das DGV gefiltert wird, die Combobox aber weiterhin alle Elemente anzeigt?

Ich habe das Problem zwar schon mehrfach im Netz gefunden, aber überall wurde es mithilfe eines neuen BindingContext Objekts oder eines neuen BindingSource Objekts gelöst. Das scheint bei einer BindingListView aber nicht zu funktionieren.

        BindingListView<Person> persons= new BindingListView<Person>();
            // ...
            dataGridView.DataSource = new BindingSource(persons, string.Empty);
            comboBox.DataSource = new BindingSource(persons, string.Empty);
        }

        private void ComboBoxSelectionChangeCommitted(object sender, EventArgs e)
        {
            ((IBindingListView)persons).Filter = string.Format("FirstName= '{0}'", comboBox.SelectedText); // filtert ComboBox und(!) DGV -> unerwünscht
        }

Was ich bisher als mögliche, aber unsaubere Lösung eingestuft habe:

            dataGridView.DataSource = persons;
            comboBox.DataSource = persons.ToList()
  1. Wird dadurch aber eine Kopie erstellt
  2. Müsste ich dafür sorgen, dass bei jeder Änderung der BindingListView auch die ComboBox aktualisiert wird.
04.04.2012 - 16:45 Uhr

Vielen Dank für deine zügige Antwort.

04.04.2012 - 16:15 Uhr

Vielen Dank für deine Antwort.

Ich habe nun die BindingListView in mein Projekt eingebunden und die funktioniert soweit recht gut, wenn ich die als DataSource für mein DataGridView angebe.

Was mich nun noch interessieren würde, wie erreiche ich, dass in meinem DGV nur bestimmte Spalten/Eigenschaften von meiner Personenklasse angezeigt werden? Ich möchte sozusagen einen ColumnFilter für mein DGV implementieren bzw. das Szenario von oben (rechte Maustaste -> Settings -> alle Infos).

04.04.2012 - 13:13 Uhr

Danke für die angebrachte Kritik.

Ich hatte vor mir eine Übersicht in Form eines DGV zu erstellen. Diese Übersicht soll die Hauptansicht in meinem Programm werden und enthält Adresse, Vor- und Zuname und einen Status. Nun soll die Möglichkeit bestehen weitere Details von solch einem Datensatz auszulesen (z.B. rechte Maustaste auf der Adresse -> Settings). Daraufhin sollen weitere Personeneigenschaften und die Adresse genauer aufgeschlüsselt werden.

Das DGV soll außerdem sortierbar und filterbar bleiben.

Im Prinzip hatte ich das exemplarisch schon einmal mit einer Datenbindung mittels BindingList durchexerziert, aber ich bin eigentlich nur auf Probleme gestoßen. Das DGV war nur mit sehr viel Aufwand sortier und filterbar.
Der Status ist Eigenschaft der Person und ändert sich im Programmablauf. Dadurch, dass meine Personenobjekte in Threads behandelt werden gab es damit auch Schwierigkeiten, wobei es kein wirkliches Problem war, denn die Aktualisierung im DGV erfolgte, sobald man irgendwas im DGV tat.

Daraufhin habe ich beschlossen die Vorteile des DataSets zu verwenden (einfaches filtern/sortieren).
Ich schiebe meine Personenobjekte nacheinander in die Threads (die im übrigen notwendig sind) und habe mir ein NotifyPropertyChangedEreignis für den Status registriert.

Edit:

Serialisieren und Deserialisieren möchte ich, weil nach einem Neustart meine Personen noch vorhanden sein sollen.

Liebe Grüße

03.04.2012 - 17:39 Uhr

Vielen Dank für die Information.

Diese Info hatte ich schon, jedoch wusste ich nicht genau, ob sich das nur auf die Datenbindung bezieht oder auch auf das bloße Anzeigen im DGV.

Kann man also im Allgemeinen sagen, dass mit einem DataView nur eine Selektion aus Rows möglich ist? Man könnte also damit keine Spalten ausblenden? Falls ja, wie könnte man das sonst umsetzen?

03.04.2012 - 15:07 Uhr

Wieso nicht das DataTable direkt als Source vom DataGridView angeben?

Würde ich die DataTable direkt als Source angeben, würde das DGV nur die ToString() Methode der Personenklasse angeben und nicht die Unterklasse, die ich gerne angezeigt bekommen möchte.

Die Daten sind im DataSet eingelesen und nun möchte ich gerne die Anzeige so hinbiegen, dass nur das angezeigt wird, was wichtig ist.

Über rechte Maustaste -> Settings hatte ich dann vor, die Anderen, unwichtigeren, Properties über ein anderes DataView anzeigen zu lassen.

03.04.2012 - 14:55 Uhr

Nein, die Daten sollen nicht nur angezeigt, sondern auch (de-)serialisiert werden. Ich wollte mir diesbezüglich, die Methoden des DataSet zur Hilfe nehmen.

Desweiteren sind mir schon Lösungen bekannt, aber mir geht es möglichst immer um BestPractice. Eine Lösung, die mir sofort einfallen würde, wäre z.B. eine Zwischenklasse zur Anzeige zu erstellen, aber wenn man bedenkt, dass DataView einen Ausschnitt aus einer DataTable darstellen kann, dann sollte es doch, allein von der Begriffklärung, möglich sein, nur bestimmte Spalten meines DataSets anzeigen zu lassen.

Es ist meiner Meinung nach üblich Properties in Klassen gleich der Klasse zu nennen. Macht meiner Meinung nach auch Sinn.

03.04.2012 - 14:11 Uhr

Hey.

Ich starte mit Code:


// Person.cs
    public class Person
    {
        public Anschrift Anschrift { get; set; }
    }


// Anschrift.cs
    public class Anschrift
    {
        public string Plz { get; set; }
        public string Ort { get; set; }
        // ...
    }

            DataSet ds = new DataSet();
			DataTable dt = new DataTable("Personen");
			dt.Columns.Add("Person",typeof(Person));
			ds.Tables.Add(dt);			
			DataView view = new DataView(dt);
			view. // ...
			dataGridView.DataSource=view;

Ich habe mir eine DataTable vom Typ Person erzeugt und möchte nun gerne, dass die Eigenschaften Plz, Ort, usw. im DGV angezeigt werden.

Kann ich dafür das DataView Objekt verwenden oder wie erreiche ich das?

31.03.2012 - 16:16 Uhr

Mir ist gerade noch etwas anderes eingefallen, könnte man nicht den XmlSerializer dafür verwenden, der dann nur die public Properties abspeichert?

31.03.2012 - 12:02 Uhr

Genau deine Variante ist mir auch eingefallen. Ich habe das Ganze mal weitergesponnen und hatte mir dann schon überlegt, wieviele Methoden ich implementieren müsste, damit ich den Codeblock mit den Aufrufen der einzelnen Methoden in die abstrakte Klasse packe. Das Ganze würde, wie du schon ansprichst, deutlich unübersichtlicher werden.

Start kann schon 15-30 Minuten dauern.

31.03.2012 - 11:32 Uhr

Hallo,

ich habe eine Frage bezüglich der Umsetzung eines Problems.

Ich habe eine abstrakte Klasse, die eine Methode Start als abstract implementiert. Diese müssen die Kindklassen auf ihre Art und Weise implementieren, wobei der Ablauf immer identisch ist, nämlich wie folgt...


        protected override void Start()
        {
            foreach(/* ... */)
            {
                Status = "foreach 1 reached";
                // ...
                do
                {
                    Status = "do reached";
                    // ...
                    foreach(/* ... */) || Parallel.ForEach(/* ... */)
                    {
                        Status = "foreach 2 reached";
                        // ...
                    }
                    Status = "while reached";
                } while (/* ... */);
            }
        }

Ich habe eine Property in dieser Klasse, die sich Status nennt und die ich dem Benutzer gerne in einem DGV darstellen möchte. Dabei möchte ich in diesem Status immer aufzeigen, in welchem Codeabschnitt sich mein Programm gerade befindet. Die Stellen, wo ein Update von Status erfolgen muss, habe ich mit

// ...

gekennzeichnet.

Mir fallen zwar ein paar Möglichkeiten ein, aber keine gefällt mir so recht. Wie erreiche ich, dass ich in den Startmethoden nur noch das implementieren muss, was sich im Gegensatz zu den anderen Klassen ändert. Ich möchte also, den Statusupdate irgendwie auslagern.

Ach ich bin blöd, wieso fallen mir die Lösungen immer erst beim Fragen ein 😕 Trotzdem würde ich mich über Antworten freuen.

Liebe Grüße

29.03.2012 - 09:35 Uhr

Hallo herbivore,

vielen Dank für die ausführliche Antwort.

Ich benutze den ExtendedWebClient von dN!3L und habe diesen mit öffentlichen Properties wie Timeout und verschiedenen HTTP-Header erweitert, die ich gerne nach Programmneustart wiederhergestellt hätte.

28.03.2012 - 22:48 Uhr

Guten Abend.

Ich habe eine Klasse, die vom WebClient (Component) ableitet und möchte diese gerne serialisieren. Wie erreiche ich, dass der WebClient auch als serialisierbar gekennzeichnet wird, da ich immer die Fehlermeldung erhalte, dass der WebClient nicht als serialisierbar gekennzeichnet ist.
Die Klasse an sich hat das Attribut [Serializable]

Ich nutze den BinaryFormatter zur Serialisierung.

28.03.2012 - 19:53 Uhr

Übersehen...

Dank dir.

28.03.2012 - 16:42 Uhr

Meine aktuelle Klasse Browser implementiert neben üblichen HTTP Parametern wie UserAgent oder Referer auch andere Properties wie z.B. einen Timeout, die Anzahl der automatischen Weiterleitungen und viele andere Parameter, die man im Firefox z.B. über about:config abrufen könnte.

Einige Properties sind ja nicht weiter schlimm, wenn die mit 0 initialisiert werden, aber was bringt mir ein Browser dessen Timeout auf 0 gesetzt ist? Wenn ich nun 3-4 weitere Parameter habe (so wie ich das oben schon einmal erklärt habe), müsste ich nun doch für alle Properties Konstruktorüberladungen erstellen, die nicht mit 0 initialisiert werden dürfen, obwohl z.B. ein Timeout mit einem Standardwert von 60000ms in 99% der Fälle perfekt wäre? Ein möglichst brauchbarer Zustand wäre, wenn der Timeout diesen Wert hätte.

MfG

27.03.2012 - 17:52 Uhr

Ja, das stimmt, die Initialisierungssyntax hatte ich ganz vergessen, aber mir stellt sich dennoch die Frage, ob man da nicht doch eine gewisse redundanz zulassen sollte, denn wenn ich mir das so richtig überlege, dann habe ich einige int Variablen, die in 0,1% der Fälle mit 0 initialisiert werden sollten.

Ein Anwender, der also meine Klasse einfach verwenden möchte ohne sich groß Gedanken über den dahinterliegenden Code zu machen, der wird ein Objekt mit Standardkonstrukor erzeugen und wird dann evtl. auf Fehlermeldungen stoßen mit denen er nichts anfangen kann, eben weil entsprechende Eigenschaften mit 0 initialisiert worden ist.

Ich weiß nicht, ob das Sinn macht dieses Beispiel zu nennen, aber z.B. beim Timer ist das Intervall nach Instanziierung auch auf 100ms gesetzt.

MfG

20.03.2012 - 16:54 Uhr

Hey.

Ich wollte gerade eine DatenBindung zwischen meiner CheckBox auf der WinForm und der (De-)Registrierung eines Events erstellen, jedoch wusste ich nicht so recht, wie ich das bewerkstelligen soll.
Wenn die CheckBox Checked ist, soll das Ereignis abboniert werden, wenn sie wieder deaktiviert wird, soll das Ereignis deabonniert werden.

LG

edit: Oder verwendet man hierbei gar keine Datenbindung, sondern registriert einfach das CheckedChanged Event der CheckBox?

14.03.2012 - 21:57 Uhr

Guten Abend.

Ich habe verschiedene public Properties in meiner Klasse und lege diese im Konstruktor mit Standardwerten fest.

Wenn nun jemand eine Instanz meiner Klasse erzeugt und daraufhin eine spezielle Property auf einen bestimmten Wert setzen will, dann wird dabei im Konstruktor erst der Standardwert festgelegt und anschließend durch den Aufrufer nochmal ein bestimmter Wert festgelegt.

Meine Frage ist nun, ob diese redundanz in Ordnung ist, da ich durch verschiedene Konstruktorüberladungen niemals alle Möglichkeiten abdecken könnte.


// Class.cs
    public class Class
    {
        public int Property1{ get; set; }
        public string Property2{ get; set; }
        // [...]
        public string PropertyN{ get; set; }

        Klasse()
        {
                Property1 = 12;
                // [...]
        }


// Program.cs
    public class Program
    {    
        private static void Main()
        {
                Class c = new Class();
                c.Property1=5;
        }          
    }

LG

25.02.2012 - 01:18 Uhr

Guten Abend.

Mir ist jetzt schon häufiger die Frage gekommen, verwende ich nun ein Ereignis oder eine Exception?

Gibt es irgendwelche Richtlinien, wann ich das Eine und wann ich das Andere verwenden sollte? Der einzige Unterschied der mir auffiel ist, dass beim Ereignis der Code weiterhin normal abgearbeitet wird, bei der Exception wird ein Teil des Codes "übersprungen". Ist dies auch schon die Erklärung? Ich verwende also eine Exception, wenn danach noch weitere Ausführunggsschritte folgen könnten, die dann aber keinen Sinn mehr machen würden?

Wann sollte ich eine Exception werfen oder nur eine Information dem Benutzer geben?

Ich habe nämlich gerade ein ähnliches Problem, dass ich auf 2 verschiedene Art und weisen lösen könnte.
Eine Zelle im DGV zeigt auf, was mein Programm gerade bearbeitet. Während der Bearbeitung können "Fehler" entstehen, was aber jedoch keine wirklichen Fehler sind, aber eine weitere Ausführung würde auch keinen Sinn machen. Im Endeffekt soll in der Zelle nur die Information vom Benutzer abgelesen werden können. Wie das geschieht ist egal, da er darauf reagieren muss. Wann lieber mit if abprüfen, wann lieber Exception werfen?

mfG