Laden...
Avatar #avatar-2329.gif
xxxprod myCSharp.de - Experte
Programmierer Österreich\Wien Dabei seit 13.04.2006 1.378 Beiträge
Benutzerbeschreibung

Forenbeiträge von xxxprod Ingesamt 1.378 Beiträge

12.11.2010 - 08:59 Uhr

SQL Grundlagen:


if not exists(select * from sys.database_principals where name = 'hans')
....

Lg XXX

11.11.2010 - 17:34 Uhr

Hallo serial,

dafür würde sich hier das Decorator Pattern oder AOP anbieten.

Es ist zwar auch Businesslogik aber bestimmt nicht die für den konkreten Kontext insofern würd ichs hier auch raushalten wollen.

Lg XXX

11.11.2010 - 15:19 Uhr

Nicht schöner aber anders...


public class A : Base
{
   public static A Create(){  }
}

public class B : Base
{
   public static B Create(){  }
}

public class C : Base
{
   public static C Create(){  }
}

public class Program
{
    public static void Main()
    {
        A x = A.Create();
        B x2 = B.Create();
    }
}

Lg XXX

10.11.2010 - 14:16 Uhr

Du versuchst nicht zufällig das hier umzusetzen oder?

Lg XXX

10.11.2010 - 09:31 Uhr

Naja du könntest die Login Sachen komplett rausnehmen und die zwei nichts von einander wissen lassen(sofern es die Umstände erlauben):


public class Game
{
    public void Play()
   {
      // Quellcode
   }
    public void Stop()
   {
      // Quellcode
   }
}
public class Logger
{
    public void Login()
   {
      // Quellcode
   }
    public void Logout()
   {
      // Quellcode
   }
}

void CodeWhichUsesGameAndLogger()
{
   Logger logger = new Logger();
   logger.Login();

   Game game = new Game();
   game.Play();
}

Das geht allerdings nur dann, wenn das Game nichts vom Logger wissen muss wie zB ob der User eingeloggt ist oder nicht.

Lg XXX

04.11.2010 - 14:18 Uhr

Schaut korrekt aus. Wenn nur der String als ganzes Vorkommen darf, könntest du noch ein '$' am Ende anhängen.

Lg XXX

/Edit: Statt [0-9] könntest du auch einfach \d nehmen.

01.11.2010 - 20:51 Uhr

Es kann unter Umständen am "Code der die Variablen füllt" liegen, wenn du dort explizit eine ID angibst wenn aber die ID-Column auf AutoIncrement eingestellt ist.

Was anderes fällt mir dazu gerade auch nicht ein.

Lg XXX

01.11.2010 - 18:44 Uhr

Hallo Binärathlet,

auf die Schnelle ist mir nur folgende Lösung eingefallen:


decimal percentage = (restBefore == 0) ? ((1 + restAfter) / (1 + restBefore)) : (restAfter / restBefore);

Es geht ja nur darum das Verhältnis zu ermitteln.

Lg XXX

01.11.2010 - 13:11 Uhr

Hallo Binärathlet,

unten hab ich deine Code so modifiziert, dass einerseits die Hosts links und rechts angeordnet sind und sich nicht überlappen und andererseits eine eigene PictureBox implementiert damit diese die MouseDown Events ihrer Controls weitergibt. Code ist nicht vollständig, sollte dir aber ca. zeigen wies zu machen wäre.


    public partial class Form1 : Form
    {
        private TextBlock leftBlock = new TextBlock();
        private TextBlock rightBlock = new TextBlock();
        private ElementHost leftHost = new ElementHost();
        private ElementHost rightHost = new ElementHost();

        public Form1()
        {
            InitializeComponent();

            // PictureBox generieren
            PictureBox myBox = new MyPictureBox();
            myBox.Location = new Point(100, 100);
            myBox.BackColor = System.Drawing.Color.Tan;
            myBox.Click += new EventHandler(myBox_Click);
            this.Controls.Add(myBox);

            // TextBlock definieren
            leftBlock.Text = "links";
            leftBlock.Foreground = new SolidColorBrush(System.Windows.Media.Colors.Black);
            leftBlock.Visibility = System.Windows.Visibility.Visible;
            //leftBlock.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;

            rightBlock.Text = "rechts";
            rightBlock.Foreground = new SolidColorBrush(System.Windows.Media.Colors.Black);
            rightBlock.Visibility = System.Windows.Visibility.Visible;
            //rightBlock.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;

            // Host
            leftHost.Child = leftBlock;
            leftHost.AutoSize = true;

            leftHost.Dock = DockStyle.Left;
            //leftHost.Dock = DockStyle.Fill;

            leftHost.BackColorTransparent = true;
            myBox.Controls.Add(leftHost);

            rightHost.Child = rightBlock;
            rightHost.AutoSize = true;

            rightHost.Dock = DockStyle.Right;
            //rightHost.Dock = DockStyle.Fill;

            rightHost.BackColorTransparent = true;
            myBox.Controls.Add(rightHost);
        }

        void myBox_Click(object sender, EventArgs e)
        {
            ((PictureBox)sender).BackColor = System.Drawing.Color.Beige;
        }
    }

    public class MyPictureBox : PictureBox
    {
        protected override void OnControlAdded(ControlEventArgs e)
        {
            if (e.Control is ElementHost)
            {
                ElementHost host = e.Control as ElementHost;
                host.Child.MouseDown += new System.Windows.Input.MouseButtonEventHandler(Child_MouseDown);
            }

            base.OnControlAdded(e);
        }

        void Child_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            base.OnClick(null);
        }
    }

Lg XXX

21.10.2010 - 10:41 Uhr

Ich würd mir in dem Fall eher einen künstlichen Schlüssel einfallen lassen, der sich aus den Werten oder aus der Berechnung selbst zusammensetzt. Diesen kann man dann auch wieder auflösen und den ursprünglichen Zustand daraus herstellen.

Im einfachsten Fall eine string Verkettung der relevanten Parameter? Aber für Guid sehe ich hier keine Verwendung. Vor allem nicht wenn es wirklich eindeutig sein soll und ableitbar.

Lg XXX

21.10.2010 - 10:29 Uhr

Hallo wpf23,

in dem du dem Command ein CommandArgument oder Parameter übergibst welches der DataContext des ListItems ist. Also {Binding}. Im ViewModel oder wo auch immer der Command daheim ist, nimmst du dann einfach das Objekt und löscht es aus der Liste. List.Remove(item).

Lg XXX

21.10.2010 - 10:18 Uhr

Ich würd die Werte auch als gleitkommazahl nebenher abspeichern und zum setzen der Trackbarvalues nur auf int runden.

Und auch würde mir eine gewichtete Verteilung besser gefallen als einfach nur Change/Trackbars abzuziehen.

Hier eine kleine Spielerei von mir:


class Program
{
    static List<decimal> values = new List<decimal>();

    static int index = 0;

    static void Main(string[] args)
    {
        values.Add(50);
        values.Add(30);
        values.Add(20);

        WriteValues();

        ConsoleKeyInfo key;
        while ((key = Console.ReadKey()).Key != ConsoleKey.Escape)
        {
            if (key.Key == ConsoleKey.LeftArrow && index > 0)
                index--;

            else if (key.Key == ConsoleKey.RightArrow && index < values.Count - 1)
                index++;

            else if (key.Key == ConsoleKey.UpArrow)
                ChangeValue(1, index);

            else if (key.Key == ConsoleKey.DownArrow)
                ChangeValue(-1, index);

            WriteValues();
        }
    }

    private static void WriteValues()
    {
        Console.Clear();
        Console.WriteLine("Current Index: " + index);
        Console.WriteLine("-----------------------------------------------------");
        Console.WriteLine("Press Left or Right to change index.");
        Console.WriteLine("Press Up or Down to increment or decrement the value.");
        Console.WriteLine("Press Escape to exit the program.");
        Console.WriteLine("-----------------------------------------------------");


        for (int i = 0; i < values.Count; i++)
        {
            Console.Write((i > 0 ? "+" : "") + Math.Round(values[i], 0));
        }
        Console.WriteLine("=" + values.Sum().ToString("##,##"));
    }

    private static void ChangeValue(decimal change, int index)
    {
        decimal restBefore = 100 - values[index];
        decimal restAfter = restBefore - change;

        decimal percentage = restAfter / restBefore;

        for (int i = 0; i < values.Count; i++)
        {
            if (i == index)
                values[index] += change;
            else
                values[i] *= percentage;
        }
    }
}

Lg XXX

14.10.2010 - 14:58 Uhr

Hallo Smou,

den Ansatz hätte ich am Anfang auch verfolgt aber beim Popup kommt dann das Problem (zumindest bei meinem derzeitigen Setup):


class MainViewModel:IMainViewModel
{
  public MainViewModel(IPopupViewModel popupViewModel) { }

  public void SomeEvent()
  {
    PopupViewModel.Show();
  }
}

Wie würdest du dieses Szenario umsetzen, wenn das ViewModel die View nicht kennen soll?

Lg und danke für Euren Einsatz 😃

//EDIT: So würde es mit CSL's Ansatz funktionieren was mir ganz gut gefällt:


public class MainViewModel:IMainViewModel
{
  public MainViewModel(
    IWindowService windowService,
    IPopupViewModel popupViewModel) { }

  public void SomeEvent()
  {
    //so oder so ähnlich könnte es funktionieren
    WindowService.Show(PopupViewModel);
  }
}

Was ich nur nicht will, ist das ich alle View-ViewModel kombinationen irgendwo nochmal explizit angeben muss... Obwohl irgendwoher muss die Information ja kommen. Obs jetzt über Interface, eine Konfig oder sonst was geht ist eigentlich schon egal.

14.10.2010 - 14:32 Uhr

Hallo,

der Ansatz von CSL gefällt mir ziemlich gut. Ich müsste dann denn ViewModels nur mehr das WindowService injecten lassen und schon kann ich die View des Popups öffnen ohne die ViewInjecten zu müssen und gleichzeitig komme ich von extern an die View wenn ich mir nur das ViewModel resolven lasse.

Vielleicht gefällt mir der Ansatz auch weil ich einen ähnlichen Weg einschlagen wollte. Jetzt bleibt nur noch die Frage, wo ich die Views mit den ViewModels verheirate.

Ich könnt ein generisches IViewModel<T> where T:IView Interface einführen um dann aus dem Interfacekontrakt die View zu kreiren oder mach ich mich dann wieder zu abhängig bzw. in die falsche Richtung abhängig?

Abhängigkeiten wären dann:

IViewModel->IView wegen generischem Interface
View->IViewModel wegen Databindings

also fast wieder eine zirkuläre Gschicht die mir nicht so schmeckt.

@FZelle: Manche Sachen schauen auf den ersten Blick nicht so einladend aus. Und ich kenn mich da halt auch nicht so aus. Ich such mir mal ein paar Beispielprojekte raus.

Lg XXX

14.10.2010 - 11:32 Uhr

Hallo,

ich versuch ein WPF Projekt im Sinne von MVVM umzusetzen und stoße immer wieder auf Abhängigkeitsprobleme oder vielleicht bilde ich es mir auch nur ein.

Das ganze versuche ich im Zusammenspiel mit LightCore einem DI-Container einzusetzen.

Am Anfang hatte ich die Beziehungen so gesetzt, dass das ViewModel das Zentrum von allem war und ich nur dieses per DI zu holen war. Das heißt das ViewModel kannte die View(per Interface) und gab diese per Property nach außen hin bekannt(um es anzeigen zu können).
Das Konzept gefällt mir so überhaupt nicht und so hab ichs bei einem Formular testweise umgedreht und jetzt ist eine reine View->ViewModel->Model Abhängigkeit gegeben.

Das Problem, dass ich jetzt habe ist, dass ich aus dem Formular neue Views(Popups) aufrufen müsste. Mein sagen wir mal dazu MainViewModel kennt das PopupViewModel. Dieses aber kennt seine View nicht. Und jetzt hackts. Wenn ich die MainView mit dem DI erzeugen lasse, wird MainView, MainViewModel, PopupViewModel und irgendwelche Models erzeugt aber nachdem das PopupViewModel keine PopupView zur Erzeugung braucht wird die View auch nicht erzeugt und per DataBinding verknüpft.

Zur Zeit ist so eine Mischung umgesetzt:
MainView->MainViewModel
MainViewModel->PopupViewModel
PopupViewModel->PopupView

nur damit der DI-Container dieses Konstrukt auflösen kann. Das heißt ich muss je nachdem was für eine View ich gerade anzeigen will einmal die View direkt vom DI-Container anfordern und im anderen Fall das ViewModel was ein äußerst bescheidenes System darstellt.

Ich such jetzt nach einer Idee, wie ich die ViewModels völlig Viewlos bekomme und trotzdem das System mit dem DI-Container weiterverwenden kann.

Eine Möglichkeit wäre evt. die Beziehung Main->Popup auch aufzulösen und von außen zu verknüpfen.

Also erstelle MainView+ViewModel, erstelle PopupView+ViewModel und verknüpfe beide ViewModels mit Events miteinander. Würde wahrscheinlich funktionieren und die Abhängigkeiten reduzieren. Dazu wäre dann idealerweise wieder eine Art Factory angebracht.

Hat sonst noch wer Ideen? 😃

Lg XXX

08.10.2010 - 14:52 Uhr

Und wo wird das ViewModel an die View gehängt? Ist das ein und das selbe Objekt oder erzeugst du da jedesmal ein neues? So wie im oben angeführten Code, schaut es mir ganz danach aus und dann ist auch klar warum das PropertyChanged event NULL ist wenn das Event bei einer ganz anderen Instanz gesetzt wurde.

Lg XXX

08.10.2010 - 14:31 Uhr

Hallo MrSparkle,

das Problem soweit ich es verstehe ist, dass ein "INotifyPropertyChanged" Objekt, dass als DataContext verwendet wird automatisch vom DependencyObject das PropertyChanged Event abonniert werden sollte. Nun passiert aber genau das nicht bei seinem Beispiel wodurch das Event keinen Effekt auf das Formular hat.

Er kann also PropertyChanged feuern soviel er will, das Formular bleibt davon unberührt.

@stefan123:

Ich hatte gestern irgendwie ein ähnliches Problem: Ich hatte fälschlicher Weise mehrere Instanzen meines ViewModels ein und der selben View zugewiesen. Nachdem die View aber nur ein einziges Objekt im DataContext halten kann, hat auch nur das "aktive" Objekt ein PorpertyChanged Event abonniert. Beim debuggen jedoch war ich immer in einer "alten" Instanz des ViewModels wodurch der Effekt bei mir auch aufgetreten ist - also PropertyChanged war null.

Vielleicht hilft das ja weiter.

Lg XXX

08.10.2010 - 10:44 Uhr

...Module ist in dem Fall eine Abstrakte Klasse,
die die benötigten Methoden für die Klasse vorgibt...

Type hat auch eine Methode "IsSubClassOf" mit der du testen kannst ob eine Klasse deine abstrakte Basisklasse implementiert.

foreach (Type type in typeof(MyBase).Assembly.GetTypes())
{
    if (type.IsSubclassOf(typeof(MyBase)))
        Console.WriteLine(type);
}

Lg XXX

07.10.2010 - 12:46 Uhr

Du musst wie im angehängten Bild Visual Studio als Start Aktion auswählen und wenn du debuggst(F5) im neuen visual studio dein Projekt erneut auswählen und die Startaktion im 2. VS wieder auf Start Project zurück stellen.

Lg XXX

07.10.2010 - 11:43 Uhr

Mir war gerade so "langweilig" dass ich folgendes fabriziert hab.

Eine unvollständige eigene "Implementierung" von Int32 ohne Wertetypen. 😛

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        MyInt32 number = 320000000;

        Console.WriteLine(number);

        Console.Read();
    }
}

public class MyInt32
{
    private readonly MyByte[] Bytes = new MyByte[]
        {
            new MyByte(),
            new MyByte(),
            new MyByte(),
            new MyByte()
        };

    public override string ToString()
    {
        return ((int)this).ToString();
    }

    public static implicit operator int(MyInt32 number)
    {
        string[] bits = number.Bytes.SelectMany(b => b).Select(b => b == null ? "0" : "1")
            .Reverse()
            .ToArray();

        string binaryString = string.Join("", bits);

        return Convert.ToInt32(binaryString, 2);
    }

    public static implicit operator MyInt32(Int32 number)
    {
        string binaryString = Convert.ToString(number, 2).PadLeft(32, '0');

        int index = 32;


        MyInt32 result = new MyInt32();

        foreach (var myByte in result.Bytes)
        {
            for (int i = 0; i < 8; i++)
            {
                myByte[i] = binaryString[--index] == '1' ? MyBit.Value : null;
            }
        }

        return result;
    }
}

public class MyBit
{
    public static readonly MyBit Value = new MyBit();
}

public class MyByte : IEnumerable<MyBit>
{
    private readonly MyBit[] Bits = new MyBit[8];

    public MyBit this[int index]
    {
        get { return Bits[index]; }
        set { Bits[index] = value; }
    }

    public IEnumerator<MyBit> GetEnumerator()
    {
        foreach (var bit in Bits)
            yield return bit;
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

01.10.2010 - 13:39 Uhr

Hallo heribert123,

herbivore hat die Ursache für dein Problem schon genannt.

Eine Lösung dazu wäre evt. ein nicht generisches Interface einzuführen:


interface MyInterface
{
    void DoSomething(object typ);
}
interface MyInterface<T> : MyInterface where T : Typ
{
    void DoSomething(T typ);
}

und dieses dann im Dictionary zu verwenden.

Lg XXX

01.10.2010 - 12:29 Uhr

Die Fehlermeldung sagt doch eindeutig, dass die Klassen

MyImplFuerEinTyp und
MyImplFuerAndererTyp

das interface

MyInterface<ConsoleApplication1.EinTyp> bzw. MyInterface<ConsoleApplication1.AndererTyp>

nicht richtig implementieren. Ich wüsst nicht wie man es Aussagekräftiger erklären könnte.

Lg XXX

29.09.2010 - 10:26 Uhr

Vielleicht könntest du 2 verschiedene Projekte erstellen, die die selben Codefiles verlinken aber in den Referenzen eben die unterschiedlichen Assemblies haben.

Lg XXX

/EDIT: Hab mal ein kleines Beispielprojekt angehängt. Es funktioniert eigentlich nur muss man vorm starten das Projekt "cleanen" damit die alten assemblies gelöscht werden.

29.09.2010 - 10:17 Uhr

Geht leider erst mit VS2010.

Lg XXX

28.09.2010 - 15:43 Uhr

Hallo FZelle,

ich hab mir gerade MicroModel angeschaut und es sieht ganz nett aus aber dadurch das man alles im Konstruktor definieren muss, kann man das ViewModel nicht als Interface definieren und Testen lässts sichs auch nicht mehr so richtig oder überseh ich da was?

Lg XXX

21.09.2010 - 14:33 Uhr

Letztere hat bereits ein paar Verweise mehr in der Verweisliste drinnen als ein komplett leeres Projekt. Das wars dann aber auch schon wieder.

Lg XXX

09.09.2010 - 07:28 Uhr

Die Klasse Match hat auch eine Eigenschaft, die dir sagt ob auch wirklich gematcht wurde oder nicht und diese heißt "Success" oder ähnlich.

Lg XXX

03.09.2010 - 13:35 Uhr

Am witzigsten find ichs wenns auf einmal von links nach rechts und wieder retour wechselt. Dann pendelt sie quasi nur einen halbkreis nach lenks und rechts. 😃

02.09.2010 - 13:43 Uhr

Hallo Daniel,

Ein netter Schachzug wäre gewesen, die Fehlermeldung mal zu posten

Sorry, hab zwar daran gedacht aber es dann doch nicht getan...

Von daher würde ich vorschlagen, statt dem Call ein Invoke zu benutzen:

Super das war die Lösung. Ich hab mir das aus Beispielen die ich gefunden habe zusammengebastelt ohne wirklich zu wissen welche Möglichkeiten es sonst gibt. Gibts da bestimmte Quellen wo man sich dazu genauer einlesen kann?

Lg XXX

02.09.2010 - 12:34 Uhr

Es ist jetzt kein dringendes Thema. Ich werd halt auf die funktionalität vorerst verzichten müssen.

Problem ist folgendes:

ich hab irgendwo eine Methode die ca. so aussieht:


void Foo<T>(Func<Bar, T> function);

Diese Methode will ich aber dynamisch aufrufen mit Objekten von denen ich nur den Type kenne. Also ein object[]

Somit will ich ca. so einen Aufruf basteln:


foreach(object o in objects)
{
  ProxyFoo(bar => o)
}

Warum der Proxy? Weil es für die Implementierung der Methode wichtig ist, dass der konkrete Typ übergeben wird und nicht "object".

In meiner ProxyFoo würd ich nun eine Expression basteln, die aus dem

Func<Bar, object> 

ein

Func<Bar, ConcreteType>

bastelt.

Das mit der Expression hätte wunderbar hingehaut aber leider gibts hier die Probleme mit den verschachtelten Lambdas.

Zu der Frage

Kannst du den zweiten Lambda irgendwie komplett wegbringen, oder zumindest auf Expression<Func> umstellen

Nein das erste Func ist eben der Methodenparameter und den wrappe ich dann bereits mit einer Expression, was aber bereits nicht mehr hinhaut.

Lg XXX

02.09.2010 - 11:55 Uhr

Hallo,

folgendes Beispiel hab ich zusammengestellt, nachdem ich schon seit Stunden damit kämpfe und keine Lösung dafür finde.

            Func<string, int> parse = s => int.Parse(s);
            Func<string, int> parse2 = s => parse(s);

            var intPar = Expression.Parameter(typeof(int), "f1p2");
            var stringPar = Expression.Parameter(typeof(string), "par");

            var call = Expression.Call(null, parse2.Method, stringPar);
            var lambda = Expression.Lambda(call, stringPar);
            var func = lambda.Compile();

Wenn ich den Call mit der "parse" Func aufrufe funktioniert alles. Sobald ich aber diese in einer weiteren "parse2" Func aufrufe kann ich den Lambda Ausdruck nicht mehr kompilieren.

Dieses Beispiel soll nur das Problem aufzeigen. Brauchen tu ichs für einen anderen Einsatzzweck.

Any Ideas?

Lg XXX

01.09.2010 - 08:38 Uhr

Hi, dieses Prinzip POCO Objekte über mehrere Schichten zu verwenden würde mir gefallen, da man hier nicht jedes Objekt 2,3 mal anlegen und warten muss.

Welche Nachteile bringt das mit sich?

  • Wenn ich ein Service einführe, dann können die Objekte des Services Eigenschaften von diversen Objekten verschiedener Repositories haben. Das könnte ich dann damit wohl nicht mehr bewerkstelligen.
  • fällt einem sonst noch was ein?

Lg XXX

25.08.2010 - 13:56 Uhr

Hallo Quaneu,

vielleicht ist System.Threading.AutoResetEvent etwas für dich.

Lg XXX

25.08.2010 - 13:42 Uhr

[Nein, habe mir aber fest vorgenommnen es einzuführen]

Ich habs bisher oft gemieden aus den bereits genannten Gründen bzgl. der Erkenntnis. 😃
Dieser Thread hat mich umgestimmt sodass ich mir vorgenommen mich in das Thema (nochmal) einzuarbeiten.

Meine bisherigen Hürden zu TDD ist einfach dieser Mehraufwand und wenn man wirklich TDD programmiert, dann ist das ein Graus wenn man nicht unterstützende Tools wie zB. Resharper hat weil für Klassen, Methoden die es noch nicht gibt, kann es logischerweise keine Intellisense geben und so dichtet man sich was zusammen in einem Test, und muss es nachher (teilweise) nochmal ausprogrammieren.

Naja mal schauen wie konsequent ichs diesesmal durchziehe.

Lg XXX

23.08.2010 - 16:12 Uhr

Mit bisschen Anpassung tut der Code von gfoidl eh das von dir gewünschte:


        public static PropertyInfo GetPropertyInfo<T>(Expression<Func<T>> expr)
        {
            return ((PropertyInfo)(expr.Body as MemberExpression).Member);
        }

mit


            PropertyInfo prop = GetPropertyInfo(() => new TestClass().TestProp);

bekommst nun ein PropertyInfo auf das du in Zukunft auch nach Refactorings zugreifen kannst.

Lg XXX

23.08.2010 - 10:37 Uhr

Ich lebe noch in der Steinzeit(WinForms).... X(

23.08.2010 - 10:24 Uhr

Wie wird dein Hauptfenster erstellt und angezeigt?

Mit

Application.Run(new MainForm());

?

Wenn man das z.B. auf

new MainForm().Show();

Application.Run();

ändert, dann beendet das Programm ebenfalls nicht beim Schließen des Fensters.

Lg XXX

19.08.2010 - 16:37 Uhr

Und wie könnte man Arrayzugriffe damit basteln?

Ohne mich mit den Expressions beschäftigt zu haben, würd ich den ArrayIndex rausparsen, die Collection zu IEnumerable oder so casten und dann einfach solange iterieren bis ich mein Objekt gefunden hab.

Lg XXX

//EDIT: Oben genannten Vorschlag würde ich auf das Reflectionbeispiel anwenden. Keine Ahnung wie das bei den Expressions zum umsetzen wäre.

19.08.2010 - 13:44 Uhr

Hallo sth_Weird,

sowas habe ich auch schon mal gebraucht. Siehe dazu Link

Lg XXX

02.09.2009 - 11:44 Uhr

Weil du beim Foreach durch das char-array des strings durch iterrierst und als folge dessen chars zurück bekommst.. wenn du als typ "string zeichen" in der schleife angibst ist das also falsch weil hier "char zeichen" zurück kommen.



			string sonderzeichen = "@$%&/(";

			foreach (char zeichen in sonderzeichen)
			{
				if ("someText".Contains(zeichen))
				{
					//doSomething
				}
			}

Unverständlich genug? 😃

Lg XXX

12.06.2009 - 08:26 Uhr

Hallo Belenos,

was möglich sein sollte, ist dass du dir einen Expression Tree so wie ihn dN!3L gepostet hat selbst dynamisch zusammenbaust und dann deiner Select Methode übergiebst. Das Problem ist wie schon erwähnt, dass das delegate nicht in einen solchen Expression Tree automatisch umgewandelt werden kann. Selbst kannst du solch einen aber sehr wohl erstellen.

Lg XXX

10.06.2009 - 13:26 Uhr

View.NavigateBackward
und
View.NavigateForward

Lg XXX

09.06.2009 - 15:59 Uhr

Strg + '-'

für letzte Position und

Strg + Shift + '-' fürs vorwärts

lg XXX

27.05.2009 - 12:00 Uhr

Das '^' ist ein Regex Steuerzeichen und bedeutet(Anfang der Zeile). Ich vermute das du dieses Zeichen ebenfalls escapen musst. Probier mal '^'

Lg XXX

25.05.2009 - 10:11 Uhr

Table<T> nehm ich mal an.

Lg XXX

22.05.2009 - 14:11 Uhr

natürlich:


(From x in db select new {x.Id, x.SumA, SumB, SumCorrect = SumB>0 || SumA>0 ? SumA : 0}

Umsetzung hab ich jetzt mal so aus deinem Text verstanden. Falls anders gewünscht einfach anpassen.

Lg XXX

02.04.2009 - 12:07 Uhr

Das kannst du mit dem Observer Pattern realisieren.
hierfür kann man in .net events verwenden. auch bei remoting.

Schon mehrmals probiert und nie zum laufen gebracht, weshalb ich bewusst Observer erwähnt hab.

Lg XXX

02.04.2009 - 10:15 Uhr

Hallo Sebian,

wo genau ist dein Problem? Tabellen verknüpfst du in einer Abfrage entweder per inner oder outer joins.

Zeig vielleicht mal was du bisher probiert hast.

Lg XXX

02.04.2009 - 09:46 Uhr

Das kannst du mit dem Observer Pattern realisieren.

Hier ein Beispiel (Chat): Link

Kurz erklärt:

  1. Der Client holt sich das entfernte Object(MarshalByRef) des Servers.
  2. Der Client übermittelt sein eigenes MarshalByRef Object dem Server über das ServerObject welcher sich dieses irgendwo für den späteren Zugriff ablegt.

Kommunikation:
Client->Server: Client ruft Methoden des Serverobjects auf.
Server->Client: Server ruft Methoden des Clientobjects auf.

Lg XXX