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

31.01.2011 - 11:45 Uhr

Was genau hast du schon probiert und was daran funktioniert nicht?

Lg XXX

27.01.2011 - 11:29 Uhr

Platziere ein Panel mit AutoSize=true in dein AutoScroll Panel und deine Labels platzierst du in dem inneren Panel.

lg XXX

//EDIT: Zusätzlich könntest du anstatt des manuellen Platzierens mit einem FlowLayoutPanel oder alternativ mit Dock=Top arbeiten.

27.01.2011 - 11:06 Uhr

Für was usings. Eine einfach statisch Methode tuts auch:


    class Program
    {
        static void Main()
        {
            new Action(Bar).BeginInvoke(null, null);
            new Action(Bar).BeginInvoke(null, null);

            Console.Read();
        }

        private static void Bar()
        {
            Console.WriteLine("Entering method1.");
            Foo.Bar(() =>
            {
                Console.WriteLine("Executing event1");
                Thread.Sleep(5000);
                Console.WriteLine("Event1 executed");
            });
        }
    }

    public class Foo
    {
        public static void Bar(Action action)
        {
            if (!Monitor.TryEnter(action))
                return;

            action();

            Monitor.Exit(action);
        }
    }

27.01.2011 - 09:58 Uhr

Hab ein kleines Beispiel gebastelt:


    class Program
    {
        static void Main()
        {
            new Action(Bar).BeginInvoke(null, null);
            new Action(Bar).BeginInvoke(null, null);

            Console.Read();
        }

        private static void Bar()
        {
            Console.WriteLine("Entering Eventsafe method.");
            using (new Foo(() =>
            {
                Console.WriteLine("Executing event");
                Thread.Sleep(2000);
            })) ;
        }
    }

    public class Foo : IDisposable
    {
        private readonly Action _action;
        private static readonly List<Action> Actions = new List<Action>();

        public Foo(Action action)
        {
            lock (Actions)
            {
                _action = action;

                if (Actions.Contains(action))
                    return;

                Actions.Add(action);
            }

            action();
        }

        public void Dispose()
        {
            lock (Actions)
            {
                Actions.Remove(_action);
            }
        }
    }

Schöner wärs, wenn man den Code direkt in die Usingklammern schreiben könnte aber das wirds wohl nicht spielen.

😃

27.01.2011 - 09:49 Uhr

Cool wärs, wenn man die eventenabled variable und die if abfrage auch nicht brauchen würde. 😃

27.01.2011 - 09:44 Uhr

Was mir aufgefallen ist ist, dass du das Control im OnPaint manipulierst(Width, Height). Wenn du diese Stellen auskommentierst hört das Flackern im Designer auch auf. Prinzipiell solltest du dort drinnen nichts außer zeichnen machen. Größe ändern gehört zum OnSizeChanged oder irgend ein anderes Event.

Darüber hinaus sind mir keine Nebeneffekte außer der MouseDown Effekt, welcher sich aber durch das FlatStyle beheben lässt, aufgefallen.

Lg XXX

27.01.2011 - 09:32 Uhr

Den Operator = kannst du nicht überladen aber einen impliziten Cast und damit funktioniert es dann wieder.
Implicit

Lg XXX

//EDIT: Kannst du ein kleines Beispiel posten wie deine Klasse das Ausführen eines Events verhindert? Würd mich auch interessieren. 😃

26.01.2011 - 15:58 Uhr

Oder du kapselst das Feld in einer eigenen Klasse die du übergibst.

26.01.2011 - 11:35 Uhr

Weniger Controls verwenden!

Wieviele sind denn auf dem Formular und überhaupt in der Applikation ca. gleichzeitig sichtbar?

//Edit: Dabei mein ich nicht sichtbar im Sinne von man kann sie sehen sondern, sie sind auf einem Formular, dass gerade irgendwo offen ist.

26.01.2011 - 10:00 Uhr

Siehe dazu: [FAQ] Office (Word, Excel, Outlook, ...) in eigenen Anwendungen verwenden.

Wenn du die Word Applikation selbst startest und das Document aus C# heraus öffnest, kannst du ganz einfach mit wordApp.Quit() die Applikation wieder schließen. Ob und wie man einen bestehende Instanz findet um sie zu einem Save und Close zu zwingen weiß ich leider nicht.

Lg XXX

26.01.2011 - 09:38 Uhr

Setz noch die anderen Flags:


this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

und dann zeichnest alles selbst. Was du jetzt machst ist einfach über die eigentliche CheckBox drüber zu malen, wodurch der Text dann anscheinen abgeschnitten wird. Wenn du schon selber zeichnen willst, musst du alles selber zeichnen inkl. Text.

Lg XXX

25.01.2011 - 15:46 Uhr

Argh!

Was für ein threat!

Nur keine Sorge, noch ist das für uns keine Bedrohung. 😁

25.01.2011 - 11:42 Uhr

Hallo bitmastah,

klar ist das möglich. Entweder du erstellst dein eigenes UserControl in einer eigenen ControlLibrary das du dann in deinen Projekten verwendest oder nur ein ResourceDictionary welches Styles beinhält ebenfalls in eine eigene ControlLibrary welche du dann in deinen Projekten verwenden kannst.

ResourceDictionaries kannst du per MergedResources oder so einbinden wogegen du dein UserControl mit einem Namespace in deinem Formular referenzieren musst.

Lg XXX

24.01.2011 - 16:09 Uhr

Nachdem du dich im Style des Windows befindest sollte es mit

{Binding RelativeSource={RelativeSource self}}

funktionieren.

Lg XXX

//EDIT: Ansonsten kannst ja vielleicht mit FindAncestor dein Window suchen aber eigentlich sollte self schon reichen.

24.01.2011 - 15:55 Uhr

Ich hab oben den falschen Link (wie poste ich richtig) verlinkt. Worauf ich vorher hinaus wollte war:

Nochmal der Link: Wie poste ich richtig?

1.1 Erst suchen und in die Doku schauen, dann posten
4a. Verlangt keine fertigen Lösungen
5. Problem genau beschreiben, inkl. genauer Fehlermeldung

Man kann dir nicht helfen, wenn du nicht sagst, was du gemacht/probiert hast und was nicht funktioniert.

Lg XXX

24.01.2011 - 15:27 Uhr

Hallo Arag1145,

erstens, ohne konkrete Fragen kann dir niemand konkrete Antworten geben. Siehe dazu Wie poste ich richtig?

ansonsten kann ich dir nur ein paar Schlagwörter nennen mit denen du evt. was anfangen kannst: OpenFileDialog, System.IO Namespace (darunter im Speziellen File und Directory fürs kopieren).

Lg XXX

19.01.2011 - 17:22 Uhr

Kann man die Methoden auch synchron aufrufen? Wenn ja, könntest du dich selbst um den asynchronen Aufruf kümmern und nur die synchronen Methoden aufrufen.


        public void CallLogin(string sEmail, string sPassword, Action<LoginObj> callLoginResponse)
        {
            Action<LoginObj> temp_callLoginResponse = callLoginResponse;
            new Action(()=>
            {
               IrgendeinLoginResult result = DbServiceClient.Login(SessionId, sEmail, sPassword);

               temp_callLoginResponse(result.Result);

            }).BeginInvoke(null,null);
        }

Vielleicht kannst du ja damit was anfangen? 😛

Lg XXX

19.01.2011 - 16:05 Uhr

Ist die SessionId für jeden Aufrufer einzigartig?

Dann speicher den callLoginResponse delegate zusammen mit der ab.

        Dictionary</*sessionId*/, Action<LoginObj>> callLoginResponses=new Dictionary</*sessionId*/, Action<LoginObj>>();

        public void CallLogin(string sEmail, string sPassword, Action<LoginObj> callLoginResponse)
        {
            callLoginResponses.Add(SessionId, callLoginResponse);

            //Sollte nur im Konstruktor einmal erstellt werden
            //DbServiceClient.LoginCompleted += LoginCompleted;
            DbServiceClient.LoginAsync(SessionId, sEmail, sPassword);
        }

        void LoginCompleted(object sender, LoginCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                callLoginResponses[SessionId](e.Result);
                callLoginResponses.Remove(callLoginResponses);
            }
            else
            {
                AddException(e.Error);
            }
        }


Irgendwie musst du einen Zusammenhang von Aufrufer zu Callback herstellen. Ob dies über die SessionId oder die emailAdresse ist(die evt. in den Eventargs vorhanden ist) spielt dabei keine Rolle.

Hoffentlich hilft dir das weiter.

Lg XXX

17.01.2011 - 13:25 Uhr

Hallo m.grauber,

schau dir mal den DependencyPropertyDescriptor an. Hier findest du ein Beispiel dazu.

Lg XXX

13.01.2011 - 11:41 Uhr

Hier zwei Links in denen deine Fragen genauer erklärt werden zum Nachlesen:
Value Types
und
Instance Constructors

Lg XXX

13.01.2011 - 11:16 Uhr

Hallo 777,

Okay... dankeschön.
Wobei 'kein Unterschied' ja nicht richtig ist.

liest du eigentlich was man dir mitzuteilen versucht?

Nur Klassenmember werden automatisch initialisiert. Wenn du in einer Methode int i; schreibst und diese Variable irgendwo verwenden willst, bekommst eine Fehlermeldung die so lautet:

Zitat:
Use of unassigned local variable 'i'

Lg XXX

//EDIT: Um noch deutlicher zu werden:


    class Program
    {
        static wert w; 
        //oder
        wert w2;
        //beide Variablen werden mit dem Defaultkonstruktor initialisiert.

        static void Main(string[] args)
        {
            Console.WriteLine(w.i);
            Console.WriteLine(new Program().w2.i);
            Console.Read();
        }
    }
    struct wert
    {
        public int i;
    }

13.01.2011 - 10:37 Uhr

Es gibt keinen Unterschied. Es wird so oder so mit dem Defaultkonstruktor erstellt.

Ein Unterschied wärs nur dann, wenn du

new Struktur(/*mit irgendwelchen Parametern*/);

aufrufen würdest.

Lg XXX

13.01.2011 - 10:17 Uhr

Abgesehen davon, dass der Code wie vorher schon erwähnt fragwürdig ist hier eine Möglichkeit für mehrere (benannte) Indexer:

Einfach im Code an der gewünschten Stelle das Snippet 'iterindex' einfügen und Tab drücken sollte dann folgenden Code produzieren:

    public MyViewIterator MyView
    {
        get
        {
            return new MyViewIterator(this);
        }
    }

    public class MyViewIterator
    {
        readonly TestClass outer;

        internal MyViewIterator(TestClass outer)
        {
            this.outer = outer;
        }

        // TODO: provide an appropriate implementation here
        public int Length { get { return 1; } }

        public ElementType this[int index]
        {
            get
            {
                //
                // TODO: implement indexer here
                //
                // you have full access to TestClass privates
                //
                throw new NotImplementedException();
                return default(ElementType);
            }
        }

        public System.Collections.Generic.IEnumerator<ElementType> GetEnumerator()
        {
            for (int i = 0; i < this.Length; i++)
            {
                yield return this[i];
            }
        }
    }

und da drinnen kannst du dich dann mit deiner Setterlogik austoben soviel du willst. Ich würd aber trotzdem die Anforderungen überdenken und schauen ob der Indexer hier die beste Lösung ist.

Lg XXX

13.01.2011 - 10:09 Uhr

Nur Klassenmember werden automatisch initialisiert. Wenn du in einer Methode int i; schreibst und diese Variable irgendwo verwenden willst, bekommst eine Fehlermeldung die so lautet:

Use of unassigned local variable 'i'

Aber einfach mal ausprobieren, dann kommt man gleich selber drauf.

Lg XXX

12.01.2011 - 13:10 Uhr

Bei mir liefert


        var list = new[]
        {
            new { Name = "Parts-Model_A" },
            new { Name = "Parts-Model_B" },
            new { Name = "Parts-Model_C" },
            new { Name = "Parts-Model_D" },
            new { Name = "Parts-Model_B" },
            new { Name = "Accessories-Model_A" },
            new { Name = "Accessories-Model_C" }
        };

        var x = (from c in list
                 group c by c.Name.Substring(0, c.Name.IndexOf("-")) into grp
                 select new { grp.Key, Value = grp.Count() }).ToList();

        foreach (var item in x)
        {
            Console.WriteLine(item.Key + ", " + item.Value);
        }

dein gewünschtes Ergebnis.

Das funktioniert aber auch nur so gut weil hier LinqToObjects in Verwendung ist. Wenn du Linq2Entities verwendest, wird das Substring und indexof erst übersetzt und kann dann im SQL unter Umständen falsch interpretiert werden und dafür gibts keine Lösung.

Du kannst die Abfrage vor dem Groupby materalisieren indem du ein AsEnumerable oder ToArray vorher aufrufst aber dann geht die Performance verloren weil die Daten erst her geholt werden müssen um sie nachträglich zu gruppieren.

Prinzipiell würd ich schon viel früher ansetzten... wieso stecken offenbar zwei unterschiedliche Informationen in einer Spalte? Das eine ist eine Kategorie und das andere ist das Model. Normalisiert ist die Tabelle so nicht denn dann wären solche Konstrukte gar nicht erst notwendig. Siehe dazu Normalisierung

Lg, XXX

11.01.2011 - 15:09 Uhr

In dem Fall kombinier einfach beide Techniken: Dictionary zum Suchen und Stack um das letzte gültige Objekt abzurufen.

Lg XXX

10.01.2011 - 20:23 Uhr

Wir eigentlich schon im Titel erklärt, nimmt ein DependencyObject, dass als Wert einem Attacht DependencyProperty übergeben wird keine Bindings an und reagiert folgend auch nicht darauf. (siehe Beispiel unten)

Hat jemand eine Idee warum das so ist und wie man das beheben könnte?

public class Base
{
    public static Child GetChild(DependencyObject obj) { return (Child)obj.GetValue(ChildProperty); }

    public static void SetChild(DependencyObject obj, Child value) { obj.SetValue(ChildProperty, value); }

    public static readonly DependencyProperty ChildProperty =
        DependencyProperty.RegisterAttached("Child", typeof(Child), typeof(Base), new FrameworkPropertyMetadata(null
            , FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
            , new PropertyChangedCallback((d, e) =>
            {
                //wird beim setzten der Eigenschaft aufgerufen
            })));

}

public class Child : DependencyObject
{
    public int Number { get { return (int)GetValue(NumberProperty); } set { SetValue(NumberProperty, value); } }

    public static readonly DependencyProperty NumberProperty =
        DependencyProperty.Register("Number", typeof(int), typeof(Child), new FrameworkPropertyMetadata(0
            , FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
            , new PropertyChangedCallback((d, e) =>
            {
                //wird nie aufgerufen
            })));
}
    <local:Base.Child>
        <local:Child Number="{Binding Path=Number}"></local:Child>
    </local:Base.Child>

Lg und Danke im Vorhinein,

XXX

10.01.2011 - 16:14 Uhr

Wenn es noch nicht in der Datenbank existiert kannst du es Detachen aber das musst du quasi selbst prüfen ob die Entity neu ist(dann detachen) oder bereits in der Datenbank ist(dann löschen).

Lg XXX

07.01.2011 - 11:14 Uhr

Schau mal unter Groups["..."].Captures nach.

Lg XXX

07.01.2011 - 09:28 Uhr

Ich würd den Ausdruck so ändern:

<\s*input(?:\s+(?<Key>\w+)\s*=\s*"(?<Value>[^"]*)")*\s*>

Damit bekommst du alle Key-Value Pairs aus deinem Html Tag und kannst dann im Code selber deine Logik implementieren als sie umständlich in Regex zu Lösen.

Lg XXX

23.12.2010 - 12:36 Uhr

Ich versteh nicht wo es da Verständnisprobleme geben kann:

Wenn du ein Blatt Papier beschreibst, dann ein neues Blatt her nimmst und auf dem schreibst, hast du danach zwei Blätter wo was drauf steht. Wenn du das nicht willst, musst du entweder das erste zerknüllen und wegwerfen oder statt einem neuen Blatt das alte wiederverwerten(Text ausradieren oder irgendwie drüber malen).

Was du machst ist ein zweites Blatt herzunehmen und erwarten das dann nur ein Blatt existiert. Aber das erste löst sich nicht von alleine in Luft auf.

Die 2 Möglichen Varianten:


public DateTime Date
{
    get { return this._day.Date; }
    set
    {
        this._day.Date = value;

        // set all binded properties to "changed"
        this.OnPropertyChanged(string.Empty);
    }
}


public DateTime Date
{
    get { return this._day.Date; }
    set
    {
        using (IServiceDay serviceDay = ServiceDayFactory.Create())
        {
            if (serviceDay.Exists(value))
                this._day = serviceDay.SelectByDate(value);
            else
            {
                serviceDay.DeleteDay(this._day); //delete old day

                this._day = serviceDay.NewDay(); // new Day()
                this._day.Date = value;
            }
        }
        // set all binded properties to "changed"
        this.OnPropertyChanged(string.Empty);
    }
}

Lg XXX

22.12.2010 - 09:50 Uhr

Trotzdem könntest du auch gleich dazu schreiben was du erreichen willst und was daran nicht funktioniert.

Wenn es sich also um das selbe Problem wie oben handelt, heißt das, das du beim Ändern des Datums kein neues Day Objekt anlegen willst sondern das bestehende Ändern? Na dann erzeug kein neues Dayobjekt sondern veränder das bestehende.

Wenn es sich um ein neues Objekt handelt aber das alte überflüssig ist, musst du das alte halt bei der Datumsänderung löschen.

Ansonsten gibts eh nur die dritte Variante, die du eh bereits umgesetzt hast, dass du beim Datumswechsel ständig einen neue Dayeintrag anlegst sofern es ihn noch nicht gibt.

Entweder so oder ich hab dein Problem nach wie vor nicht verstanden.

Lg XXX

21.12.2010 - 17:16 Uhr

Ich sehe den Zusammenhang zu deinem obigen Problem hier nicht. Was genau willst du erreichen und was daran funktioniert nicht?

Lg XXX

//EDIT: Dein Beispiel schaut ja ganz ok aus. Wenn dein Day in der DB noch nicht vorhanden ist, legst du ein neues an. Wo genau liegt jetzt das Problem?

21.12.2010 - 15:51 Uhr

Microsoft Research in partnership with Bing is happy to launch the Speller Challenge

Interessante Aufgabe wie ich finde. Macht da wer mit?

Lg XXX

17.12.2010 - 11:49 Uhr

Hallo Christian Peters,

überarbeitet mit Schemen:

(?:(?:from\s+)(?:(?:(?:\w+|\[[^\]]+\])\.)?(?<Table>\w+|\[[^\]]+\])(?:\s*,\s*)?)+|(?:join\s+)(?:(?:\w+|\[[^\]]+\])\.)?(?<Table>\w+|\[[^\]]+\]))

hier eine aktualisierte Variante:

Das Regex matcht entweder from oder join statements:

(?:from\s+)(?:(?:(?:\w+|\[[^\]]+\])\.)?(?<Table>\w+|\[[^\]]+\])(?:\s*,\s*)?)+
(?:join\s+)(?:(?:\w+|\[[^\]]+\])\.)?(?<Table>\w+|\[[^\]]+\])
  • Beide werden durch ein oder: (...|...) zusammengefügt. Damit wird nach dem einen oder den anderen Ausdruck gesucht.
  • Der Ausdruck ?: soll nur Gruppen unterdrücken, damit sie nicht im Result erscheinen.

Nicht getestet:


var regEx = new System.Text.RegularExpressions.Regex(@"...");

var matchColl = regEx.Matches(adapter.SelectCommand.CommandText);

foreach (Match match in matchColl)
{ 
   Group grp = match.Groups["Table"];

   foreach (Capture capture in grp.Captures)
   { 
       string tableName = capture.Value;
   }  
}

Ansonsten noch zum spielen: Regex-Lab

Lg XXX

17.12.2010 - 10:51 Uhr

Wenn du den SQL-String auf Tabellennamen untersuchen möchtest, bietet sich meiner Meinung nach Regex an.

Ich war so frei gleich mal ein Beispiel zu basteln:

(?:(?<=from\s+)(?:(?<Table>(?:\w+|\[[^\]]+\]))(?:\s*,\s*)?)+|(?<=join\s+)(?<Table>(?:\w+|\[[^\]]+\])))

Der Ausdruck findet Tabellen die mit Beistrichen getrennt sind:


select * 
from tab1, tab2 

oder klassische Joins:

select * from tab1 join tab2 on...

und auch geklammerte Ausdrücke mit Sonderzeichen sollten erfasst werden können:

select * from [tab1-.-343], tab2

und es spielt dabei auch keine Rolle ob es sich um ein Subselect handelt oder nicht.

Willst du diesen Ausdruck verwenden, musst du alle "Matches" der Gruppe "Table" und deren "Captures" durchschauen und dann evt. doppelte wieder rausschmeißen um wirklich alle Treffer zu bekommen.

Lg XXX

16.12.2010 - 15:33 Uhr

Und wo genau ist dein Problem?

15.12.2010 - 14:21 Uhr

So wie das für mich aussieht, ist dein Enum eine Applikationseinstellung(oder irre ich mich da?) und sollte somit sowieso überall und nicht nur im DAL verfügbar sein. Und wenn abhängig von deiner Einstellung(auf welche Datenbank zugegriffen wird) die GUI und sich ändert dann gibts dafür eine eigene GUI und wenn die andere Daten braucht dann bekommt diese eine eigene DAL Methode.

Ich halt viel von einem DAL der anhand eines Parameters irgendwelche anderen Daten zur Verfügung stellt. Auch bei der GUI denke ich das ein Trennen in zwei eigenständige Formulare sinnvoller ist.

Lg XXX

15.12.2010 - 13:53 Uhr

Naja das ist eindeutig DAL Thema und hat eigentlich die BL nicht zu interessieren wo und wie die Daten daher kommen.

Meiner Meinung nach, sollte der DAL die Daten so aufbereiten wie er es für richtig hält und die BL muss damit zurecht kommen ebenso wie die GUI wenn eine DAL Methode unterschiedliche Results zurückgeben kann.

Inwiefern hat der Parameter denn Auswirkungen auf die GUI bzw. den BL? Evt. ist die DAL Methode zu überdenken.

Lg XXX

15.12.2010 - 12:33 Uhr

Hab was dazu zu einem ähnlichen Problem gepostet: Link

Lg XXX

15.12.2010 - 12:00 Uhr

Ich halte es in meinem aktuellen Projekt nicht so strikt: Hauptsache von Oben nach Unten und nicht umgekehrt. Dabei überspring ich schon mal den BL um auf den DAL zuzugreifen. Entweder das, oder du lagerst sowas aus in eine extra Assembly die dann über alle Schichten erreichbar ist(shared).

Lg XXX

15.12.2010 - 11:56 Uhr

Leuchtet ein... 😃

Ich wollte eine DummyKlasse erstellen, die ich nur in der BaseClass brauche und nicht alle Methoden und Properties neu implementieren. Wenn ich sie nicht nested mache, kann ich sie auch nicht im Konstruktor verwenden, weil ich dann eine StackoverflowException bekomme. Nunja die Lösung liegt auf der Hand - Ich lass die Vererbung weg und implementier das Interface mit leeren Methoden und Properties.

Das mit dem Stackoverflow hätt ich gecheckt aber die Fehlermeldung sagt einfach nichts aus:

'BaseClass.DummySpecializedClass' does not implement interface member 'IInterface.AProperty.get'

Vielen Dank für die Antwort!

Lg XXX

15.12.2010 - 11:34 Uhr

Hallo zusammen,

unten stehendes Codebeispiel kompiliert nicht - warum?

Es kompiliert wenn:

  • DummySpecializedClass nicht in BaseClass liegt
  • DummySpecializedClass nicht ISpecializedInterface implementiert
  • DummySpecializedClass ISpecializedInterface explizit implementiert
  • DummySpecializedClass nicht von ChildClass erbt und damit ISpecializedInterface selbst implementiert

public interface IInterface
{
    string AProperty { get; }
}

public class ChildClass : BaseClass, IInterface
{
    public string AProperty { get; private set; }
}

public interface ISpecializedInterface : IInterface { }

public class BaseClass
{
    public class DummySpecializedClass : ChildClass, ISpecializedInterface { }
}

Alles schön und gut. Ich weiß jetzt das es so nicht geht. Nur warum? Ist das ein gewünschtes/erwartetes Verhalten?

Lg XXX

10.12.2010 - 17:15 Uhr

Frühere Lichtorgeln(ich erinnere mich an meine Kindheit) hatten so einen Regler um die Empfindlichkeit einzustellen.

Nach irgendwas muss man sich richten, entweder ermittelst du über das ganze Lied den max Peak für deine gesuchte Frequenz oder du lässt manuell den Peak nachregeln. Eine laufende Mittelwertberechnung kann nicht hinhauen bzw. kann ich mir nicht vorstellen wie die funktionieren sollte.

Lg XXX

10.12.2010 - 12:02 Uhr

Ich denke schon das es möglich sein sollte:

Jedes Item hat einen DataContext und der kann mit dem SelectedItem des ItemsControl zusammen geprüft werden.

Dazu bräuchtest du einen MultiValueConverter, dem du als Parameter einmal den eigenen DataContext sowie das SelectedItem übergibst(sprich Row+SelectedRow) und in dem Converter prüfst du dann so in der Art:

return (Convert.ToString(row["ipos"]) == Convert.ToString(selectedRow["shadowipos"]));

Lg XXX

//EDIT: Das ganze wie gesagt in Kombination mit einem DataTrigger, MultiBinding und MultiValueConverter

10.12.2010 - 11:53 Uhr

Ich teste meine Repositories so, dass ich wenn nötig per primitiven SQL Script Daten in der DB vorbereite, dann die Repository Methoden ausführe und nachher wieder mit custom-SQL Script prüfe ob in der Datenbank das erwartete drinnen steht. Und das ganze lasse ich in einer Transaction laufen, die am Ende zurückgerollt wird.

Lg XXX

10.12.2010 - 11:49 Uhr

Mit einem DataTrigger und einem passenden ValueConverter solltest du das Problem relativ elegant lösen können.

Lg XXX

//Edit: Oder anders ausgedrückt: Ich hab keine Ahnung wie man das aus dem Codebehind löst. 😃

07.12.2010 - 10:20 Uhr

Das passive hinzufügen von Elementen in das Hauptfenster kann genauso dynamisch gestaltet sein, wie wenn die Module aktiv ihre Elemente einfügen. Alles eine Frage der Umsetzung.

Lg XXX

03.12.2010 - 14:36 Uhr

Nachdem du nicht jetzt soooo viele Controls auf deinem Formular hast, wirds nicht daran liegen. Auch das "+=300" wird wohl kaum das System so in die Knie zwingen. Das einzige was mir dazu einfällt ist dass du mal alle SizeChanged oder LocationChanged Eventhandler zu kontrollieren was die so machen.

wie sieht dein Layouting aus? Berechnest du irgendwelche Größen und Positionen manuell? Von daher kann schon mal vorkommen, dass eine Größenänderung in einer anderen resultiert und sich so die Events extrem oft gegenseitig aufrufen.

Lg XXX

03.12.2010 - 14:30 Uhr

Hallo mep,

hier hab ich was gefunden, wie einer den Schließbutton auf sein TabControl zeichnet... vielleicht hilft dir das ja auch mit deiner Linie.

Lg XXX

//Edit: In dem Artikel wird DrawItem verwendet um in die Items zu zeichnen.